diff --git a/BREAKOUT.BAS b/BREAKOUT.BAS new file mode 100644 index 0000000..ebcb9c0 --- /dev/null +++ b/BREAKOUT.BAS @@ -0,0 +1,159 @@ + SETMUSIC 0 "L6FRR>CRRCRRCDRRB-RRDRERR>CRRCRRCRRCRR= 131 THEN GOSUB PING2 BX = 131 DX = -DX END + IF BX <= 5 THEN GOSUB PING2 BX = 5 DX = -DX END + BY = BY + DY + IF BY <= 5 THEN BY = 5 DY = -DY END + TX = (BX-5)/8 + TY = (BY-5)/8 + CHAR = GETCHAR TX TY + IF (BY >= 16) AND NOT(CHAR = 32) THEN + GOSUB PING3 + INC SCORE + LOCATE 1 0 PRINT STR SCORE, "00" + PUTCHAR TX TY 32 + IF TX MOD 2 = 0 THEN + PUTCHAR TX+1 TY 32 + ELSE + PUTCHAR TX-1 TY 32 + END + DY = -DY + IF (GETCOLOR TX TY) = INK_YELLOW + PAPER_BLACK THEN DY = 2 END + END + IF BY >= 99 THEN + GOSUB LIVE_LOST + IF LIVES = 4 THEN GOTO GAME_OVER END + END + IF (BY >= 91) AND (DY < 100) THEN + IF (BX+3 >= X) AND (BX+3 < X+16) THEN + GOSUB PING1 + DY = -DY + IF (BX+3 >= X) AND (BX+3 < X+4) THEN DX = -2 END + IF (BX+3 >= X+4) AND (BX+3 < X+8) THEN DX = -1 END + IF (BX+3 >= X+8) AND (BX+3 < X+12) THEN DX = 1 END + IF (BX+3 >= X+12) AND (BX+3 < X+16) THEN DX = 2 END + END + END + ' PINTEM SPRITES + PUTSPRITE 0 BX BY + PUTSPRITE 1 X 96 + PUTSPRITE 2 X+8 96 + UPDATESCR + GOTO MAIN_GAME +LOOP: GOTO LOOP +MOVE_LEFT: IF X > 8 THEN X = X - 3 END RETURN +MOVE_RIGHT: IF X < 120 THEN X = X + 3 END RETURN +LIVE_LOST: + GOSUB POINT + DEC LIVES + COLOR INK_YELLOW + PAPER_BLACK + LOCATE 11 0 FOR I = 0 TO LIVES PRINT CHR &HE1 END + COLOR INK_RED + PAPER_BLACK PRINT CHR &HEE + UPDATESCR + DELAY = 0 +WAIT1: INC DELAY UPDATESCR IF DELAY < 20 THEN GOTO WAIT1 END + COLOR INK_YELLOW + PAPER_BLACK + LOCATE 11 0 FOR I = 0 TO LIVES PRINT CHR &HE1 END PRINT " " + UPDATESCR +WAIT2: INC DELAY UPDATESCR IF DELAY < 100 THEN GOTO WAIT2 END + COLOR INK_YELLOW + PAPER_BLACK + LOCATE 11 0 FOR I = 0 TO LIVES PRINT CHR &HE0 END + DX = 1 DY = 1 BX = 64 BY = 48 X = 64 + RETURN +GAME_OVER: + CLS + PUTSPRITE 0 0 0 + PUTSPRITE 1 0 0 + PUTSPRITE 2 0 0 + LOCATE 7 4 PRINT CHR &HE1 + COLOR INK_WHITE + PAPER_BLACK + LOCATE 3 7 PRINT "GAME OVER" + UPDATESCR + DELAY = 0 +WAIT3: INC DELAY UPDATESCR IF DELAY < 210 THEN GOTO WAIT3 END + GOTO START +PING1: + SETMUSIC 0 "L1O7C" PLAYMUSIC + RETURN +PING2: + SETMUSIC 0 "L1O6C" PLAYMUSIC + RETURN +PING3: + SETMUSIC 0 "L1O5C" PLAYMUSIC + RETURN +POINT: + SETMUSIC 0 "L2O2BEC" PLAYMUSIC + RETURN + + +'JUMP_LINE: MOVE -2 1 RETURN +'DRAW_0: PRINT !8785 GOSUB JUMP_LINE PRINT !8585 GOSUB JUMP_LINE PRINT !8381 RETURN +'DRAW_1: PRINT !8085 GOSUB JUMP_LINE PRINT !8085 GOSUB JUMP_LINE PRINT !8081 RETURN +'DRAW_2: PRINT !8385 GOSUB JUMP_LINE PRINT !8781 GOSUB JUMP_LINE PRINT !8381 RETURN +'DRAW_3: PRINT !8385 GOSUB JUMP_LINE PRINT !8385 GOSUB JUMP_LINE PRINT !8381 RETURN +'DRAW_4: PRINT !8585 GOSUB JUMP_LINE PRINT !8385 GOSUB JUMP_LINE PRINT !8081 RETURN +'DRAW_5: PRINT !8781 GOSUB JUMP_LINE PRINT !8385 GOSUB JUMP_LINE PRINT !8381 RETURN +'DRAW_6: PRINT !8781 GOSUB JUMP_LINE PRINT !8785 GOSUB JUMP_LINE PRINT !8381 RETURN +'DRAW_7: PRINT !8385 GOSUB JUMP_LINE PRINT !8085 GOSUB JUMP_LINE PRINT !8081 RETURN +'DRAW_8: PRINT !8785 GOSUB JUMP_LINE PRINT !8785 GOSUB JUMP_LINE PRINT !8381 RETURN +'DRAW_9: PRINT !8785 GOSUB JUMP_LINE PRINT !8385 GOSUB JUMP_LINE PRINT !8081 RETURN diff --git a/INVADERS.BAS b/INVADERS.BAS new file mode 100644 index 0000000..47b6962 --- /dev/null +++ b/INVADERS.BAS @@ -0,0 +1,150 @@ + 'SETMUSIC 0 "O6L2BAGFEDC" PLAYMUSIC ' PLAYER SHOOT + 'SETMUSIC 0 "O4L2BAGFEDC" PLAYMUSIC ' INVADER SHOOT + 'SETMUSIC 0 "O4L3CCC" PLAYMUSIC ' BIG UFO + 'SETMUSIC 3 "O5L2BAGFEDCV4BAGFEDV2CBAGFEDC" PLAYMUSIC ' EXPLOSION + SETCHAR 0 !00000101033F7F7F + SETCHAR 1 !0000000080F8FCFC + SETCHAR 2 !00423C5ABDA51800 + SETCHAR 3 !0024BD5A3C244200 + SETCHAR 4 !00817E99FF3C4200 + SETCHAR 5 !00247E99FF3C1800 + SETCHAR 6 !00183C5ADB7E2400 + SETCHAR 7 !00183C5ADB7EDB00 + SETCHAR 8 !00031F7F45FF3100 + SETCHAR 9 !00C0F8FE92FF8C00 + SETCHAR 10 !0925975F3FCF1200 + SETCHAR 11 !2048D2F4F8E69000 + SETCHAR 12 !1F3F7FFFFFFFFEFC + SETCHAR 13 !F8FCFEFFFFFF7F3F + SETCHAR 14 !013373FFFFFFFEFC + SETCHAR 15 !B89CD8FFFFFF7F3F + SETCHAR 16 !000042C2C7EFFEFC + SETCHAR 17 !0080C0D9DFFF7F3F + SETCHAR 18 !00000000008ADEFC + SETCHAR 19 !00000080C0D27733 + SETCHAR 20 !FF00000000000000 + SETCHAR 21 !00000000000000FF + SETCHAR 22 !0000001010000000 + + BORDER INK_BLACK + COLOR INK_WHITE + PAPER_BLACK + CLS + + ' PINTEM EL MARCADOR + LOCATE 1 0 PRINT "0000" + COLOR INK_GRAY + PAPER_BLACK + LOCATE 0 1 PRINT !14141414141414141414141414141414 + LOCATE 0 11 PRINT !15151515151515151515151515151515 + COLOR INK_YELLOW + PAPER_BLACK + LOCATE 13 0 PRINT !E0E0E0 + + LET ITER = 0 + LET HEIGHT = 0 + LET ALIEN = 0 + LET AX = 8 + LET AY = 18 + DIM A(3) + A(0) = &HFF + A(1) = &HFF + A(2) = &HFF + LET POS = 0 + LET MASK = 1 + + 'PINTEM ELS MARSIANITOS + FOR I = 0 TO 24 + IF I < 6 THEN SETSPRITE I 4 INK_MAGENTA END + IF (I >= 6) AND (I < 18) THEN SETSPRITE I 2 INK_LIME END + IF I >= 18 THEN SETSPRITE I 6 INK_CYAN END + PUTSPRITE I AX AY + AX = AX + 16 + IF AX = 104 THEN + AX = 8 + AY = AY + 10 + END + END + + ' PINTEM AL JUGADOR + LET X = 32 + SETSPRITE 24 0 INK_CYAN + SETSPRITE 25 1 INK_CYAN + PUTSPRITE 24 X 95 + PUTSPRITE 25 X+8 95 + + ' LA BALA + LET BALA_Y = 0 + LET BALA_X = 0 + SETSPRITE 26 22 INK_WHITE + + ' PINTEM LES BARRERES + COLOR INK_RED + PAPER_BLACK + LOCATE 1 10 PRINT !0C0D20200C0D20200C0D20200C0D20 + UPDATESCR + +MAIN_GAME: + ' MOVEM AL JUGADOR + IF KEYPRESSED BTN_RIGHT THEN + INC X + IF X > 122 THEN X = 122 END + GOSUB DRAW_PLAYER + END + IF KEYPRESSED BTN_LEFT THEN + DEC X + IF X < 7 THEN X = 7 END + GOSUB DRAW_PLAYER + END + IF (BALA_X = 0) AND (KEYPRESSED BTN_A) THEN + BALA_X = X+4 + BALA_Y = 95 + GOSUB PLAYER_SHOOT + END + + 'MOVEM LA BALA + IF BALA_X > 0 THEN + BALA_Y = BALA_Y - 4 + IF BALA_Y < 16 THEN BALA_X = 0 END + PUTSPRITE 26 BALA_X BALA_Y + END + + 'MOVEM ALS MARSIANITOS + LET AX = 8 + ITER + LET AY = 18 + HEIGHT * 4 + LET POS = 0 + LET MASK = 1 + FOR I = 0 TO 24 + IF I = ALIEN THEN + INC ALIEN + IF ALIEN = 24 THEN + ALIEN = 0 + IF (HEIGHT MOD 2) = 0 THEN INC ITER ELSE DEC ITER END + IF (ITER = 40) OR (ITER = 0) THEN INC HEIGHT END + END + IF (A(POS) AND MASK) = MASK THEN + IF I < 6 THEN SETSPRITE I (4+(ITER MOD 2)) INK_MAGENTA END + IF (I >= 6) AND (I < 18) THEN SETSPRITE I (2+(ITER MOD 2)) INK_LIME END + IF I >= 18 THEN SETSPRITE I (6+(ITER MOD 2)) INK_CYAN END + PUTSPRITE I AX AY + GOTO ALIEN_FOUND + END + END + MASK = MASK * 2 + IF MASK = 0 THEN + MASK = 1 + INC POS + IF POS = 3 THEN POS = 0 END + END + AX = AX + 16 + IF AX = 104 + ITER THEN + AX = 8 + ITER + AY = AY + 10 + END + END +ALIEN_FOUND: + UPDATESCR + GOTO MAIN_GAME +DRAW_PLAYER: + PUTSPRITE 24 X 95 + PUTSPRITE 25 X+8 95 + RETURN +PLAYER_SHOOT: SETMUSIC 0 "O6L2BAGFEDC" PLAYMUSIC RETURN + + \ No newline at end of file diff --git a/PONG.BAS b/PONG.BAS new file mode 100644 index 0000000..c3dfa4b --- /dev/null +++ b/PONG.BAS @@ -0,0 +1,207 @@ + 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