Metropoli BBS
VIEWER: arkanoid.bas MODE: TEXT (ASCII)
' *********** CHECK README.1ST FIRST *********************

DECLARE SUB Pictures ()
DECLARE SUB SetPalette ()
DECLARE SUB ClearPalette ()
DECLARE SUB GameScreen ()
DECLARE SUB Moving ()
COMMON SHARED x, y, a, px, bx, by, bxs, bys, xx, yy, xs, ys

DIM SHARED Paddle(32), Ball(7), WhiteBlock(50), PLACE(-10 TO 50, -10 TO 50)
SCREEN 13

PLAY "mf"

ClearPalette
Pictures
SetPalette
GameScreen

FOR y = 2 TO 10
 FOR x = 0 TO 9
  PLACE(x, y) = 1
  PUT (x * 20 + 2, y * 10 + 2), WhiteBlock
 NEXT
NEXT

px = 88
bx = 20 * 5 + 2: bxs = 0
by = 10 * 12 + 2: bys = 1
xx = 5: yy = 12
xs = 0: ys = 0

PUT (px, 190), Paddle
PUT (bx, by), Ball

DO
  Moving
LOOP UNTIL a = 1

DATA 00,08,44,40,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,44,40,08,00 , 00,11,09,08,00
DATA 08,13,48,44,13,13,13,13,12,12,12,11,11,10,10,10,10,10,09,09,09,48,44,09,08 , 11,13,10,09,07
DATA 08,13,44,40,13,13,12,12,11,11,11,10,10,10,10,09,09,09,09,09,08,44,40,08,08 , 10,11,09,08,06
DATA 08,13,40,38,13,12,11,11,10,10,10,09,09,09,08,08,08,08,07,07,07,40,38,07,08 , 08,08,08,06,05
DATA 00,08,40,38,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,40,38,08,00 , 00,07,07,05,00

DATA 00,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,00
DATA 09,13,14,16,14,14,14,14,14,14,14,13,13,13,13,13,13,13,12,06
DATA 09,14,16,14,14,14,14,13,13,13,13,12,12,12,12,11,11,11,11,06
DATA 09,14,16,14,14,13,13,13,12,12,12,11,11,11,11,11,11,11,11,06                                          
DATA 09,14,14,14,13,13,12,12,11,11,11,11,10,10,10,10,10,11,11,06
DATA 09,13,14,13,13,12,12,11,11,11,10,10,10,10,10,10,10,10,11,06
DATA 09,13,14,13,12,12,11,11,10,10,10,10,10,11,11,11,11,10,11,06
DATA 09,13,13,12,12,11,11,10,10,10,10,11,11,12,12,12,11,10,10,06
DATA 09,12,13,12,12,11,11,10,10,10,11,12,12,12,13,12,11,11,10,06                                            
DATA 00,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,00

SUB ClearPalette

  FOR i = 1 TO 255
   OUT (&H3C8), i
   OUT (&H3C9), 0
   OUT (&H3C9), 0
   OUT (&H3C9), 0
  NEXT

END SUB

SUB GameScreen

  FOR i = 1 TO 202
   PSET (i, 1), i / 32
  NEXT i
  FOR i = 1 TO 199
   PSET (202, i), i / 32 + 6.25
  NEXT i
  FOR i = 1 TO 202
   PSET (i, 199), i / 32 + 6.25
  NEXT i
  FOR i = 1 TO 199
   PSET (1, i), i / 32
  NEXT i
 
END SUB

SUB Moving

'-----------------------BALL--------------------------------------------------
  PUT (bx, by), Ball
  PUT (px, 190), Paddle
 
  bx = bx + bxs
  by = by + bys
  xs = xs + bxs
  ys = ys + bys
 
  IF (bx > 197) OR (bx < 2) THEN bxs = 0 - bxs
  IF by < 2 THEN bys = 0 - bys
  IF by > 193 THEN END
 
  IF xs > 19 THEN xx = xx + 1: xs = 0
  IF xs < 0 THEN xx = xx - 1: xs = 19
  IF ys > 9 THEN yy = yy + 1: ys = 0
  IF ys < 0 THEN yy = yy - 1: ys = 9

  IF (PLACE(xx, yy - 1) = 1) AND (ys < 1) THEN
    PLACE(xx, yy - 1) = 0
    bys = 0 - bys
    PUT (xx * 20 + 2, (yy - 1) * 10 + 2), WhiteBlock
  END IF
  IF (PLACE(xx, yy + 1) = 1) AND (ys > 4) THEN
    PLACE(xx, yy + 1) = 0
    bys = 0 - bys
    PUT (xx * 20 + 2, (yy + 1) * 10 + 2), WhiteBlock
  END IF
  IF (PLACE(xx + 1, yy) = 1) AND (xs > 14) THEN
    PLACE(xx + 1, yy) = 0
    bxs = 0 - bxs
    PUT ((xx + 1) * 20 + 2, yy * 10 + 2), WhiteBlock
  END IF
  IF (PLACE(xx - 1, yy) = 1) AND (xs < 1) THEN
    PLACE(xx - 1, yy) = 0
    bxs = 0 - bxs
    PUT ((xx - 1) * 20 + 2, yy * 10 + 2), WhiteBlock
  END IF

'---------------PADDLE & BALL-------------------------------------------------
  
   IF bx + 5 > px AND bx < px + 25 AND by > 184 AND by < 186 THEN
     IF bx + 2.5 > px + 12.5 THEN
       bxs = (bx - (px + 12.5)) / 5
     END IF
     IF bx + 2.5 < px + 12.5 THEN
       bxs = (bx - (px + 12.5)) / 5
     END IF
     bys = -bys
   END IF
 
'-----------------------PADDLE------------------------------------------------
  z$ = INKEY$
  a = INP(&H60)
 
  IF a = 75 THEN px = px - 2: IF px < 2 THEN px = 2
  IF a = 77 THEN px = px + 2: IF px > 175 THEN px = 175
 
  PUT (bx, by), Ball
  PUT (px, 190), Paddle
 
  PALETTE 0, 0
  
END SUB

SUB Pictures

  FOR y = 1 TO 5          'This draws ball & paddle
   FOR x = 1 TO 30
    READ a
    PSET (x, y), a
   NEXT
  NEXT
 
  FOR y = 6 TO 15         'This draws white block
   FOR x = 1 TO 20
    READ a
    PSET (x, y), a
   NEXT
  NEXT

  GET (1, 1)-(25, 5), Paddle     'Let's get pictures!
  GET (26, 1)-(30, 5), Ball
  GET (1, 6)-(20, 15), WhiteBlock

  CLS

END SUB

SUB SetPalette

 FOR i = 1 TO 16           'White : 1
  OUT (&H3C8), i
  OUT (&H3C9), i * 4 - 1
  OUT (&H3C9), i * 4 - 1
  OUT (&H3C9), i * 4 - 1
 NEXT
 FOR i = 1 TO 16           'Red : 16
  OUT (&H3C8), i + 16
  OUT (&H3C9), i * 4 - 1
  OUT (&H3C9), i
  OUT (&H3C9), 0
 NEXT
 FOR i = 1 TO 16           'Yellow : 32
  OUT (&H3C8), i + 32
  OUT (&H3C9), i * 4 - 1
  OUT (&H3C9), i * 4 - 1
  OUT (&H3C9), 0
 NEXT
 FOR i = 1 TO 16           'blue : 48
  OUT (&H3C8), i + 48
  OUT (&H3C9), i * 4 - 1
  OUT (&H3C9), i * 4 - 1
  OUT (&H3C9), 0
 NEXT

END SUB

[ RETURN TO DIRECTORY ]