Added some example games

This commit is contained in:
2021-04-15 19:16:02 +02:00
parent fed8dc01f9
commit 516bf5fc50
3 changed files with 516 additions and 0 deletions

159
BREAKOUT.BAS Normal file
View File

@@ -0,0 +1,159 @@
SETMUSIC 0 "L6FRR>CRR<FRERR>CRR<ERDRRB-RRDRCRRAR<AB->CDRRB-RRDRERR>CRR<ERF"
SETMUSIC 1 "L6O3FA>CRR<FRFEA>CRR<EREE-A>CRR<E-RE-C"
PLAYMUSIC
START:
BORDER INK_BLACK
COLOR INK_RED + PAPER_BLACK
CLS
LOCATE 0 1 PRINT !8A87858A87858A8783888F8D8A858E81
LOCATE 0 2 PRINT !8A878B8A878B8A87818A8D8F8A8F8D80
LOCATE 0 3 PRINT !8A8D8E8A858A8A8F8F8A858F8A858B85
COLOR INK_YELLOW + PAPER_BLACK
LOCATE 3 4 PRINT !8E8F8D8A858A858F8F8F
LOCATE 3 5 PRINT !8F808F8A858A85808F80
LOCATE 3 6 PRINT !8B8F87828F8F81808F80
COLOR INK_WHITE + PAPER_BLACK
W = 0
MENU_BLINK:
LOCATE 0 9 PRINT "PRESS A TO START"
UPDATESCR
INC W
IF KEYPRESSED BTN_A THEN GOTO INIT_GAME END
IF W < 25 THEN GOTO MENU_BLINK END
MENU_BLINK2:
LOCATE 0 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:
CLS
LIVES = 5
LEVEL = 1
SCORE = 0
X = 64 ' X DE LA PALA
BX = 64 BY = 48 ' X I Y DE LA BOLA
DX = 1 DY = 1 ' VELOCITAT EN X I Y DE LA BOLA
' DEFINIM ELS CARACTERS PER ALS BLOCS I LA BOLA
SETCHAR 16 !007F7F7F7F7F7F7F
SETCHAR 17 !00FFFFFFFFFFFFFF
' PINTEM ELS BLOCS
COLOR INK_RED + PAPER_BLACK LOCATE 0 1 PRINT !10111011101110111011101110111011
COLOR INK_YELLOW + PAPER_BLACK LOCATE 0 2 PRINT !10111011101110111011101110111011
COLOR INK_GREEN + PAPER_BLACK LOCATE 0 3 PRINT !10111011101110111011101110111011
COLOR INK_BLUE + PAPER_BLACK LOCATE 0 4 PRINT !10111011101110111011101110111011
' DEFINIM ELS SPRITES
SETSPRITE 0 &h90 INK_WHITE
SETSPRITE 1 &H83 INK_CYAN
SETSPRITE 2 &H83 INK_CYAN
'PINTEM EL MARCADOR
COLOR INK_YELLOW + PAPER_BLACK
LOCATE 11 0 FOR I = 0 TO LIVES PRINT CHR &HE0 END
LOCATE 7 0 PRINT STR LEVEL
LOCATE 1 0 PRINT STR SCORE, "00"
MAIN_GAME:
' MOVIMENT DE LA PALA
IF KEYPRESSED BTN_LEFT THEN GOSUB MOVE_LEFT END
IF KEYPRESSED BTN_RIGHT THEN GOSUB MOVE_RIGHT END
' MOVIMENT DE LA BOLA
BX = BX + DX
IF BX >= 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

150
INVADERS.BAS Normal file
View File

@@ -0,0 +1,150 @@
'SETMUSIC 0 "O6L2BAGFEDC" PLAYMUSIC ' PLAYER SHOOT
'SETMUSIC 0 "O4L2BAGFEDC" PLAYMUSIC ' INVADER SHOOT
'SETMUSIC 0 "O4L3C<BAGFEDCDEFGAB>C<BAGFEDCDEFGAB>C" 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

207
PONG.BAS Normal file
View File

@@ -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<A#ARGRFRRR<F" PLAYMUSIC
WAIT 4
PUTSPRITE 0 0 0
PUTSPRITE 1 0 0
PUTSPRITE 2 0 0
PUTSPRITE 3 0 0
PUTSPRITE 4 0 0
GOTO START