'===========================================================================
' Subject: BOMBER BOY                         Date: 08-22-99 (16:42)       
'  Author: Ruud Wijtvliet                     Code: QB, QBasic, PDS        
'  Origin: wijtvliet.c@wxs.nl               Packet: GAMES.ABC
'===========================================================================
'finished 06-08-1999
'
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'       B       O       M       B       E       R       B       O       Y
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
' Hier is dan mijn eerste spelletje geschreven in Q(uick)Basic. Het is een
' bomberman spelletje, waarbij je items kunt verzamelen en moet proberen
' je tegenstander te doden.
'
' De toetsen zijn als volgt:
' Speler 1 (links)                     ³                    Speler 2 (rechts)
' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
' <TAB> = bommen leggen                ³              <ENTER> = Bommen leggen
' sturen met w,a,d,x                   ³                   sturen met 8,4,6,2
'                                      ³
'
' NB: Zet NUM LOCK en CAPS LOCK beide AF tijdens het spelen van het spel!
'
' PS: Ik weet dat er nog wel wat bugs in het spel zitten, ik probeer ze eruit
' te halen maar ik weet niet of dat gaat lukken
'
'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
'
'Bij een DRAW-opdracht altijd "br6 bd15" erbij zetten (reden: de DRAW opdracht kijkt niet naar de VIEWPORT, maar naar de schermco”rdinaten)
'VIEWPORT (0, 0)-(288, 26) voor infobalk
'VIEWPORT (0, 26)-(288, 179) voor speelveld
'
'Kleuren:
'  0 -  31 = zwart Ä> wit
' 32 -  63 = zwart Ä> levelkleur
' 64 -  66 = kleuren die nodig zijn voor de puinblokken v.e. bep. level. (64 = basis/achterkleur v.d. puinblokken)
' 70 -  79 = kleuren pl 1
' 80 -  89 = kleuren pl 2
'191       = redelijk fel blauw
'192 - 223 = rood Ä> groen
'224 - 255 = geel Ä> rood
'
'Vakje (xx%, yy%) = ...      Bij vakje is puinblok (2) of item (3), ...
'  ÃÄ 0 = looppad                 ÃÄ .0 = leeg puinblok
'  ÃÄ 1 = vast blok               ÃÄ .1 = extra bom
'  ÃÄ 2 = puinblok                ÃÄ .2 = extra straal
'  ÃÄ 3 = item                    ÃÄ .3 = leven erbij (verbanddoos)
'  ÃÄ 4 = bom                     ÃÄ .5 = 10 punten erbij (munt)
'  ÃÄ ...                         ÃÄ .6 = 26 punten erbij (staf)
'  ÃÄ 11 = Speler 1               ÃÄ .7 = 42 punten erbij (kroon)
'  ÃÄ 11.5 = Speler 1 + bom      ...
'  ÃÄ 12 = Speler 2
'  ÀÄ 12.5 = Speler 2 + bom
'
'bom(a, b)     'a = speler (1/2), b = nr. v/d bom (1 t/m aantal bommen dat die speler heeft)
'bom.aan       '0 = bom is uit, 1 = bom staat aan (is gelegd, staat op scherp)
'bom.x         'ÄÄÂÄÄ (x,y) v/d bom
'bom.y         'ÄÄÙ
'bom.tijd      'Tijd dat de bom werd gelegd (op "1" werd gezet)
'bom.patr      'Patroon v/d bom: 1 of 2 (ivm trillen v/d bom in sub "BomBeweeg")


DECLARE FUNCTION Zx% (i%)
DECLARE FUNCTION Zy% (i%)
DECLARE SUB Begininstellingen ()
DECLARE SUB level1 ()
DECLARE SUB level2 ()
DECLARE SUB level3 ()
DECLARE SUB level4 ()
DECLARE SUB level5 ()
DECLARE SUB Bouwlevel (aantpuin%, bom%, straal%, leven%, munt%, staf%, kroon%)
DECLARE SUB TekenLevel ()
DECLARE SUB Tekenen (pl%, Speler.Richting())
DECLARE SUB BomLeggen (pl%, Speler.Richting())
DECLARE SUB BomBeweeg (pl%, bom%, patroon%)
DECLARE SUB BomExplode (nr%, nrh%)
DECLARE SUB Item (xh%(), yh%(), ite%)
DECLARE SUB LevenChange (pl%, change%)
DECLARE SUB GameOver (pl%)
COMMON SHARED x%(), y%(), leven%(), Speler.Punten()
COMMON SHARED Speler.Gewonnen(), Speler.Aantbommen(), Speler.Aantstraal()
COMMON SHARED vakje(), bom.aan(), bom.x(), bom.y(), bom.Tijd(), puin$
COMMON SHARED s1%(), s2%(), s3%(), s4%(), xbom%(), ybom%(), nr%, nrh%, xh%(), yh%(), raak1%(), raak2%(), raak3%(), raak4%()
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

level% = 1
DIM leven%(2)
leven%(1) = 100
leven%(2) = 100
DIM x%(2), y%(2)
x%(1) = 1: y%(1) = 1
x%(2) = 17: y%(2) = 9
DIM vakje(17, 9)
vakje(x%(1), y%(1)) = 11
vakje(x%(2), y%(2)) = 12

TYPE bom
 aan AS INTEGER
 x AS INTEGER
 y AS INTEGER
 Tijd AS SINGLE
 patr AS INTEGER
END TYPE
'Bom(speler, nr. v/d bom)
DIM bom.aan(2, 20)
DIM bom.x(2, 20)
DIM bom.y(2, 20)
DIM bom.Tijd(2, 20)
DIM bom.patr(2, 20)
DIM s1%(20)
DIM s2%(20)
DIM s3%(20)
DIM s4%(20)
DIM raak1%(20)
DIM raak2%(20)
DIM raak3%(20)
DIM raak4%(20)
DIM xbom%(20)
DIM ybom%(20)
DIM xh%(20)
DIM yh%(20)

TYPE Speler
 punten AS INTEGER
 gewonnen AS INTEGER
 aantbommen AS INTEGER
 aantstraal AS INTEGER
 Richting AS INTEGER
END TYPE
DIM Speler.Punten(2)
DIM Speler.Gewonnen(2)
DIM Speler.Aantbommen(2)
DIM Speler.Aantstraal(2)
DIM Speler.Richting(2)
FOR i% = 1 TO 2
 Speler.Punten(i%) = 0
 Speler.Gewonnen(i%) = 0
 Speler.Aantbommen(i%) = 1
 Speler.Aantstraal(i%) = 1
 Speler.Richting(i%) = 1
NEXT i%

CALL Begininstellingen
'CALL level5
CALL TekenLevel
FOR pl% = 1 TO 2: CALL Tekenen(pl%, Speler.Richting()): NEXT pl%

ON KEY(21) GOSUB Pl1Omhoog:  ON KEY(11) GOSUB Pl2Omhoog
ON KEY(22) GOSUB Pl1Links:   ON KEY(12) GOSUB Pl2Links
ON KEY(23) GOSUB Pl1Rechts:  ON KEY(13) GOSUB Pl2Rechts
ON KEY(24) GOSUB Pl1Omlaag:  ON KEY(14) GOSUB Pl2Omlaag
ON KEY(25) GOSUB Pl1LegBom:  ON KEY(15) GOSUB Pl2LegBom
DO
 'Bom exploderen als dat nodig is:
  FOR pl% = 1 TO 2
   FOR bom% = 1 TO Speler.Aantbommen(pl%)
    IF bom.aan(pl%, bom%) = 1 AND TIMER - bom.Tijd(pl%, bom%) > 3 THEN
      nrh% = 0
      nr% = 0
      xbom%(1) = bom.x(pl%, bom%)
      ybom%(1) = bom.y(pl%, bom%)
      CALL BomExplode(nr%, nrh%)
      FOR ite% = 1 TO nrh%
       CALL Item(xh%(), yh%(), ite%)
      NEXT ite%
      FOR i% = 1 TO nr%
       IF xbom%(i%) <= 17 AND xbom%(i%) >= 1 AND ybom%(i%) <= 9 AND ybom%(i%) >= 1 AND vakje(xbom%(i%), ybom%(i%)) = 4.5 THEN vakje(xbom%(i%), ybom%(i%)) = 0
      NEXT i%
    END IF
   NEXT bom%
  NEXT pl%

  'Bom trillen als dat nodig is:
  FOR pl% = 1 TO 2
   FOR bom% = 1 TO Speler.Aantbommen(pl%)
    FOR i% = 0 TO 3
     IF bom.aan(pl%, bom%) = 1 AND TIMER - bom.Tijd(pl%, bom%) - i% < 1.1 AND TIMER - bom.Tijd(pl%, bom%) - i% > .9 THEN
      IF bom.patr(pl%, bom%) = 1 THEN bom.patr(pl%, bom%) = 0 ELSE bom.patr(pl%, bom%) = 1
      patroon% = bom.patr(pl%, bom%)
      CALL BomBeweeg(pl%, bom%, patroon%)
     END IF
    NEXT i%
   NEXT bom%
  NEXT pl%
LOOP

Pl1Omhoog:
pl% = 1
Speler.Richting(pl%) = 1
CALL Tekenen(pl%, Speler.Richting())
RETURN

Pl1Links:
pl% = 1
Speler.Richting(pl%) = 2
CALL Tekenen(pl%, Speler.Richting())
RETURN

Pl1Rechts:
pl% = 1
Speler.Richting(pl%) = 3
CALL Tekenen(pl%, Speler.Richting())
RETURN

Pl1Omlaag:
pl% = 1
Speler.Richting(pl%) = 4
CALL Tekenen(pl%, Speler.Richting())
RETURN

Pl1LegBom:
pl% = 1
CALL BomLeggen(pl%, Speler.Richting())
RETURN
'. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Pl2Omhoog:
pl% = 2
Speler.Richting(pl%) = 1
CALL Tekenen(pl%, Speler.Richting())
RETURN

Pl2Links:
pl% = 2
Speler.Richting(pl%) = 2
CALL Tekenen(pl%, Speler.Richting())
RETURN

Pl2Rechts:
pl% = 2
Speler.Richting(pl%) = 3
CALL Tekenen(pl%, Speler.Richting())
RETURN

Pl2Omlaag:
pl% = 2
Speler.Richting(pl%) = 4
CALL Tekenen(pl%, Speler.Richting())
RETURN

Pl2LegBom:
pl% = 2
CALL BomLeggen(pl%, Speler.Richting())
RETURN

'
' Zet de begininstellingen voor het programma klaar:
' - kleuren 0-31 en 224-255 instellen
' - uitvoerscherm tekenen
' - toetsen instellen en aanzetten
'
'
SUB Begininstellingen

SCREEN 13
RANDOMIZE TIMER

'kleuren 0-31 en 224-255 instellen:
FOR i% = 0 TO 31
 PALETTE i%, i% * 2 + i% * 2 * 256 + i% * 2 * 256 ^ 2  '  0- 31 = zwart - wit
 PALETTE i% + 192, i% * 2 * 256 + 63 - i% * 2          '192-223 = rood - groen
 PALETTE i% + 224, (63 - i% * 2) * 256 + 63            '224-255 = geel - rood
NEXT i%
PALETTE 223, 50 * 256
PALETTE 191, 50 * 256 ^ 2

'in vloeiend geel -> rood, BOMBERBOY schrijven
i$ = "BomberBoy": FOR i% = 1 TO 9: LOCATE 1, 15 + i%: COLOR i% * 3.4 + 224: PRINT MID$(i$, i%): NEXT i%

'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'toetsen laten zien:
LOCATE 4: COLOR 223: PRINT "       Speler 1        "
LOCATE 6: COLOR 31: PRINT "                       w  "
LOCATE 7: COLOR 31: PRINT "  <TAB> = leg bom       "
LOCATE 8: COLOR 31: PRINT "                     a "; CHR$(26); "d  "
LOCATE 9: COLOR 31: PRINT "                        "
LOCATE 10: COLOR 31: PRINT "                       x  "
LOCATE 12: COLOR 31: PRINT "  Kies een kleur met de spatiebalk,"
LOCATE 13: COLOR 31: PRINT "  en bevestig met escape."

r% = 1: g% = 1: B% = 1: pl% = 1
LINE (30, 123)-STEP(6, 4), 26, BF
LINE (60, 123)-STEP(7, 4), 26, BF
LINE (90, 123)-STEP(7, 4), 26, BF
DO
 K$ = INKEY$
 IF K$ = CHR$(32) THEN
  IF r% = 1 AND g% = 1 AND B% = 1 THEN r% = 1: g% = 0: B% = 0: aan% = 0
  IF r% = 0 AND g% = 1 AND B% = 1 THEN r% = 1: g% = 1: B% = 1
  IF r% = 1 AND g% = 0 AND B% = 1 THEN r% = 0: g% = 1: B% = 1
  IF r% = 1 AND g% = 1 AND B% = 0 THEN r% = 1: g% = 0: B% = 1
  IF r% = 0 AND g% = 0 AND B% = 1 THEN r% = 1: g% = 1: B% = 0
  IF r% = 0 AND g% = 1 AND B% = 0 THEN r% = 0: g% = 0: B% = 1
  IF r% = 1 AND g% = 0 AND B% = 0 AND aan% = 1 THEN r% = 0: g% = 1: B% = 0
  IF aan% = 1 THEN aan% = 0 ELSE aan% = 1
 END IF
 FOR i% = 0 TO 9
  PALETTE 70 + i%, r% * (63 - i% * 7) + g% * (63 - i% * 7) * 256 + B% * (63 - i% * 7) * 256 ^ 2
 NEXT i%
 IF K$ = CHR$(27) THEN EXIT DO
 DRAW "bm30,120    c" + STR$(70) + "r6f1l8g1r10d4g2l6h2u3r1d3f1br6e1u3d1bl3 c0l2bd2r2bh1 c25u1 c15d0 c" + STR$(pl% * 10 + 60) + "bd5l1r2f2d1u1h1l4g1br2r2d3r1bl3u2r2e2 c" + STR$(pl% * 10 + 63) + "g1bd2d0bd1bl4u0"
 DRAW "bm60,120    c" + STR$(70) + "r6f1l8g1r10d4g2l6e1l2h1u3r2g1d2l1u2 c0br5r2bd2l2be1 c25u1 c15d0 c" + STR$(pl% * 10 + 60) + "bd5l2g2d1u1e1r5e1g1l2d4r1bl3l1u1e1u1r1d1l1d1 c" + STR$(pl% * 10 + 63) + "d0br3d0"
 DRAW "bm90,120br7 c" + STR$(70) + "l6g1r8f1l10d4f2r6h1r2e1u3l2f1d2r1u2 c0bl5l2bd2r2bh1 c25u1 c15d0 c" + STR$(pl% * 10 + 60) + "bd5r2f2d1u1h1l5h1f1r2d4l1br3r1u1h1u1l1d1r1d1 c" + STR$(pl% * 10 + 63) + "d0bl3d0"
 DRAW "bm120,120   c" + STR$(78) + "r6f2d4g2l6h2u4e2r5f3d2g3l4h3u2e2r1 c" + STR$(76) + "r4f2d2g2l4h2u2e1r1 c" + STR$(73) + "r4f1d2g1l4h1u2r1 c" + STR$(70) + "r4d1l4d1r4  bd4bl1l2g2d1u1e1r4f1bl2l2d3l1br3u2l1"
LOOP

'. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
'toetsen laten zien:
LOCATE 4: COLOR 223: PRINT "       Speler 2        "
LOCATE 6: COLOR 31: PRINT "                       8  "
LOCATE 7: COLOR 31: PRINT "  <ENTER> = leg bom     "
LOCATE 8: COLOR 31: PRINT "                     4 "; CHR$(26); "6  "
LOCATE 9: COLOR 31: PRINT "                        "
LOCATE 10: COLOR 31: PRINT "                       2  "
LOCATE 12: COLOR 31: PRINT "  Kies een kleur met de spatiebalk,"
LOCATE 13: COLOR 31: PRINT "  en bevestig met escape."

r% = 1: g% = 1: B% = 1: pl% = 2
LINE (30, 123)-STEP(6, 4), 26, BF
LINE (60, 123)-STEP(7, 4), 26, BF
LINE (90, 123)-STEP(7, 4), 26, BF
DO
 K$ = INKEY$
 IF K$ = CHR$(32) THEN
  IF r% = 1 AND g% = 1 AND B% = 1 THEN r% = 1: g% = 0: B% = 0: aan% = 0
  IF r% = 0 AND g% = 1 AND B% = 1 THEN r% = 1: g% = 1: B% = 1
  IF r% = 1 AND g% = 0 AND B% = 1 THEN r% = 0: g% = 1: B% = 1
  IF r% = 1 AND g% = 1 AND B% = 0 THEN r% = 1: g% = 0: B% = 1
  IF r% = 0 AND g% = 0 AND B% = 1 THEN r% = 1: g% = 1: B% = 0
  IF r% = 0 AND g% = 1 AND B% = 0 THEN r% = 0: g% = 0: B% = 1
  IF r% = 1 AND g% = 0 AND B% = 0 AND aan% = 1 THEN r% = 0: g% = 1: B% = 0
  IF aan% = 1 THEN aan% = 0 ELSE aan% = 1
 END IF
 FOR i% = 0 TO 9
  PALETTE 80 + i%, r% * (63 - i% * 7) + g% * (63 - i% * 7) * 256 + B% * (63 - i% * 7) * 256 ^ 2
 NEXT i%
 IF K$ = CHR$(27) THEN EXIT DO
 DRAW "bm30,120    c" + STR$(80) + "r6f1l8g1r10d4g2l6h2u3r1d3f1br6e1u3d1bl3 c0l2bd2r2bh1 c25u1 c15d0 c" + STR$(pl% * 10 + 60) + "bd5l1r2f2d1u1h1l4g1br2r2d3r1bl3u2r2e2 c" + STR$(pl% * 10 + 63) + "g1bd2d0bd1bl4u0"
 DRAW "bm60,120    c" + STR$(80) + "r6f1l8g1r10d4g2l6e1l2h1u3r2g1d2l1u2 c0br5r2bd2l2be1 c25u1 c15d0 c" + STR$(pl% * 10 + 60) + "bd5l2g2d1u1e1r5e1g1l2d4r1bl3l1u1e1u1r1d1l1d1 c" + STR$(pl% * 10 + 63) + "d0br3d0"
 DRAW "bm90,120br7 c" + STR$(80) + "l6g1r8f1l10d4f2r6h1r2e1u3l2f1d2r1u2 c0bl5l2bd2r2bh1 c25u1 c15d0 c" + STR$(pl% * 10 + 60) + "bd5r2f2d1u1h1l5h1f1r2d4l1br3r1u1h1u1l1d1r1d1 c" + STR$(pl% * 10 + 63) + "d0bl3d0"
 DRAW "bm120,120   c" + STR$(88) + "r6f2d4g2l6h2u4e2r5f3d2g3l4h3u2e2r1 c" + STR$(86) + "r4f2d2g2l4h2u2e1r1 c" + STR$(83) + "r4f1d2g1l4h1u2r1 c" + STR$(80) + "r4d1l4d1r4  bd4bl1l2g2d1u1e1r4f1bl2l2d3l1br3u2l1"
LOOP

'--------------------------------------------------------------------------------------
Level01$ = "      Level 1      ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ Ü Ü Ü Ü Ü Ü Ü Ü ÛÛ Ü Ü Ü Ü Ü Ü Ü Ü ÛÛ Ü Ü Ü Ü Ü Ü Ü Ü ÛÛ Ü Ü Ü Ü Ü Ü Ü Ü ÛÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ"
Level02$ = "      Level 2      ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ  Ü Ü Ü Ü Ü Ü Ü  ÛÛ Ü Ü Ü Ü Ü Ü Ü Ü ÛÛ  Ü Ü Ü Ü Ü Ü Ü  ÛÛ Ü Ü Ü Ü Ü Ü Ü Ü ÛÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ"
Level03$ = "      Level 3      ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ   Û       Û     ÛÛ Ûßß  ßßß  Û Ü   ÛÛ ß Ü Ûß   ßß   Û ÛÛ     Û  ßßß  Ûßß ÛÛÜÜÜÜÜÛÜÜÜÜÜÜÜÛÜÜÜÛ"
Level04$ = "      Level 4      ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ     Û  Ü        ÛÛ     ÜÜÛÛÛÜÜ  ßßßÛÛ  ßßßÛÛÛÜÛÛÛßßß  ÛÛßßß    ßÛß Ü     ÛÛÜÜÜÜÜÜÜÜÜÜÜÛÜÜÜÜÜÛ"
Level05$ = "      Level 5      ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ ÜÛÜ Ü Û ÜÜ  ß Ü ÛÛ Ü Û Ü ÜÜ Ûßßß Ü ÛÛ ÛÜÜÜÛÜÛÜÜÛ ß  ÛÜÛÛ Ü ÜÜ  ÛÜÜÜÜ ÛÜ  ÛÛÜÛÜÜÛÜÜÜÜÜÜÜÜÜÛÜÜÛ"
level$ = Level01$: aan% = 0: level% = 1

FOR i% = 2 TO 20: LOCATE i%: PRINT SPACE$(40): NEXT i%
LOCATE 4: COLOR 223: PRINT "               De levels        "
LOCATE 16: COLOR 31: PRINT "  Kies een level met de spatiebalk,"
LOCATE 17: COLOR 31: PRINT "  en bevestig met escape."
DO
 K$ = INKEY$
 IF K$ = CHR$(32) THEN
   IF level$ = Level04$ THEN level$ = Level05$: aan% = 1:    level% = 5
   IF level$ = Level03$ THEN level$ = Level04$:              level% = 4
   IF level$ = Level02$ THEN level$ = Level03$:              level% = 3
   IF level$ = Level01$ THEN level$ = Level02$:              level% = 2
   IF level$ = Level05$ AND aan% = 0 THEN level$ = Level01$: level% = 1
   IF aan% = 0 THEN aan% = 1 ELSE aan% = 0
 END IF
 FOR yy% = 1 TO 7
   i$ = MID$(level$, yy% * 19 - 18, 19)
   LOCATE yy% + 6, 11: PRINT i$
 NEXT yy%
 IF K$ = CHR$(27) THEN EXIT DO
LOOP
IF level% = 1 THEN CALL level1
IF level% = 2 THEN CALL level2
IF level% = 3 THEN CALL level3
IF level% = 4 THEN CALL level4
IF level% = 5 THEN CALL level5

'. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FOR i% = 2 TO 20: LOCATE i%: PRINT SPACE$(40): NEXT i%
LOCATE 4: COLOR 223: PRINT "       De items:         "
LOCATE 6: COLOR 31: PRINT "          extra bom + 5 punten ": PRINT
PRINT "          langere explosie + 5 punten": PRINT
PRINT "          25 leven + 15 punten       ": PRINT
PRINT "          10 punten                  ": PRINT
PRINT "          26 punten                  ": PRINT
PRINT "          42 punten                  "
xx% = 50: yy% = 36: LINE (xx% + 1, yy% + 1)-STEP(14, 14), 20, BF
DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br8 bd7 c0 bd6 bl2 r4 e1 l6 h1 r8 e1 l10 u1 r10 u1 l10 u1 r10 u1 l10 e1 r8 h1 l6 e1 r4 l4 d2 c5 d2g1l1u2 d2 c10 e2l1 c15g1 br5 bu2 c224 h1u1h1  bd8br2 d2u1l1r2 br2 u1d2"
xx% = 50: yy% = 52
FOR i% = 0 TO 14: LINE (xx% + 1, yy% + 1 + i%)-(xx% + 15 - i%, yy% + 15), 224 + i% * 2.2: LINE (xx% + 1 + i%, yy% + 1)-(xx% + 15, yy% + 15 - i%), 224 + i% * 2: NEXT i%
DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br8 bd7 c0 bd4 br3 d2 u1 l1 r2 br2 d1 u2"
xx% = 50: yy% = 67: LINE (xx% + 4, yy% + 4)-STEP(8, 8), 31, BF
DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br11bd9c255 u2l1d2l1u4d6l1u6l1d6u2l1u2l1d2"
DRAW "bm60,87 c31l3g3d3 c15f1u4e1d6f1u8r1d7r1u7r1d7r1u8f1d6e1u4f1d1 c0d2g3l3bl1bu3u3g1br3d1f1r1e1u1h1l1"
DRAW "bm58,102c224f6u1h5br5g10d1e10u1 c235l1g1l1bl3f2bf2f1bh3g7 c191br1be1e0be2e0be2e0be2e0be2e0bd4h0bh4h0"
DRAW "bm57,119c224r2d1r2u1r2f2d3l1g1e1h1u1h2l2g2d1g1l1u3e1br4d5bl3g1c235d1r8u1d1g1c240l6u1h2c230r1f1r6e1r1bg2c223l0bl2l0bl2l0bl2l0bu9br2r2h1d2bf4c255g2u2g1d1bl2u1h1d2h2"
SLEEP
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

VIEW (6, 15)-(294, 194), 0, 31      'viewport tekenen
LINE (0, 26)-(289, 26), 31          'scheidingslijn speelveld/infobalk tekenen
LINE (144, 0)-(144, 26), 31         'scheidingslijn info player1/player2
LINE (-1, -1)-(101, 6), 31, B         'damagebalk player 1 tekenen
LINE (144, -1)-(246, 6), 31, B        'damagebalk player 2 tekenen
FOR i% = 0 TO 99
 LINE (i%, 0)-(i%, 5), i% / 3.3 + 192
 LINE (i% + 145, 0)-(i% + 145, 5), i% / 3.3 + 192
NEXT i%
LINE (-1, 6)-STEP(10, 10), 31, B      '2 vierkantjes tekenen
LINE (-1, 16)-STEP(10, 10), 31, B     'onder de damagebalk van player 1
LINE (144, 6)-STEP(10, 10), 31, B     '2 vierkantjes tekenen
LINE (144, 16)-STEP(10, 10), 31, B    'onder de damagebalk van player 2
PAINT (0, 7), 18, 31: PAINT (146, 7), 18, 31
DRAW "bm9,30 c0 r2 e1 l4 h1 r6 u1 l6 u1 r6 h1 l4 e1 r2 bl1 c224 d1 u1 h1" 'u1 l10 e1 r8 h1 l6 e1 r4 l4 d2 c5 d2g1l1u2 d2 c10 e2l1 c15g1 br5 bu2 c224 h1u1h1"
DRAW "bm154,30 c0 r2 e1 l4 h1 r6 u1 l6 u1 r6 h1 l4 e1 r2 bl1 c224 d1 u1 h1" 'u1 l10 e1 r8 h1 l6 e1 r4 l4 d2 c5 d2g1l1u2 d2 c10 e2l1 c15g1 br5 bu2 c224 h1u1h1"
FOR i% = 0 TO 8
 LINE (0, 17 + i%)-(8 - i%, 25), 224 + i% * 3.8
 LINE (0 + i%, 17)-(8, 25 - i%), 224 + i% * 3.8
 LINE (145, 17 + i%)-(153 - i%, 25), 224 + i% * 3.8
 LINE (145 + i%, 17)-(153, 25 - i%), 224 + i% * 3.8
NEXT i%

'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'Player 2:
'pijltjes (11 t/m 14) voor bewegen
KEY 15, CHR$(0) + CHR$(28)      'key 15 = <enter>
KEY 16, CHR$(0) + CHR$(54)      'key 16 = <rshift>

'Player 1:
'Bewegen =
KEY 21, CHR$(0) + CHR$(17)      'key 21 = w
KEY 22, CHR$(0) + CHR$(30)      'key 22 = a
KEY 23, CHR$(0) + CHR$(32)      'key 23 = d
KEY 24, CHR$(0) + CHR$(45)      'key 24 = x
KEY 25, CHR$(0) + CHR$(15)      'key 25 = <tab>

FOR i% = 11 TO 16: KEY(i%) ON: NEXT i%
FOR i% = 21 TO 25: KEY(i%) ON: NEXT i%
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


END SUB

'
' De bom laten trillen zodat het lijkt of deze letterlijk op springen staat
'
'
SUB BomBeweeg (pl%, bom%, patroon%)

xx% = bom.x(pl%, bom%): xx% = Zx%(xx%)
yy% = bom.y(pl%, bom%): yy% = Zy%(yy%)

LINE (xx%, yy%)-STEP(16, 16), 43, BF

IF patroon% = 1 THEN
  DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br7 bd14 c0 br5 bd15 r4 e1 l6 h1 r8 e1 l10 u1 r10 u1 l10 u1 r10 u1 l10 e1 r8 h1 l6 e1 r4 l4 d2 c5 d2g1l1u2 d2 c10 e2l1 c15g1 br5 bu2 c224 h1u1h1"
ELSE
  DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br7 bd14 c0 br5 bd15 r4 e1 l6 h1 r8 e1 l10 h1 r12 u1 l12 u1 r12 u1 l12 u1 r12 h1 l10 e1 r8 h1 l6 e1 r4 l4 d2 c5 d2 g1 l1u2 d2 c10 e2l1 c15g1 br5 bu2 c224 h1u1h1"
END IF


END SUB

'
'  Het tekenen van de exploderende bom, plus:
'  - alle variabelen voor die bom weer op 0 zetten
'  - andere bommen in het 'explosiepad' van de bom ook laten onploffen
'
'
SUB BomExplode (nr%, nrh%)
SHARED xh%(), yh%()
'nr% = het nr v/d explosie
'nrh% = het nr v/h item (hoeveel puinblokken er al zijn vernield)

nr% = nr% + 1
xbom% = xbom%(nr%)       ' ÄÂÄÄ xbom%(nr%) & ybom%(nr%) zijn al voor het
ybom% = ybom%(nr%)       ' ÄÙ   betreden van deze sub vastgesteld.
FOR i% = 1 TO 2
 FOR j% = 1 TO Speler.Aantbommen(i%)
  IF bom.x(i%, j%) = xbom% AND bom.y(i%, j%) = ybom% THEN straal% = Speler.Aantstraal(i%)
 NEXT j%
NEXT i%
IF xbom% < 1 OR xbom% > 17 OR ybom% < 1 OR ybom% > 9 THEN EXIT SUB
vakje(xbom%, ybom%) = 4.5     'bom die met ontploffen bezig is...
xx% = Zx%(xbom%)
yy% = Zy%(ybom%)

'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'De explosie naar de andere kanten bekijken, en kijken wat er geraakt wordt:

FOR s1% = 1 TO straal%
 IF ybom% - s1% < 1 THEN s1% = s1% - 1: GOTO Vol1
 IF vakje(xbom%, ybom% - s1%) = 1 THEN raak1% = 1: s1% = s1% - 1: GOTO Vol1
 IF vakje(xbom%, ybom% - s1%) >= 2 AND vakje(xbom%, ybom% - s1%) < 3 THEN raak1% = 2: GOTO Vol1
 IF vakje(xbom%, ybom% - s1%) >= 3 AND vakje(xbom%, ybom% - s1%) < 4 THEN raak1% = 3: GOTO Vol1
 IF vakje(xbom%, ybom% - s1%) = 4 THEN raak1% = 4: s1% = s1% - 1: GOTO Vol1
 IF vakje(xbom%, ybom% - s1%) = 11 OR vakje(xbom%, ybom% - s1%) = 12 THEN pl% = vakje(xbom%, ybom% - s1%) - 10: change% = -30: CALL LevenChange(pl%, change%): GOSUB Geraakt: GOTO Vol1
NEXT s1%: raak1% = 0: s1% = straal%
Vol1:
FOR s2% = 1 TO straal%
 IF xbom% - s2% < 1 THEN s2% = s2% - 1: GOTO Vol2
 IF vakje(xbom% - s2%, ybom%) = 1 THEN raak2% = 1: s2% = s2% - 1: GOTO Vol2
 IF vakje(xbom% - s2%, ybom%) >= 2 AND vakje(xbom% - s2%, ybom%) < 3 THEN raak2% = 2: GOTO Vol2
 IF vakje(xbom% - s2%, ybom%) >= 3 AND vakje(xbom% - s2%, ybom%) < 4 THEN raak2% = 3: GOTO Vol2
 IF vakje(xbom% - s2%, ybom%) = 4 THEN raak2% = 4: s2% = s2% - 1: GOTO Vol2
 IF vakje(xbom% - s2%, ybom%) = 11 OR vakje(xbom% - s2%, ybom%) = 12 THEN pl% = vakje(xbom% - s2%, ybom%) - 10: change% = -30: CALL LevenChange(pl%, change%): GOSUB Geraakt: GOTO Vol2
NEXT s2%: raak2% = 0: s2% = straal%

Vol2:
FOR s3% = 1 TO straal%
 IF xbom% + s3% > 17 THEN s3% = s3% - 1: GOTO Vol3
 IF vakje(xbom% + s3%, ybom%) = 1 THEN raak3% = 1: s3% = s3% - 1: GOTO Vol3
 IF vakje(xbom% + s3%, ybom%) >= 2 AND vakje(xbom% + s3%, ybom%) < 3 THEN raak3% = 2: GOTO Vol3
 IF vakje(xbom% + s3%, ybom%) >= 3 AND vakje(xbom% + s3%, ybom%) < 4 THEN raak3% = 3: GOTO Vol3
 IF vakje(xbom% + s3%, ybom%) = 4 THEN raak3% = 4: s3% = s3% - 1: GOTO Vol3
 IF vakje(xbom% + s3%, ybom%) = 11 OR vakje(xbom% + s3%, ybom%) = 12 THEN pl% = vakje(xbom% + s3%, ybom%) - 10: change% = -30: CALL LevenChange(pl%, change%): GOSUB Geraakt: GOTO Vol3
NEXT s3%: raak3% = 0: s3% = straal%

Vol3:
FOR s4% = 1 TO straal%
 IF ybom% + s4% > 9 THEN s4% = s4% - 1: GOTO Vol4
 IF vakje(xbom%, ybom% + s4%) = 1 THEN raak4% = 1: s4% = s4% - 1: GOTO Vol4
 IF vakje(xbom%, ybom% + s4%) >= 2 AND vakje(xbom%, ybom% + s4%) < 3 THEN raak4% = 2: GOTO Vol4
 IF vakje(xbom%, ybom% + s4%) >= 3 AND vakje(xbom%, ybom% + s4%) < 4 THEN raak4% = 3: GOTO Vol4
 IF vakje(xbom%, ybom% + s4%) = 4 THEN raak4% = 4: s4% = s4% - 1: GOTO Vol4
 IF vakje(xbom%, ybom% + s4%) = 11 OR vakje(xbom%, ybom% + s4%) = 12 THEN pl% = vakje(xbom%, ybom% + s4%) - 10: change% = -30: CALL LevenChange(pl%, change%): GOSUB Geraakt: GOTO Vol4
NEXT s4%: raak4% = 0: s4% = straal%

Vol4:
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IF s1%(nr%) = 99 THEN s1%(nr%) = 0: raak1% = 0 ELSE s1%(nr%) = s1%
sp1% = s1%(nr%) * 17 + 8
IF s2%(nr%) = 99 THEN s2%(nr%) = 0: raak2% = 0 ELSE s2%(nr%) = s2%
sp2% = s2%(nr%) * 17 + 8
IF s3%(nr%) = 99 THEN s3%(nr%) = 0: raak3% = 0 ELSE s3%(nr%) = s3%
sp3% = s3%(nr%) * 17 + 8
IF s4%(nr%) = 99 THEN s4%(nr%) = 0: raak4% = 0 ELSE s4%(nr%) = s4%
sp4% = s4%(nr%) * 17 + 8

'De stralen tekenen:
FOR i% = 8 TO 0 STEP -1
 LINE (xx% + 8 - i%, yy% + 8 - i%)-(xx% + 8 + i%, yy% + 8 - sp1%), i% * 3.9 + 224, B
 LINE (xx% + 8 - i%, yy% + 8 - i%)-(xx% + 8 - sp2%, yy% + 8 + i%), i% * 3.9 + 224, B
 LINE (xx% + 8 + i%, yy% + 8 - i%)-(xx% + 8 + sp3%, yy% + 8 + i%), i% * 3.9 + 224, B
 LINE (xx% + 8 - i%, yy% + 8 + i%)-(xx% + 8 + i%, yy% + 8 + sp4%), i% * 3.9 + 224, B
 FOR w = 1 TO 2000: NEXT w
NEXT i%
SOUND 400, .1
SOUND 100, .1
SOUND 200, .1
SOUND 300, .1
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'Kijken of er nog een andere bom ontploft:

IF raak1% = 4 THEN
 s4%(nr% + 1) = 99
 xbom%(nr% + 1) = xbom%(nr%)
 ybom%(nr% + 1) = ybom%(nr%) - s1%(nr%) - 1
 CALL BomExplode(nr%, nrh%)
ELSEIF raak1% = 2 THEN
 nrh% = nrh% + 1
 xh%(nrh%) = xbom%: yh%(nrh%) = ybom% - s1%
ELSEIF raak1% = 3 THEN
 vakje(xbom%, ybom% - s1%) = 0
END IF

IF raak2% = 4 THEN
 s3%(nr% + 1) = 99
 xbom%(nr% + 1) = xbom%(nr%) - s2%(nr%) - 1
 ybom%(nr% + 1) = ybom%(nr%)
 CALL BomExplode(nr%, nrh%)
ELSEIF raak2% = 2 THEN
 nrh% = nrh% + 1
 xh%(nrh%) = xbom% - s2%: yh%(nrh%) = ybom%
ELSEIF raak2% = 3 THEN
 vakje(xbom% - s2%, ybom%) = 0
END IF

IF raak3% = 4 THEN
 s2%(nr% + 1) = 99
 xbom%(nr% + 1) = xbom%(nr%) + s3%(nr%) + 1
 ybom%(nr% + 1) = ybom%(nr%)
 CALL BomExplode(nr%, nrh%)
ELSEIF raak3% = 2 THEN
 nrh% = nrh% + 1
 xh%(nrh%) = xbom% + s3%: yh%(nrh%) = ybom%
ELSEIF raak3% = 3 THEN
 vakje(xbom% + s3%, ybom%) = 0
END IF

IF raak4% = 4 THEN
 s1%(nr% + 1) = 99
 xbom%(nr% + 1) = xbom%(nr%)
 ybom%(nr% + 1) = ybom%(nr%) + s4%(nr%) + 1
 CALL BomExplode(nr%, nrh%)
ELSEIF raak4% = 2 THEN
 nrh% = nrh% + 1
 xh%(nrh%) = xbom%: yh%(nrh%) = ybom% + s4%
ELSEIF raak4% = 3 THEN
 vakje(xbom%, ybom% + s4%) = 0
END IF

'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

'Stralen wissen:
FOR i% = 1 TO nr%
 xbom% = xbom%(i%): xx% = Zx%(xbom%)
 ybom% = ybom%(i%): yy% = Zy%(ybom%)
 s1% = s1%(i%) * 17 + 8
 s2% = s2%(i%) * 17 + 8
 s3% = s3%(i%) * 17 + 8
 s4% = s4%(i%) * 17 + 8
 FOR j% = 8 TO 0 STEP -1
  LINE (xx% + 8 - j%, yy% + 8 - j%)-(xx% + 8 - j%, yy% + 8 - s1%), 43
  LINE (xx% + 8 + j%, yy% + 8 - j%)-(xx% + 8 + j%, yy% + 8 - s1%), 43
  LINE (xx% + 8 - j%, yy% + 8 - j%)-(xx% + 8 - s2%, yy% + 8 - j%), 43
  LINE (xx% + 8 - j%, yy% + 8 + j%)-(xx% + 8 - s2%, yy% + 8 + j%), 43
  LINE (xx% + 8 + j%, yy% + 8 - j%)-(xx% + 8 + s3%, yy% + 8 - j%), 43
  LINE (xx% + 8 + j%, yy% + 8 + j%)-(xx% + 8 + s3%, yy% + 8 + j%), 43
  LINE (xx% + 8 - j%, yy% + 8 + j%)-(xx% + 8 - j%, yy% + 8 + s4%), 43
  LINE (xx% + 8 + j%, yy% + 8 + j%)-(xx% + 8 + j%, yy% + 8 + s4%), 43
  FOR w = 1 TO 1000: NEXT w
 NEXT j%
 FOR j% = 1 TO 2
  FOR K% = 1 TO Speler.Aantbommen(j%)
   IF xbom% = bom.x(j%, K%) AND ybom% = bom.y(j%, K%) THEN
    bom.aan(j%, K%) = 0
    bom.x(j%, K%) = 0
    bom.y(j%, K%) = 0
    bom.Tijd(j%, K%) = 0
   END IF
  NEXT K%
 NEXT j%
NEXT i%

EXIT SUB

Geraakt:
FOR j% = 50 TO 400 STEP 10
 SOUND j%, .05
NEXT j%
RETURN


END SUB

'
'  Een bom leggen op de plaats waar de speler staat, en alles instellen.
'  - Bom(pl%, 1) is altijd de oudste bom (die er het langste ligt), dan 2, etc.
'
'
SUB BomLeggen (pl%, Speler.Richting())
'pl% = speler die bom heeft gelegd (1 of 2)

'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'De bommen op volgorde van leeftijd zetten:
                                                                            
'FOR i% = 1 TO Speler.aantbommen(pl%)
' IF bom.aan(pl%, i%) = 1 THEN tellen% = tellen% + 1                         'Bepalen a) hoeveel bommen er aan staan (tellen%), en b) hoeveel bommen er leeg zijn v¢¢r de 1e volle (aantleeg%)
' IF bom.aan(pl%, i%) = 0 AND bom.aan(pl%, i% + 1) = 1 THEN aantleeg% = i%
'NEXT i%
'FOR i% = aantleeg% + 1 TO aantleeg% + tellen%                               'Als bv. de 1e 2 bommen leeg zijn en dan 3 vol, de waarden van bom3 naar bom1 zetten, van bom4 naar bom2, enz.
' bom.aan(pl%, i%) = 0: bom.aan(pl%, i% - aantleeg%) = 1
'NEXT i%
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'IF tellen% = Speler.aantbommen(pl%)THEN EXIT SUB                                 'als alle bommen vol zijn, dan uit de sub gaan.

FOR i% = 1 TO Speler.Aantbommen(pl%)
 IF vakje(x%(pl%), y%(pl%)) = pl% + 10 AND bom.aan(pl%, i%) = 0 THEN                                 'als de bom 'leeg' is, en er ligt nog geen bom op het vakje waar je nu staat (vakje(x,y) = 11/12, niet 11.5/12.5), dan...
  bom.aan(pl%, i%) = 1
  bom.x(pl%, i%) = x%(pl%)
  bom.y(pl%, i%) = y%(pl%)
  bom.Tijd(pl%, i%) = TIMER
  vakje(x%(pl%), y%(pl%)) = pl% + 10.5                                      'op vakje (x,y) een speler + bom zetten (11.5/12.5)
  GOTO TekenBom
 END IF
NEXT i%
EXIT SUB

TekenBom:
'De co”rdinaten van het huidige hokje (waar je staat) berekenen, en daar een bom tekenen.
DRAW "bm" + STR$(Zx%(x%(pl%))) + "," + STR$(Zy%(y%(pl%))) + "br7 bd14 c0 br5 bd 15r4 e1 l6 h1 r8 e1 l10 u1 r10 u1 l10 u1 r10 u1 l10 e1 r8 h1 l6 e1 r4 l4 d2 c5 d2g1l1u2 d2 c10 e2l1 c15g1 br5 bu2 c224 h1u1h1"

'CALL Tekenen(pl%, Speler.Richting()) 'als je het '-je weghaalt aan het begin van deze regel dan krijg je een tekening van het mannetje over de bom. Het probleem is dat je dan een verplaatsing krijgt in de richting waar in je het laatst bent verplaatst.

END SUB

SUB Bouwlevel (aantpuin%, bom%, straal%, leven%, munt%, staf%, kroon%)

'De puinblokken toekennen, en er items in stoppen:
DO
 xx% = INT(RND * 17) + 1                  'ÄÂÄÄ een willekeurig vakje kiezen
 yy% = INT(RND * 9) + 1                   'ÄÙ

 IF vakje(xx%, yy%) = 0 THEN              'Als het vakje leeg is, dan...
   IF bommen% < bom% THEN
     puin% = puin% + 1                       'een puinblok aanmaken en
     bommen% = bommen% + 1                   'er een extra bom in doen als
     vakje(xx%, yy%) = 2.1                   'het maximum nog niet bereikt is
   ELSEIF stralen% < straal% THEN
     puin% = puin% + 1                       'een puinblok aanmaken en
     stralen% = stralen% + 1                 'er een extra straal in doen als
     vakje(xx%, yy%) = 2.2                   'het maximum nog niet bereikt is
   ELSEIF levens% < leven% THEN
     puin% = puin% + 1                       'een puinblok aanmaken en
     levens% = levens% + 1                     'er een verbanddoos in doen als
     vakje(xx%, yy%) = 2.3                   'het maximum nog niet bereikt is
   ELSEIF munten% < munt% THEN
     puin% = puin% + 1                       'een puinblok aanmaken en
     munten% = munten% + 1                     'er een munt in doen als
     vakje(xx%, yy%) = 2.5                   'het maximum nog niet bereikt is
   ELSEIF staffen% < staf% THEN
     puin% = puin% + 1                       'een puinblok aanmaken en
     staffen% = staffen% + 1                   'er een staf in doen als
     vakje(xx%, yy%) = 2.6                   'het maximum nog niet bereikt is
   ELSEIF kronen% < kroon% THEN
     puin% = puin% + 1                       'een puinblok aanmaken en
     kronen% = kronen% + 1                     'er een kroon in doen als
     vakje(xx%, yy%) = 2.7                   'het maximum nog niet bereikt is
   ELSEIF puin% < aantpuin% THEN
     puin% = puin% + 1                       'er een puinblok van maken als
     vakje(xx%, yy%) = 2                       'het maximum nog niet bereikt is
   ELSE
    EXIT DO                                  'en anders uit de loop gaan, want
   END IF                                    'van alles in het maximum bereikt
 END IF
LOOP


END SUB

'
' Laten zien wie er gewonnen heeft.
'
'
SUB GameOver (pl%)

FOR i% = 11 TO 16: KEY(i%) STOP: NEXT i%
FOR i% = 21 TO 25: KEY(i%) STOP: NEXT i%

IF pl% = 1 THEN winner% = 2
IF pl% = 2 THEN winner% = 1
FOR i% = 0 TO 90
 LINE (0, i%)-(288, i%), i% / 2.9 + 224
 LINE (0, 180 - i%)-(288, 180 - i%), i% / 2.9 + 224
 FOR w = 1 TO 3000: NEXT
NEXT i%
                                                                                                                                                                                                   '                                       '
'game over:
DRAW  _
"bm50,75c223 d20r20u10l5d5l10u10r15u5l20br25 d20r5u5r10d5r5u20l20bf5d5r10u5l10br20bu5 d20r5u15r3d15r5u15r3d15r5u20l21br26 d20r20u5l15u3r10u5l10u2r15u5l20br34   d20r20u20l20bf5d10r10u10l10br18bu5 m+9,20r6m+9,-20l6m-6,11m-6,-11l5br27  d20r20u5l15u3r10u5l10u2r15u5l20br25 d20r5u5f5r7h5r7u15l19bf5d5r10u5l10" _


LOCATE 15, 13: COLOR 223: PRINT "PLAYER"; winner%; "WINS!"
PAINT (100, 104), 250, 223         'het zwart v/d achtergr. kl. wissen
PAINT (93, 99), 252, 223           'Ä¿
PAINT (110, 99), 252, 223          'ÄÅÄÄ enkele zwarte vakjes wissen (in de letters, de dichte stukjes van de "P", "A" & "R")
PAINT (134, 99), 252, 223          'ÄÙ
SLEEP

DIM melt%(3000)
t = TIMER
DO
 x% = INT(RND * 284) + 2
 y% = INT(RND * 172) + 1
 GET (x%, y%)-(x% + INT(RND * 2), y% + INT(RND * 6)), melt%
 PUT (x%, y% + 1), melt%, PSET
 IF TIMER - 5 > t THEN END
LOOP

END SUB

'
' Een item - of niks - neerzetten op de plek waar eerst een puinblok was.
'
'
SUB Item (xh%(), yh%(), ite%)

xitem% = xh%(ite%): xx% = Zx%(xitem%)      'ÄÄÂÄÄ schermco”rdinaten van het
yitem% = yh%(ite%): yy% = Zy%(yitem%)      'ÄÄÙ          puinblok berekenen.
'ps: wissen van het puinblok hoeft niet; de stralen die gewist worden zorgen daar al voor.

IF vakje(xitem%, yitem%) = 2 THEN vakje(xitem%, yitem%) = 0
IF vakje(xitem%, yitem%) = 0 THEN EXIT SUB

IF vakje(xitem%, yitem%) < 3 AND vakje(xitem%, yitem%) >= 2 THEN vakje(xitem%, yitem%) = vakje(xitem%, yitem%) + 1          'van 2.1 3.1 maken, van 2.2 3.2, etc.

IF vakje(xitem%, yitem%) = 3.1 THEN       'extra bom
  LINE (xx%, yy%)-STEP(16, 16), 0, BF
  LINE (xx% + 1, yy% + 1)-STEP(14, 14), 20, BF
  DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br13 bd23 c0 bd6 bl2 r4 e1 l6 h1 r8 e1 l10 u1 r10 u1 l10 u1 r10 u1 l10 e1 r8 h1 l6 e1 r4 l4 d2 c5 d2g1l1u2 d2 c10 e2l1 c15g1 br5 bu2 c224 h1u1h1  bd8br2 d2u1l1r2 br2 u1d2"
ELSEIF vakje(xitem%, yitem%) = 3.2 THEN   'extra straal
  LINE (xx%, yy%)-STEP(16, 16), 0, BF
  FOR i% = 0 TO 14
   LINE (xx% + 1, yy% + 1 + i%)-(xx% + 15 - i%, yy% + 15), 224 + i% * 2.2
   LINE (xx% + 1 + i%, yy% + 1)-(xx% + 15, yy% + 15 - i%), 224 + i% * 2
  NEXT i%
  DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br13 bd23 c0 bd4 br3 d2 u1 l1 r2 br2 d1 u2"
ELSEIF vakje(xitem%, yitem%) = 3.3 THEN   'leven erbij
  LINE (xx% + 3, yy% + 3)-STEP(10, 10), 0, BF
  LINE (xx% + 4, yy% + 4)-STEP(8, 8), 31, BF
  DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br17 bd24 c255 u2l1d2l1u4d6l1u6l1d6u2l1u2l1d2"
ELSEIF vakje(xitem%, yitem%) = 3.5 THEN   '10 punten (muntje)
  DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br15 bd18 c31l3g3d3 c15f1u4e1d6f1u8r1d7r1u7r1d7r1u8f1d6e1u4f1d1 c0d2g3l3bl1bu3u3g1br3d1f1r1e1u1h1l1"
ELSEIF vakje(xitem%, yitem%) = 3.6 THEN   '26 punten (staf)
  DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br13 bd18c224f6u1h5br5g10d1e10u1 c235l1g1l1bl3f2bf2f1bh3g7 c191br1be1e0be2e0be2e0be2e0be2e0bd4h0bh4h0"
ELSEIF vakje(xitem%, yitem%) = 3.7 THEN   '42 punten (kroon)
  DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br11 bd19c224r2d1r2u1r2f2d3l1g1e1h1u1h2l2g2d1g1l1u3e1br4d5bl3g1c235d1r8u1d1g1c240l6u1h2c230r1f1r6e1r1bg2c223l0bl2l0bl2l0bl2l0bu9br2r2h1d2bf4c255g2u2g1d1bl2u1h1d2h2"
END IF

END SUB

' ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
' Û Ü Ü Ü Ü Ü Ü Ü Ü Û    GROEN
' Û Ü Ü Ü Ü Ü Ü Ü Ü Û    ROTSEN
' Û Ü Ü Ü Ü Ü Ü Ü Ü Û
' Û Ü Ü Ü Ü Ü Ü Ü Ü Û
' ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
SUB level1
r = 0
g = 1
B = 0
FOR i = 0 TO 31
 PALETTE 32 + i, INT(r * i * 2) + INT(g * i * 2) * 256 + INT(B * i * 2 * 256 ^ 2)
NEXT i
PALETTE 64, 2763306

'Vaste blokken toewijzen:
FOR xx% = 1 TO 17
 FOR yy% = 1 TO 9
  IF xx% MOD 2 = 0 AND yy% MOD 2 = 0 THEN
   vakje(xx%, yy%) = 1                           'vast blok
  ELSE
   vakje(xx%, yy%) = 0                           'leeg (= looppad)
  END IF
 NEXT yy%
NEXT xx%

'Puinblokken toewijzen:
'Het aantal puinblokken instellen:              ' LET OP:
aantpuin% = 100                                 ' ER MOETEN MINSTENS
                                                ' ZOVEEL PUINBLOKKEN
'Het maximale aantal ... instellen:             ' ALS TOTAAL AANTAL ITEMS
bom% = 10                                       ' ZIJN (anders past
straal% = 10                                    ' het niet)
leven% = 3                                      '
munt% = 15                                      '
staf% = 5                                       '
kroon% = 2                                      '

puin$ = "c16 br3bd1d1f1d2f2r1h3r2u3d1r3d1f1h1u2r2f1d4r2d1u3r1g2l2d1l3u3d3f1r2d1g2d1e1be2e1d1r2d1bd3l1u1l1u1br1bd4d0bl2u2l4d2r2bl5l1u2l3r3u1r1bd2r2u4e1g1l3u2d2l2d1u1l1bu4r2l1u4h1"
         
CALL Bouwlevel(aantpuin%, bom%, straal%, leven%, munt%, staf%, kroon%)

END SUB

' ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
' Û  Ü Ü Ü Ü Ü Ü Ü  Û    GEEL
' Û Ü Ü Ü Ü Ü Ü Ü Ü Û    KISTEN
' Û  Ü Ü Ü Ü Ü Ü Ü  Û
' Û Ü Ü Ü Ü Ü Ü Ü Ü Û
' ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
SUB level2
r% = 1
g% = 1
B% = 0
FOR i% = 0 TO 31
 PALETTE 32 + i%, r% * i% * 2 + g% * i% * 2 * 256 + B% * i% * 2 * 256 ^ 2
NEXT i%
PALETTE 64, 20 * 256 + 35
PALETTE 65, 14 * 256 + 30
PALETTE 66, 24 * 256 + 40

'Vaste blokken toewijzen:
FOR xx% = 1 TO 17
 FOR yy% = 1 TO 9
  IF yy% MOD 2 = 0 THEN
   IF yy% MOD 4 = 0 AND xx% MOD 2 = 0 OR yy% MOD 4 = 2 AND xx% MOD 2 = 1 THEN
    vakje(xx%, yy%) = 1                           'vast blok
   ELSE
    vakje(xx%, yy%) = 0                           'leeg (= looppad)
   END IF
  END IF
 NEXT yy%
NEXT xx%

'Puinblokken toewijzen:
'Het aantal puinblokken instellen:              ' LET OP:
aantpuin% = 60                                  ' ER MOETEN MINSTENS
                                                ' ZOVEEL PUINBLOKKEN
'Het maximale aantal ... instellen:             ' ALS TOTAAL AANTAL ITEMS
bom% = 8                                        ' ZIJN (anders past
straal% = 8                                     ' het niet)
leven% = 2                                      '
munt% = 10                                      '
staf% = 5                                       '
kroon% = 1                                      '

puin$ = "c66br2bd1d14br4 c65u14br4 c66d14br4 c65u14bf1 c66l0bl6l2bl6l0bd4 c65r0br6r2br6r0bd4 c66l0bl6l2bl6l0bd4 c65r0br6r2br6r0bl3 c0bu2u0bu8u0bl8u0bd8u0"
CALL Bouwlevel(aantpuin%, bom%, straal%, leven%, munt%, staf%, kroon%)
END SUB

' ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
' Û   Û       Û     Û    CYAAN
' Û Ûßß  ßßß  Û Ü   Û    STAALPLATEN
' Û ß Ü Ûß   ßß   Û Û
' Û     Û  ßßß  Ûßß Û
' ÛÜÜÜÜÜÛÜÜÜÜÜÜÜÛÜÜÜÛ
SUB level3
r% = 0
g% = 1
B% = 1
FOR i% = 0 TO 31
 PALETTE 32 + i%, r% * i% * 2 + g% * i% * 2 * 256 + B% * i% * 2 * 256 ^ 2
NEXT i%
PALETTE 64, 45 * 256 + 55 * 256 ^ 2 + 30
PALETTE 65, 30 * 256 + 40 * 256 ^ 2 + 20
PALETTE 66, 60 * 256 + 60 * 256 ^ 2 + 40

'Vaste blokken toewijzen:
FOR xx% = 1 TO 17
 FOR yy% = 1 TO 9
  vakje(xx%, yy%) = 0                           'leeg (= looppad)
 NEXT yy%
NEXT xx%
vakje(4, 1) = 1: vakje(4, 2) = 1: vakje(4, 3) = 1: vakje(3, 3) = 1
vakje(2, 3) = 1: vakje(2, 4) = 1: vakje(2, 5) = 1: vakje(4, 6) = 1
vakje(7, 5) = 1: vakje(6, 5) = 1: vakje(6, 6) = 1: vakje(6, 7) = 1
vakje(6, 8) = 1: vakje(6, 9) = 1: vakje(7, 3) = 1: vakje(8, 3) = 1
vakje(9, 3) = 1: vakje(9, 7) = 1: vakje(10, 7) = 1: vakje(11, 7) = 1
vakje(11, 5) = 1: vakje(12, 5) = 1: vakje(12, 4) = 1: vakje(12, 3) = 1
vakje(12, 2) = 1: vakje(12, 1) = 1: vakje(14, 4) = 1: vakje(14, 9) = 1
vakje(14, 8) = 1: vakje(14, 7) = 1: vakje(15, 7) = 1: vakje(16, 7) = 1
vakje(16, 6) = 1: vakje(16, 5) = 1

'Puinblokken toewijzen:
'Het aantal puinblokken instellen:              ' LET OP:
aantpuin% = 60                                  ' ER MOETEN MINSTENS
                                                ' ZOVEEL PUINBLOKKEN
'Het maximale aantal ... instellen:             ' ALS TOTAAL AANTAL ITEMS
bom% = 8                                        ' ZIJN (anders past
straal% = 8                                     ' het niet)
leven% = 2                                      '
munt% = 10                                      '
staf% = 5                                       '
kroon% = 1                                      '

puin$ = "c65bf1 f2bd6h2bd6f2br6h2bu6f2bu6h2br6f2bd6h2bd6f2bh3bl2 c66e2bu6g2bl6e2bd6g2"
CALL Bouwlevel(aantpuin%, bom%, straal%, leven%, munt%, staf%, kroon%)
END SUB

' ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
' Û     Û  Ü        Û    BLAUW
' Û     ÜÜÛÛÛÜÜ  ßßßÛ    MUURTJES
' Û  ßßßÛÛÛÜÛÛÛßßß  Û
' Ûßßß    ßÛß Ü     Û
' ÛÜÜÜÜÜÜÜÜÜÜÜÛÜÜÜÜÜÛ
SUB level4
r = .5
g = 0
B = 1
FOR i% = 0 TO 31
 PALETTE 32 + i%, r * i% * 2 + g * i% * 2 * 256 + B * i% * 2 * 256 ^ 2
NEXT i%
PALETTE 64, 40 * 256 + 40 + 40 * 256 ^ 2
PALETTE 65, 30 * 256 + 30 + 20 * 256 ^ 2
PALETTE 66, 20 * 256 + 20 + 20 * 256 ^ 2

'Vaste blokken toewijzen:
FOR xx% = 1 TO 17
 FOR yy% = 1 TO 9
  vakje(xx%, yy%) = 0                           'leeg (= looppad)
 NEXT yy%
NEXT xx%
FOR xx% = 6 TO 12: FOR yy% = 4 TO 6: vakje(xx%, yy%) = 1: NEXT yy%: NEXT xx%
FOR xx% = 8 TO 10: FOR yy% = 3 TO 7: vakje(xx%, yy%) = 1: NEXT yy%: NEXT xx%
FOR xx% = 3 TO 15: vakje(xx%, 5) = 1: NEXT xx%
FOR yy% = 2 TO 8: vakje(9, yy%) = 1: NEXT yy%: vakje(9, 5) = 0   'middelste vakje leeg
FOR xx% = 1 TO 3: vakje(xx%, 7) = 1: NEXT xx%
FOR xx% = 15 TO 17: vakje(xx%, 3) = 1: NEXT xx%
FOR yy% = 1 TO 2: vakje(6, yy%) = 1: NEXT yy%
FOR yy% = 8 TO 9: vakje(12, yy%) = 1: NEXT yy%

'Puinblokken toewijzen:
'Het aantal puinblokken instellen:              ' LET OP:
aantpuin% = 99                                  ' ER MOETEN MINSTENS
                                                ' ZOVEEL PUINBLOKKEN
'Het maximale aantal ... instellen:             ' ALS TOTAAL AANTAL ITEMS
bom% = 8                                        ' ZIJN (anders past
straal% = 8                                     ' het niet)
leven% = 2                                      '
munt% = 10                                      '
staf% = 5                                       '
kroon% = 1                                      '

puin$ = "c66 bf1 bd3r3u3d3r8u3d3r3bd4l7u4d4l7bd4r3u3d3r8u3d3r3l7d3u3"
CALL Bouwlevel(aantpuin%, bom%, straal%, leven%, munt%, staf%, kroon%)

END SUB

' ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
' Û ÜÛÜ Ü Û ÜÜ  ß Ü Û
' Û Ü Û Ü ÜÜ Ûßßß Ü Û     MINTGROEN
' Û ÛÜÜÜÛÜÛÜÜÛ ß  ÛÜÛ     KISTEN
' Û Ü ÜÜ  ÛÜÜÜÜ ÛÜ  Û
' ÛÜÛÜÜÛÜÜÜÜÜÜÜÜÜÛÜÜÛ
SUB level5
r = .5
g = 1
B = .5
FOR i% = 0 TO 31
 PALETTE 32 + i%, INT(r * i% * 2) + INT(g * i% * 2) * 256 + CINT(B * i% * 2) * 256 ^ 2
NEXT i%
PALETTE 64, 20 * 256 + 35
PALETTE 65, 14 * 256 + 30
PALETTE 66, 24 * 256 + 40

'Vaste blokken toewijzen:
FOR xx% = 1 TO 17: FOR yy% = 1 TO 9: vakje(xx%, yy%) = 0: NEXT yy%: NEXT xx%
vakje(2, 2) = 1: vakje(2, 4) = 1: vakje(2, 5) = 1: vakje(2, 6) = 1: vakje(2, 8) = 1: vakje(2, 9) = 1: vakje(3, 1) = 1: vakje(3, 2) = 1: vakje(3, 6) = 1: vakje(4, 2) = 1: vakje(4, 3) = 1: vakje(4, 4) = 1: vakje(4, 6) = 1: vakje(4, 8) = 1: vakje(5, 6) _
 = 1: vakje(5, 8) = 1
vakje(5, 9) = 1: vakje(6, 2) = 1: vakje(6, 4) = 1: vakje(6, 5) = 1: vakje(6, 6) = 1: vakje(7, 6) = 1: vakje(8, 1) = 1: vakje(8, 2) = 1: vakje(8, 4) = 1: vakje(8, 5) = 1: vakje(8, 6) = 1: vakje(8, 7) = 1: vakje(8, 8) = 1: vakje(9, 4) = 1: vakje(9, 6) _
 = 1: vakje(9, 8) = 1
vakje(10, 2) = 1: vakje(10, 6) = 1: vakje(10, 8) = 1: vakje(11, 2) = 1: vakje(11, 3) = 1: vakje(11, 4) = 1: vakje(11, 5) = 1: vakje(11, 6) = 1: vakje(11, 8) = 1: vakje(12, 3) = 1: vakje(12, 8) = 1: vakje(13, 3) = 1: vakje(13, 5) = 1: vakje(14, 1) =  _
1: vakje(14, 3) = 1
vakje(14, 7) = 1: vakje(14, 8) = 1: vakje(15, 8) = 1: vakje(15, 9) = 1: vakje(16, 2) = 1: vakje(16, 4) = 1: vakje(16, 5) = 1: vakje(16, 6) = 1: vakje(17, 6) = 1


'Puinblokken toewijzen:
'Het aantal puinblokken instellen:              ' LET OP:
aantpuin% = 80                                  ' ER MOETEN MINSTENS
                                                ' ZOVEEL PUINBLOKKEN
'Het maximale aantal ... instellen:             ' ALS TOTAAL AANTAL ITEMS
bom% = 8                                        ' ZIJN (anders past
straal% = 8                                     ' het niet)
leven% = 2                                      '
munt% = 10                                      '
staf% = 10                                      '
kroon% = 4                                      '

puin$ = "c66br2bd1d14br4 c65u14br4 c66d14br4 c65u14bf1 c66l0bl6l2bl6l0bd4 c65r0br6r2br6r0bd4 c66l0bl6l2bl6l0bd4 c65r0br6r2br6r0bl3 c0bu2u0bu8u0bl8u0bd8u0"
CALL Bouwlevel(aantpuin%, bom%, straal%, leven%, munt%, staf%, kroon%)

END SUB

'
' De speler die in de vuurstraal stond damage geven / de speler
' die een verbanddoosje heeft gepakt leven bijgeven.
'
SUB LevenChange (pl%, change%)

IF pl% = 1 THEN
 LINE (leven%(1), 0)-(leven%(1), 5), leven%(1) / 3.3 + 192, BF
ELSEIF pl% = 2 THEN
 LINE (leven%(2) + 145, 0)-(leven%(2) + 145, 5), leven%(2) / 3.3 + 192, BF
END IF

leven%(pl%) = leven%(pl%) + change%
IF leven%(pl%) > 100 THEN leven%(pl%) = 100
IF leven%(pl%) < 0 THEN leven%(pl%) = 0

IF pl% = 1 THEN
 LINE (leven%(1), 0)-(leven%(1), 5), 0, BF
ELSEIF pl% = 2 THEN
 LINE (leven%(2) + 145, 0)-(leven%(2) + 145, 5), 0, BF
END IF

IF leven%(pl%) = 0 THEN CALL GameOver(pl%)

END SUB

'
' - Berekenen van nieuwe positie speler 1 / 2
' - Tekenen van de speler op die plek
' - Eventueel tekenen van bom op oude plek
'
'
SUB Tekenen (pl%, Speler.Richting())
'pl% = speler die is bewogen (1 of 2)

Oudex% = x%(pl%)    ' ÄÂÄÄ De oude x en y bewaren voor het geval de
Oudey% = y%(pl%)    ' ÄÙ   verplaatsing ongeldig blijkt.

LINE (Zx%(Oudex%), Zy%(Oudey%))-STEP(16, 16), 43, BF                        'oude vakje leegmaken

'Kijken wat er op het oude vakje stond: [speler] of [speler + bom].
IF 2 * vakje(Oudex%, Oudey%) MOD 2 = 0 THEN             'Als het oude vakje waarde 11 of 12 had (de waarde is altijd 11, 12, 11.5 of 12.5),
 vakje(Oudex%, Oudey%) = 0                              'dan wordt het vakje nu leeg,
ELSE                                                    'en anders (waarde was 11.5 of 12.5 - er lag dus ook nog een bom),
 vakje(Oudex%, Oudey%) = 4                              'komt er nu een bom te liggen.
 DRAW "bm" + STR$(Zx%(Oudex%)) + "," + STR$(Zy%(Oudey%)) + "br7 bd14 c0 br5 bd 15r4 e1 l6 h1 r8 e1 l10 u1 r10 u1 l10 u1 r10 u1 l10 e1 r8 h1 l6 e1 r4 l4 d2 c5 d2g1l1u2 d2 c10 e2l1 c15g1 br5 bu2 c224 h1u1h1"
END IF

IF Speler.Richting(pl%) = 1 THEN                 'omhoog bewegen
 y%(pl%) = y%(pl%) - 1
ELSEIF Speler.Richting(pl%) = 2 THEN             'naar links bewegen
 x%(pl%) = x%(pl%) - 1
ELSEIF Speler.Richting(pl%) = 3 THEN             'naar rechts bewegen
 x%(pl%) = x%(pl%) + 1
ELSEIF Speler.Richting(pl%) = 4 THEN             'omlaag bewegen
 y%(pl%) = y%(pl%) + 1
END IF

'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

'Eventueel herstellen:
IF x%(pl%) < 1 OR x%(pl%) > 17 OR y%(pl%) < 1 OR y%(pl%) > 9 THEN Herstel% = 1: GOTO Herstel
IF vakje(x%(pl%), y%(pl%)) >= 3 AND vakje(x%(pl%), y%(pl%)) < 4 THEN Herstel% = 0: GOSUB items: GOTO Herstel
IF vakje(x%(pl%), y%(pl%)) <> 0 THEN Herstel% = 1: GOTO Herstel

Herstel:
IF Herstel% = 1 THEN
 x%(pl%) = Oudex%
 y%(pl%) = Oudey%
 IF vakje(Oudex%, Oudey%) = 4 THEN vakje(Oudex%, Oudey%) = 10.5 + pl%
 IF vakje(Oudex%, Oudey%) = 0 THEN vakje(Oudex%, Oudey%) = 10 + pl%
ELSE
 vakje(x%(pl%), y%(pl%)) = 10 + pl%
END IF

'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'De mannetjes tekenen:
xx% = x%(pl%): xx% = Zx%(xx%)             'ÄÂÄÄ De co”rdinaten van het vakje
yy% = y%(pl%): yy% = Zy%(yy%)             'ÄÙ   omzetten in schermco”rdinaten.
vakje(x%(pl%), y%(pl%)) = pl% + 10        '11 (speler 1) of 12 (speler 2) in vakje zetten.
DIM kl%(10)
FOR i% = 0 TO 9: kl%(i%) = pl% * 10 + i% + 60: NEXT i%

IF Speler.Richting(pl%) = 1 THEN
 DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br11bd16 c" + STR$(kl%(8)) + "r6f2d4g2l6h2u4e2r5f3d2g3l4h3u2e2r1 c" + STR$(kl%(6)) + "r4f2d2g2l4h2u2e1r1 c" + STR$(kl%(3)) + "r4f1d2g1l4h1u2r1 c" + STR$(kl%(0)) +  _
"r4d1l4d1r4  bd4bl1l2g2d1u1e1r4f1bl2l2d3l1br3u2l1"
ELSEIF Speler.Richting(pl%) = 2 THEN
 LINE (xx% + 5, yy% + 4)-STEP(7, 4), 26, BF                 'huidskleur!!! '                                       '                                                                   '    '
 DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br18bd16 c" + STR$(kl%(0)) + "l6g1r8f1l10d4f2r6h1r2e1u3l2f1d2r1u2 c0bl5l2bd2r2bh1 c25u1 c15d0 c" + STR$(pl% * 10 + 60) + "bd5r2f2d1u1h1l5h1f1r2d4l1br3r1u1h1u1l1d1r1d1 c" + STR$(pl% * 10 + 63) + "d0bl3d0"
ELSEIF Speler.Richting(pl%) = 3 THEN
 LINE (xx% + 5, yy% + 4)-STEP(7, 4), 26, BF                 'huidskleur!!! '                                       '                                                                   '    '
 DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br11bd16 c" + STR$(kl%(0)) + "r6f1l8g1r10d4g2l6e1l2h1u3r2g1d2l1u2 c0br5r2bd2l2be1 c25u1 c15d0 c" + STR$(pl% * 10 + 60) + "bd5l2g2d1u1e1r5e1g1l2d4r1bl3l1u1e1u1r1d1l1d1 c" + STR$(pl% * 10 + 63) + "d0br3d0"
ELSEIF Speler.Richting(pl%) = 4 THEN
 LINE (xx% + 5, yy% + 4)-STEP(6, 4), 26, BF  'huidskleur!!!
 DRAW "bm" + STR$(xx%) + "," + STR$(yy%) + "br11bd16 c" + STR$(kl%(0)) + "r6f1l8g1r10d4g2l6h2u3r1d3f1br6e1u3d1bl3 c0l2bd2r2bh1 c25u1 c15d0 c" + STR$(pl% * 10 + 60) + "bd5l1r2f2d1u1h1l4g1br2r2d3r1bl3u2r2e2 c" + STR$(pl% * 10 + 63) +  _
"g1bd2d0bd1bl4u0bu4bl1l0"
END IF

EXIT SUB


items:
IF vakje(x%(pl%), y%(pl%)) = 3.1 THEN
 Speler.Aantbommen(pl%) = Speler.Aantbommen(pl%) + 1
 LOCATE 4, pl% * 18 - 14: COLOR 31: PRINT USING "##"; Speler.Aantbommen(pl%)
 Speler.Punten(pl%) = Speler.Punten(pl%) + 5
ELSEIF vakje(x%(pl%), y%(pl%)) = 3.2 THEN
 Speler.Aantstraal(pl%) = Speler.Aantstraal(pl%) + 1
 LOCATE 5, pl% * 18 - 14: COLOR 31: PRINT USING "##"; Speler.Aantstraal(pl%)
 Speler.Punten(pl%) = Speler.Punten(pl%) + 5
ELSEIF vakje(x%(pl%), y%(pl%)) = 3.3 THEN
 change% = 25: CALL LevenChange(pl%, change%)
 FOR i% = 0 TO 200 STEP 10: SOUND 800 + i%, .05: NEXT i%
 Speler.Punten(pl%) = Speler.Punten(pl%) + 15
ELSEIF vakje(x%(pl%), y%(pl%)) = 3.5 THEN
 Speler.Punten(pl%) = Speler.Punten(pl%) + 10
ELSEIF vakje(x%(pl%), y%(pl%)) = 3.6 THEN
 Speler.Punten(pl%) = Speler.Punten(pl%) + 26
ELSEIF vakje(x%(pl%), y%(pl%)) = 3.7 THEN
 Speler.Punten(pl%) = Speler.Punten(pl%) + 42
END IF

LOCATE 4, pl% * 18 - 4: COLOR 31: PRINT USING "#####"; Speler.Punten(pl%)
LINE (Zx%(x%(pl%)), Zy%(y%(pl%)))-STEP(16, 16), 43, BF
vakje(x%(pl%), y%(pl%)) = 0
FOR i% = 0 TO 100 STEP 10: SOUND 700 - i%, .05: NEXT i%
RETURN

END SUB

'
' Het tekenen van het level:
' - vaste blokken
' - puinblokken
'
'
SUB TekenLevel

'De 3 blokjes linksboven en de 3 blokjes rechtsonder leegmaken:
vakje(1, 1) = 0
vakje(1, 2) = 0
vakje(2, 1) = 0
vakje(17, 9) = 0
vakje(17, 8) = 0
vakje(16, 9) = 0

'Alles inkleuren met de achtergrondkleur:
PAINT (100, 100), 43, 31

'De vaste blokken en puinblokken tekenen:
FOR xx% = 1 TO 17
 FOR yy% = 1 TO 9
  IF vakje(xx%, yy%) = 1 THEN
   FOR i% = 0 TO 8
    LINE (Zx%(xx%) + i%, Zy%(yy%) + i%)-(Zx%(xx%) + 16 - i%, Zy%(yy%) + 16 - i%), 36 + i% * 3.4, B
   NEXT i%
  ELSEIF vakje(xx%, yy%) >= 2 AND vakje(xx%, yy%) < 3 THEN
   LINE (Zx%(xx%), Zy%(yy%))-(Zx%(xx%) + 16, Zy%(yy%) + 16), 64, BF
   LINE (Zx%(xx%), Zy%(yy%))-(Zx%(xx%) + 16, Zy%(yy%) + 16), 0, B
   DRAW "bm" + STR$(Zx%(xx%)) + "," + STR$(Zy%(yy%)) + "br6 bd15 " + "X" + VARPTR$(puin$)
  END IF
 NEXT yy%
NEXT xx%

FOR pl% = 1 TO 2
 LOCATE 4, pl% * 18 - 14: COLOR 31: PRINT USING "##"; Speler.Aantbommen(pl%)
 LOCATE 5, pl% * 18 - 14: COLOR 31: PRINT USING "##"; Speler.Aantstraal(pl%)
 LOCATE 4, pl% * 18 - 4: COLOR 31: PRINT USING "#####"; Speler.Punten(pl%)
 LOCATE 5, pl% * 18 - 1: COLOR 31: PRINT USING "##"; Speler.Gewonnen(pl%)
NEXT pl%

END SUB

'
' Zet x-[hokjes]co”rdinaat (x%) om in x-[scherm]co”rinaat
' van de linkerboven-hoek van een hokje.
'
FUNCTION Zx% (i%)

Zx% = i% * 17 - 17

END FUNCTION

'
' Zet y-[hokjes]co”rdinaat (y%) om in y-[scherm]co”rinaat
' van de linkerboven-hoek van een hokje.
'
FUNCTION Zy% (i%)

Zy% = i% * 17 + 10

END FUNCTION
