
! SpaceZap				 !
! Implementazione in TrueBasic !
! di Amiga magazine			 ! 
! Marzo 1988				 !
!						 !	
!						 !	
INPUT prompt "Livello di abilita' (0-5) ":skill   ! livello di abilità
LET skill=skill/5
SET back "black"                ! sfondo al nero
SET window -500,500,-500,500    ! dimensiona schermo
LET ox=100                      ! posizione x iniziale della nave
LET oy=100                      ! posizione y iniziale della nave
LET a=9
LET shots=1
!
! disegna la nave
!
PLOT area:ox,oy+3*a;ox+2*a,oy-2*a;ox,oy;ox-2*a,oy-2*a;ox,oy+3*a
BOX KEEP ox-3*a,ox+3*a,oy+3*a,oy-3*a in ship$
                                ! la forma della nave è posta in 
CLEAR                           ! una variabile stringa
DO
   LET tx=0
   BOX SHOW ship$ at ox,oy        ! disegna nave
   BOX CLEAR ox,ox+6*a,oy+7*a,oy  ! cancella nave
   GET MOUSE: x,y,state   ! senti mouse per movimento nave
   IF abs(ox+3*a)-10<0 then LET tx=tx+1
   IF abs(oy+3*a)-10<0 then LET tx=tx+1   ! plot x e y
   IF state>0 then LET tx=tx+1    ! pulsante di sparo premuto?
                                  ! conteggio colpi
   IF state>0 then                ! e suono dello sparo
      FOR ss=1 to 3
         SOUND 100,.03
         SOUND 500,.03
      NEXT ss
   END IF
   IF tx=3 then                   ! colpito ?
      LET score=score+1           ! se sì, incrementa score
      LET ki=ki+1                 ! e incrementa contatore skill
      LET ex=rnd*50               ! disegna esplosione
      SET color "red"
      FOR i=1 to ex 
         IF i>(ex/2) then SET color "yellow"
         PLOT 0,0;rnd*100,rnd*100
         PLOT 0,0;-rnd*100,-rnd*100
         PLOT 0,0;-rnd*100,rnd*100
         PLOT 0,0;rnd*100,-rnd*100
      NEXT i
      CLEAR
      SET color "white"
      PRINT "Shots";shots         ! stampa colpi
      PRINT "Kills";score         ! stampa punteggio
      PRINT "Skill";skill*5       ! stampa livello
      LET ox=(rnd*1000)-500       ! pos. x per nuova nave
      LET oy=(rnd*1000)-500       ! pos. y per nuova nave 
   END IF
   IF x1<>x then LET mx=x+x1      ! nave mancata, calcola x
   IF y1<>y then let my=y+y1      ! nave mancata, calcola y
   LET ox=ox-mx/50
   LET oy=oy-my/50
   IF state>1 then
      GET MOUSE:N1,n2,null        ! reset pulsante di sparo
      SET color "red"             ! cambia colore puntatore
      LET shots=shots+1           ! aumenta di uno i colpi
   END IF
   PLOT 0,0             ! disegna puntatore nel colore corrente
   PLOT 50,0;100,0     ! bianco se non sparo
   PLOT -50,0;-100,0   ! rosso se sparo
   PLOT 0,50;0,100
   PLOT 0,-50;0,-100
   IF state>1 then SET color "white"  ! Sparo? cambia colore
   IF ki>4 then           ! se più di 4 colpiti al livello scelto
      LET skill=skill+.2  ! incrementa skill level di 1
      LET ki=1
   END IF
   LET x1=x
   LET y1=y
   LET ox=ox+(skill*(rnd*35))  ! plot manovra evasiva nave
   LET oy=oy+(skill*(rnd*35))  ! in base al livello di abilità
   LET ox=ox+(skill*(-rnd*35))  ! più alto il livello
   LET oy=oy+(skill*(-rnd*35))  ! più si muove la nave
   IF oy>490 then LET oy=490
   IF oy<-490 then LET oy=-490
   IF ox>490 then LET ox=490
   IF ox<-490 then LET ox=-490
LOOP
END
