www.jupiter-ace.co.uk

Previous Page > Listings Index > BREAKOUT.



OPEN FORUM
BREAKOUT
on Ace
This program is a version of the standard breakout game. The player must keep bouncing the ball back to the top of the screen in order to demolish the wall. He has 5 balls to do this, one being lost every time he misses. The player controls the movement of his bat by pressing A to move it to the left and L to move it to the right. The game will just fit into the standard 3K ACE.

Program notes
DRAW  
Initialises the screen and draws the walls.
MOVE   Increases or decreases the number on top of the stack, depending on the key pressed.
YOUMOVE Moves and redraws your bat.
CHECK Checks if the ball has gone off the bottom of the screen (its position is greater than 9913), if so it decreases the number of balls and continues if there are any left.
BALLDRAW Checks if the ball has hit a brick (increasing your score if so) and draws the ball.
BALLMOVE Checks if the ball has hit anything and adjusts its direction, then moves it.
B Plays the game (I kept the name short to save typing as this is the word you must type to run the program).
SPEED Sets the speed of the game by adjust- ing the variable S. Typing a number then SPEED sets the speed, 0 being the fastest, 1000 being slow.

   For those interested, here is a list of the items on the stack during the game:
  (TOS), the position of the ball on the screen, the X displacement at each move, the Y displacement at each move, the score, your position on line 21 of the screen.
  Anything that appears in brackets inside quotes should be taken as it reads, eg Graphic 4 is the graphic symbol on the 4 key, obtained by pressing Shift and 9 then Symbol Shift and 4. It is important to get the print statement for the score and amount of balls correct, as the number of balls left is fetched (4) for checking.
: YOUMOVE
 INKEY
 IF
  5 ROLL DUP 21 SWAP 
  AT 2 SPACES MOVE DUP 
  21 SWAP AT ." (GRAPHIC 
  3 GRAPHIC 3)"
  5 ROLL 5 ROLL 5 
  ROLL 5 ROLL 
 ELSE
  50 0 
  DO 
  LOOP 
 THEN 
;

: CHECK
 DUP 9913 >
 IF
  32 SWAP C! 9246 C@ 
  DUP ASCII 0 =
  IF 
   ABORT 
  ELSE
   1- 9246 C! 9505 15403 
   C@ 1 AND +
  THEN 
 THEN
;

: BALLDRAW 
 DUP C@ 160 = 
 IF
  ROT NEGATE ROT ROT 4 
  ROLL 1+ 0 8 AT
  DUP . 4 ROLL 4 
  ROLL 4 ROLL 
 THEN
 79 OVER C! 
;
400 VARIABLE S 

: DRAW
 CLS 0 1 AT ." Score: 0 
     Balls: 5"
 4 0 AT 32 5 * 0 
 DO
 ." (INVERSE SPACE)" 
 LOOP
 1 0 AT ." (GRAPHIC 4)" 
 30 0
 DO
 ." (INVERSE GRAPHIC 3)" 
 LOOP
 ." (INVERSE GRAPHIC 7)" 
 23 2
 DO
 I 0 AT . " (GRAPHIC 5)"
  I 31 AT 
  ." (INVERSE GRAPHIC 5)" 
 LOOP
;

: MOVE
 INKEY DUP 97 = SWAP 
 108 = OVER OR
 IF 
  IF 
   1-
  ELSE
   1+ 
  THEN 
 ELSE 
  DROP 
 THEN
 1 MAX 29 MIN
;

: BALLMOVE
 32 OVER C! OVER OVER 
 + C@ DUP 32 =
 SWAP 160 = OR 0= 
 IF
  SWAP NEGATE SWAP 
 THEN
 DUP 4 PICK + C@ 
 DUP 32 = SWAP 160 
 = OR 0=
 IF
  ROT NEGATE ROT ROT 
 THEN
 OVER OVER + 4 PICK. 
 + C@ DUP 32 = 
 SWAP 160 = OR 0= 
 IF
  ROT NEGATE ROT NEGATE ROT 
 THEN
 OVER 4 PICK + + 
 BALLDRAW
;

: B
 8 0 32 1
 9505 DRAW 21 8 AT
 ." (GRAPHIC 3 GRAPHIC 3)" 
 BEGIN
  YOUMOVE BALLMOVE 
  YOUMOVE CHECK S 
  @ 0
  DO 
  LOOP 
  0
 UNTIL
;

: SPEED
 S !
; 
Breakout
by Colin Dooley