SETMUSIC 0 "L5CCCFRF>L6C." PLAYMUSIC START: BORDER INK_BLACK COLOR INK_WHITE + PAPER_BLACK CLS LOCATE 4 2 PRINT !8785878587858781 LOCATE 4 3 PRINT !8585858585858584 LOCATE 4 4 PRINT !87818D8585858D85 W = 0 MENU_BLINK: LOCATE 3 8 PRINT "PRESS CTRL" LOCATE 4 9 PRINT "TO PLAY" UPDATESCR INC W IF KEYPRESSED BTN_A THEN GOTO INIT_GAME END IF W < 25 THEN GOTO MENU_BLINK END MENU_BLINK2: LOCATE 3 8 PRINT " " LOCATE 4 9 PRINT " " UPDATESCR INC W IF KEYPRESSED BTN_A THEN GOTO INIT_GAME END IF W < 50 THEN GOTO MENU_BLINK2 END W = 0 GOTO MENU_BLINK INIT_GAME: P1_Y = 48 P1_SCORE = 0 P2_Y = 48 P2_SCORE = 0 BALL_X = 67 BALL_Y = 48 BALL_DX = 1 BALL_DY = 1 SETSPRITE 0 &HE7 INK_WHITE SETSPRITE 1 &H95 INK_WHITE SETSPRITE 2 &H95 INK_WHITE SETSPRITE 3 &H95 INK_WHITE SETSPRITE 4 &H95 INK_WHITE CLS GOSUB DRAW_NET GOSUB DRAW_SCORE GOSUB DRAW_P1 GOSUB DRAW_P2 MAIN_GAME: IF (P1_SCORE = 10) OR (P2_SCORE = 10) THEN GOTO END_GAME END GOSUB DRAW_BALL TIME = 32 PRE_GAME: GOSUB PROCESS_PLAYER1 DEC TIME UPDATESCR IF TIME > 0 THEN GOTO PRE_GAME END GAME: GOSUB PROCESS_PLAYER1 GOSUB PROCESS_PLAYER2 GOSUB MOVE_BALL IF (BALL_X > 8) AND (BALL_X < 14) THEN GOSUB BOUNCE_P1 END IF (BALL_X < 128) AND (BALL_X > 122) THEN GOSUB BOUNCE_P2 END IF (BALL_X > 135) THEN INC P1_SCORE BALL_X = 67 BALL_Y = 48 BALL_DX = -1 GOSUB FLASH_BORDER GOSUB DRAW_SCORE GOSUB POINT GOTO MAIN_GAME END IF (BALL_X < 2) THEN INC P2_SCORE BALL_X = 67 BALL_Y = 48 BALL_DX = 1 GOSUB FLASH_BORDER GOSUB DRAW_SCORE GOSUB POINT GOTO MAIN_GAME END IF (BALL_Y > 96) OR (BALL_Y < 8) THEN BALL_DY = -BALL_DY END UPDATESCR GOTO GAME FLASH_BORDER: BORDER INK_WHITE UPDATESCR BORDER INK_BLACK RETURN DRAW_NET: PUTCHAR 7 0 &HD1 'INK_WHITE + PAPER_BLACK PUTCHAR 7 2 &HD1 'INK_WHITE + PAPER_BLACK PUTCHAR 7 4 &HD1 'INK_WHITE + PAPER_BLACK PUTCHAR 7 6 &HD1 'INK_WHITE + PAPER_BLACK PUTCHAR 7 8 &HD1 'INK_WHITE + PAPER_BLACK PUTCHAR 7 10 &HD1 'INK_WHITE + PAPER_BLACK RETURN DRAW_SCORE: LOCATE 6 1 PRINT STR P1_SCORE LOCATE 9 1 PRINT STR P2_SCORE RETURN DRAW_P1: PUTSPRITE 1 8 P1_Y PUTSPRITE 2 8 P1_Y+8 RETURN DRAW_P2: PUTSPRITE 3 128 P2_Y PUTSPRITE 4 128 P2_Y+8 RETURN DRAW_BALL: PUTSPRITE 0 BALL_X BALL_Y RETURN PROCESS_PLAYER1: IF KEYPRESSED BTN_UP THEN DEC P1_Y DEC P1_Y IF P1_Y < 8 THEN P1_Y = 8 END GOSUB DRAW_P1 ELSE IF KEYPRESSED BTN_DOWN THEN INC P1_Y INC P1_Y IF P1_Y > 88 THEN P1_Y = 88 END GOSUB DRAW_P1 END END RETURN PROCESS_PLAYER2: IF BALL_Y < P2_Y+8 THEN DEC P2_Y END IF BALL_Y > P2_Y+8 THEN INC P2_Y END GOSUB DRAW_P2 RETURN MOVE_BALL: BALL_X = BALL_X + BALL_DX BALL_Y = BALL_Y + BALL_DY GOSUB DRAW_BALL RETURN BOUNCE_P1: IF (P1_Y <= BALL_Y+7) AND (P1_Y > BALL_Y+1) THEN BALL_DY = -2 BALL_DX = 1 GOTO PING END IF (P1_Y <= BALL_Y+1) AND (P1_Y+5 > BALL_Y) THEN BALL_DY = -1 IF BALL_DX = -1 THEN BALL_DX = 1 ELSE BALL_DX = 2 END GOTO PING END IF (P1_Y+5 <= BALL_Y) AND (P1_Y+11 > BALL_Y) THEN BALL_DY = 0 BALL_DX = 2 GOTO PING END IF (P1_Y+11 <= BALL_Y) AND (P1_Y+17 > BALL_Y) THEN BALL_DY = 1 IF BALL_DX = -1 THEN BALL_DX = 1 ELSE BALL_DX = 2 END GOTO PING END IF (P1_Y+17 <= BALL_Y) AND (P1_Y+23 > BALL_Y) THEN BALL_DY = 2 BALL_DX = 1 GOTO PING END RETURN BOUNCE_P2: IF (P2_Y <= BALL_Y+7) AND (P2_Y > BALL_Y+1) THEN BALL_DY = -2 BALL_DX = -1 GOTO PING END IF (P2_Y <= BALL_Y+1) AND (P2_Y+5 > BALL_Y) THEN BALL_DY = -1 IF BALL_DX = 1 THEN BALL_DX = -1 ELSE BALL_DX = -2 END GOTO PING END IF (P2_Y+5 <= BALL_Y) AND (P2_Y+11 > BALL_Y) THEN BALL_DY = 0 BALL_DX = -2 GOTO PING END IF (P2_Y+11 <= BALL_Y) AND (P2_Y+17 > BALL_Y) THEN BALL_DY = 1 IF BALL_DX = 1 THEN BALL_DX = -1 ELSE BALL_DX = -2 END GOTO PING END IF (P2_Y+17 <= BALL_Y) AND (P2_Y+23 > BALL_Y) THEN BALL_DY = 2 BALL_DX = -1 GOTO PING END RETURN PING: SETMUSIC 0 "L1O7C" PLAYMUSIC RETURN POINT: SETMUSIC 0 "L2O2BEC" PLAYMUSIC RETURN END_GAME: LOCATE 3 5 PRINT "GAME OVER" LOCATE 1 7 IF P1_SCORE = 10 THEN PRINT "PLAYER 1 WINS!" END IF P2_SCORE = 10 THEN PRINT "PLAYER 2 WINS!" END UPDATESCR SETMUSIC 0 "L5O5CCR