160 lines
4.9 KiB
QBasic
160 lines
4.9 KiB
QBasic
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
|