Working on Space Invaders

This commit is contained in:
2017-02-10 19:06:33 +01:00
parent bf4358cc4b
commit bf91b632bd

257
test.bas
View File

@@ -1,142 +1,129 @@
'SETMUSIC 0 "L5CCCFRF>L6C." PLAYMUSIC 'SETMUSIC 0 "O6L2BAGFEDC" PLAYMUSIC ' PLAYER SHOOT
START: 'SETMUSIC 0 "O4L2BAGFEDC" PLAYMUSIC ' INVADER SHOOT
BORDER INK_BLACK 'SETMUSIC 0 "O4L3C<BAGFEDCDEFGAB>C<BAGFEDCDEFGAB>C" PLAYMUSIC ' BIG UFO
COLOR INK_RED + PAPER_BLACK 'SETMUSIC 3 "O5L2BAGFEDCV4BAGFEDV2CBAGFEDC" PLAYMUSIC ' EXPLOSION
CLS SETCHAR 0 !00000101033F7F7F
LOCATE 0 1 PRINT !8A87858A87858A8783888F8D8A858E81 SETCHAR 1 !0000000080F8FCFC
LOCATE 0 2 PRINT !8A878B8A878B8A87818A8D8F8A8F8D80 SETCHAR 2 !00423C5ABDA51800
LOCATE 0 3 PRINT !8A8D8E8A858A8A8F8F8A858F8A858B85 SETCHAR 3 !0024BD5A3C244200
COLOR INK_YELLOW + PAPER_BLACK SETCHAR 4 !00817E99FF3C4200
LOCATE 3 4 PRINT !8E8F8D8A858A858F8F8F SETCHAR 5 !00247E99FF3C1800
LOCATE 3 5 PRINT !8F808F8A858A85808F80 SETCHAR 6 !00183C5ADB7E2400
LOCATE 3 6 PRINT !8B8F87828F8F81808F80 SETCHAR 7 !00183C5ADB7EDB00
COLOR INK_WHITE + PAPER_BLACK SETCHAR 8 !00031F7F45FF3100
W = 0 SETCHAR 9 !00C0F8FE92FF8C00
MENU_BLINK: SETCHAR 10 !0925975F3FCF1200
LOCATE 0 9 PRINT "PRESS A TO START" SETCHAR 11 !2048D2F4F8E69000
UPDATESCR SETCHAR 12 !1F3F7FFFFFFFFEFC
INC W SETCHAR 13 !F8FCFEFFFFFF7F3F
IF KEYPRESSED BTN_A THEN GOTO INIT_GAME END SETCHAR 14 !013373FFFFFFFEFC
IF W < 25 THEN GOTO MENU_BLINK END SETCHAR 15 !B89CD8FFFFFF7F3F
MENU_BLINK2: SETCHAR 16 !000042C2C7EFFEFC
LOCATE 0 9 PRINT " " SETCHAR 17 !0080C0D9DFFF7F3F
UPDATESCR SETCHAR 18 !00000000008ADEFC
INC W SETCHAR 19 !00000080C0D27733
IF KEYPRESSED BTN_A THEN GOTO INIT_GAME END SETCHAR 20 !FF00000000000000
IF W < 50 THEN GOTO MENU_BLINK2 END SETCHAR 21 !00000000000000FF
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 8 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 BORDER INK_BLACK
BX = BX + DX COLOR INK_WHITE + PAPER_BLACK
IF BX >= 131 THEN GOSUB PING2 BX = 131 DX = -DX END CLS
IF BX <= 5 THEN GOSUB PING2 BX = 5 DX = -DX END
BY = BY + DY ' PINTEM EL MARCADOR
IF BY <= 5 THEN BY = 5 DY = -DY END LOCATE 1 0 PRINT "0000"
TX = (BX-5)/8 COLOR INK_GRAY + PAPER_BLACK
TY = (BY-5)/8 LOCATE 0 1 PRINT !14141414141414141414141414141414
CHAR = GETCHAR TX TY LOCATE 0 11 PRINT !15151515151515151515151515151515
IF (BY >= 16) AND NOT(CHAR = 32) THEN COLOR INK_YELLOW + PAPER_BLACK
GOSUB PING3 LOCATE 13 0 PRINT !E0E0E0
INC SCORE
LOCATE 1 0 PRINT STR SCORE, "00" LET ITER = 0
PUTCHAR TX TY 32 LET HEIGHT = 0
IF TX MOD 2 = 0 THEN LET ALIEN = 0
PUTCHAR TX+1 TY 32 LET AX = 8
ELSE LET AY = 18
PUTCHAR TX-1 TY 32 DIM A(3)
END A(0) = &HFF
DY = -DY A(1) = &HFF
IF (GETCOLOR TX TY) = INK_YELLOW + PAPER_BLACK THEN DY = 2 END A(2) = &HFF
END LET POS = 0
IF BY >= 99 THEN GOSUB LIVE_LOST END LET MASK = 1
IF (BY >= 91) AND (DY < 100) THEN
IF (BX+3 >= X) AND (BX+3 < X+16) THEN 'PINTEM ELS MARSIANITOS
GOSUB PING1 FOR I = 0 TO 24
DY = -DY IF I < 6 THEN SETSPRITE I 4 INK_MAGENTA END
IF (BX+3 >= X) AND (BX+3 < X+4) THEN DX = -2 END IF (I >= 6) AND (I < 12) THEN SETSPRITE I 2 INK_LIME END
IF (BX+3 >= X+4) AND (BX+3 < X+8) THEN DX = -1 END IF (I >= 12) AND (I < 18) THEN SETSPRITE I 2 INK_LIME END
IF (BX+3 >= X+8) AND (BX+3 < X+12) THEN DX = 1 END IF I >= 18 THEN SETSPRITE I 6 INK_CYAN END
IF (BX+3 >= X+12) AND (BX+3 < X+16) THEN DX = 2 END PUTSPRITE I AX AY
AX = AX + 16
IF AX = 104 THEN
AX = 8
AY = AY + 10
END END
END END
' PINTEM SPRITES
PUTSPRITE 0 BX BY ' PINTEM AL JUGADOR
PUTSPRITE 1 X 96 LET X = 32
PUTSPRITE 2 X+8 96 SETSPRITE 24 0 INK_CYAN
SETSPRITE 25 1 INK_CYAN
PUTSPRITE 24 X 95
PUTSPRITE 25 X+8 95
' 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
'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
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 UPDATESCR
GOTO MAIN_GAME GOTO MAIN_GAME
DRAW_PLAYER:
PUTSPRITE 24 X 95
PUTSPRITE 25 X+8 95
RETURN
LOOP: GOTO LOOP 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
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