Working on Space Invaders

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

259
test.bas
View File

@@ -1,142 +1,129 @@
'SETMUSIC 0 "L5CCCFRF>L6C." 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 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
'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
' 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 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
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 < 12) THEN SETSPRITE I 2 INK_LIME END
IF (I >= 12) 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 SPRITES
PUTSPRITE 0 BX BY
PUTSPRITE 1 X 96
PUTSPRITE 2 X+8 96
' 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
' 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
GOTO MAIN_GAME
DRAW_PLAYER:
PUTSPRITE 24 X 95
PUTSPRITE 25 X+8 95
RETURN
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