-----------------------------------------------------------------
     EEN SPEL MAKEN MET AMIGABASIC - SCHIETEN RUIMTESTATION
-----------------------------------------------------------------

De volgende routine  die we gaan bekijken  is de  schiet-routine.
Het ruimtestation schiet met deze routine op de vijandige schepen
en laat ze ontploffen als ze geraakt worden.

Ik bespreek slechts 1 routine uitgebreid omdat de vier richtingen
eigenlijk gelijk zijn.

Als eerste  moeten we  natuurlijk  weten of er  geschoten is.  We
moeten daarvoor de joystick-poort uitlezen :

   Schieten:
   IF STRIG(2)=0 THEN RETURN

Als STRIG(2)  gelijk aan  0 is dan  is er niet  geschoten. Als de
waarde niet-nul is dan is er geschoten.

Het ruimtestation kan niet in alle richtingen schieten. Alleen de
posities 0, 4, 8 en 12 staan  in de juiste stand om  te schieten.
We kunnen dus testen of een van die posities net aan de beurt is.

   IF Schip=0 THEN

Met behulp van het LINE-kommando maken we de laserstraal :
 
      LINE (154,100)-(156,Omlaag+35),12,bf

Een kleine wachtlus omdat anders alles te snel gaat :

      GOSUB Wacht

En de straal weer weg  halen door deze nog eens  te tekenen, maar
nu in de kleur van de achtergrond.

      LINE (154,100)-(156,Omlaag+35), 0,bf

De variabele  OMLAAG die we  gebruiken bevat  de afstand van  het
vijandige  schip tot  het ruimtestation.  Deze waarde  moeten  we
weten  om het vijandige  schip te  laten ontploffen en de  lengte
van de laser-straal te bepalen.

Nu moet het schip ontploffen. We doen dat in een subroutine :

      x2%=144
      y2%=Omlaag+5
      GOSUB KleineBoem

De waarde van OMLAAG moet weer op nul worden gezet :

      Omlaag=0
   END IF


Dit hele stuk moet er vier keer in  staan, voor de vier verschil-
lende richtingen waarin het  ruimtestation kan schieten. Deze be-
spreek ik niet, ze staan wel dadelijk achterin het programma.

We moeten nog twee subroutines bespreken die we gebruikt hebben :

KleineBoem - De ontploffing.
Wacht      - De wachtlus.


De ontploffing bestaat uit  6 verschillende plaatjes.  Met behulp
van de  blitter-funkties laten  we op de plaats van het  schip de
ontploffing verschijnen :

   KleineBoem:
   FOR BB=0 TO 5
       x1%=289:y1%=BB*33:sx%=32:sy%=32:GOSUB Blitter
       GOSUB Wacht
   NEXT
   LINE (x2%-5,y2%-5)-(x2%+37,y2%+37),0,bf

Met het LINE-kommando halen we de  laatste sterretjes van de ont-
ploffing weg.

Nu hebben we een  schip afgeschoten  en moet  de score  opgehoogd
worden. En natuurlijk op het scherm zetten :

   Score=Score+10
   LOCATE 1,1
   PRINT "Score : ";RIGHT$("000000"+RIGHT$(STR$(Score),
                    LEN(STR$(Score))-1),6)
   RETURN

Die PRINT regel  hierboven is langer  dan een  tekstregel van dit
programma. Daarom is die regel gesplitst.

De wachtlus is een eenvoudige FOR-NEXT :

   Wacht:
   FOR U=1 TO 500 : NEXT
   RETURN


Nu maar weer alles achter elkaar en naar de laatste routine in de
volgende tekst :

   Schieten:
   IF STRIG(2)=0 THEN RETURN

   IF Schip=0 THEN 
      REM Omlaag
      LINE (154,100)-(156,Omlaag+35),12,bf
      GOSUB Wacht
      LINE (154,100)-(156,Omlaag+35), 0,bf
      x2%=144
      y2%=Omlaag+5
      GOSUB KleineBoem
      Omlaag=0
   END IF

   IF Schip=4 THEN 
      REM Rechts
      LINE (180,124)-(275-Rechts,126),12,bf
      GOSUB Wacht
      LINE (180,124)-(275-Rechts,126 ), 0,bf
      x2%=280-Rechts
      y2%=113
      GOSUB KleineBoem
      Rechts=0
   END IF

   IF Schip=8 THEN 
      REM Omhoog
      LINE (154,150)-(156,215-Omhoog),12,bf
      GOSUB Wacht
      LINE (154,150)-(156,215-Omhoog), 0,bf
      x2%=144
      y2%=218-Omhoog
      GOSUB KleineBoem
      Omhoog=0
   END IF

   IF Schip=12 THEN 
      REM Links
      LINE (130,124)-(Links+35,126),12,bf
      GOSUB Wacht
      LINE (130,124)-(Links+35,126), 0,bf
      x2%=Links+6
      y2%=113
      GOSUB KleineBoem
      Links=0
   END IF

   RETURN

   KleineBoem:
   FOR BB=0 TO 5
       x1%=289:y1%=BB*33:sx%=32:sy%=32:GOSUB Blitter
       GOSUB Wacht
   NEXT
   LINE (x2%-5,y2%-5)-(x2%+37,y2%+37),0,bf
   Score=Score+10
   LOCATE 1,1
   PRINT "Score : ";RIGHT$("000000"+RIGHT$(STR$(Score),
                    LEN(STR$(Score))-1),6)
   RETURN

   Wacht:
   FOR U=1 TO 500 : NEXT
   RETURN

Die PRINT  regel hierboven  is langer dan een  tekstregel van dit
programma. Daarom is die regel gesplitst.

-----------------------------------------------------------------
