Bouncer in BASIC

Bouncer is a little type-in game I wrote for Compute’s Gazette magazine. You can find the code below.

0 REM == BOUNCER BY JASON OAKLEY / SUITE16.AU ==
10 X = RND(-TI):SC = 0:REM == SCORE ==
20 MA = 20:REM == MAXIMUM NUMBER OF BALLS ==
30 UC$ = CHR$(142):LC$ = CHR$(14):BA$ = CHR$(113)
40 PA$ = CHR$($6F)+CHR$($B7)+CHR$($B7)+CHR$($70)
50 REM == BX=BALLX, BY=BALLY, BC=BALLCOLOR, DX/DY=BALL DIRECTION. BA=BALLALIVE
60 DIM BX(MA):DIM BY(MA):DIM BC(MA):DIM DX(MA):DIM DY(MA):DIM BA(MA)
70 FOR T = 1 TO MA:BA(T) = 0:NEXT
80 REM == CLEAR THE SCREEN AND SET TO UPPERCASE ==
90 COLOR 14,6
100 CLS:PRINT UC$;
110 LOCATE 20,20:PRINT "WELCOME TO BOUNCER BY JASON OAKLEY!"
120 LOCATE 25,27:PRINT "PRESS SPACE TO PLAY!"
130 LOCATE 30,26:PRINT "USE ARROW KEYS TO MOVE"
140 REM == GET KEYBOARD INPUT ==
150 GET A$
160 IF A$ <> CHR$(32) THEN GOTO 150
170 REM == MAIN GAME SECTION ==
180 COLOR 0,0:CLS
190 PX = 3: PY = 59: SB = 1
200 NB = 1: REM ** NUMBER OF BALLS IN PLAY **
210 CN = 200: REM ** COUNTER **
220 REM == ADD NEW BALL(S) TO PLAY AREA ==
230 BX(NB) = INT(RND(1)*80) + 1:BY(NB) = INT(RND(1)*20) +1
240 BC(NB) = INT(RND(1)*14) + 1:BA(NB) = 1
250 DX(NB) = INT(RND(1)*2):DY(NB) = INT(RND(1)*2)
260 REM == MOVE AND DRAW BALL(S) ==
270 FOR T = 1 TO MA:IF BA(T) = 1 THEN LOCATE BY(T),BX(T):PRINT " "
280 NEXT
290 LOCATE PY,PX:PRINT "    ";: REM == 4 SPACES ==
300 BL = 0: REM == BALLS LEFT ==
310 JY = JOY(0): REM == GET ARROWKEY INPUT ==
320 IF JY = 2 AND PX > 2 THEN PX = PX - 2
330 IF JY = 1 AND PX < 76 THEN PX = PX + 2
340 LOCATE PY,PX:COLOR 3:PRINT PA$;
350 FOR T = 1 TO NB                                     
360 IF BA(T) = 0 THEN GOTO 510
370 BL = BL + 1
380 IF DX(T) = 0 AND BX(T) > 0 THEN BX(T) = BX(T) - 1
390 IF BX(T) = 0 THEN DX(T) = 1:FMDRUM 1,27
400 IF DX(T) = 1 AND BX(T) < 80 THEN BX(T) = BX(T) + 1
410 IF BX(T) = 80 THEN DX(T) = 0:FMDRUM 1,27
420 IF DY(T) = 0 AND BY(T) > 0 THEN BY(T) = BY(T) - 1
430 IF BY(T) = 0 THEN DY(T) = 1:FMDRUM 1,27
440 IF DY(T) = 1 AND BY(T) < 59 THEN BY(T) = BY(T) + 1
450 IF BY(T) = 58 THEN IF BX(T) > PX - 1 AND BX(T) < PX + 5 THEN DY(T) = 0
460 IF BY(T) = 58 AND DY(T) = 0 THEN SC = SC + 2 * SB:FMDRUM 2,33
470 IF BY(T) = 58 AND DY(T) = 1 THEN BA(T) = 0 :FMDRUM 1,35:GOTO 510
480 LOCATE 1,35:COLOR 1:PRINT "SCORE = ";SC           
490 LOCATE BY(T),BX(T)
500 COLOR BC(T):PRINT BA$
510 NEXT T:SB = BL
520 IF BL = 0 THEN GOTO 570:REM == GAME OVER ==
530 CN = CN - 1: IF CN = 0 THEN IF NB < MA - 1 THEN NB = NB + 1
540 IF CN = 0 AND NB < MA THEN GOTO 210
550 IF CN = 0 AND NB = MA THEN CN = 1
560 GOTO 270
570 CLS:LOCATE 15,1:FMDRUM 1,46
580 FOR T = 1 TO 10
590 COLOR INT(RND(1)*14)+1
600 PRINT SPC(20)"*** GAME OVER! ***"
610 NEXT T
620 LOCATE 40,20:COLOR 1
630 PRINT "YOUR SCORE: ";SC
640 LOCATE 45,16
650 PRINT "PRESS SPACE TO RESTART!"
660 GET A$
670 IF A$ <> CHR$(32) THEN GOTO 660
680 RUN

This game is kind of like Breakout games and clones, only in this one you just juggle the balls bouncing around the screen. This may seem simple, but the more balls you keep bouncing around the faster your score goes up! Don’t drop the balls and watch your score go up and Up and UP!

Comments

Leave a Reply