implemented hexstrings, implemented MOVE, PUTCOLOR, GETCHAR, GETCOLOR, modified PUTCHAR, several fixes.

This commit is contained in:
2017-02-09 19:03:20 +01:00
parent be539b1591
commit 3f1f9451ca
10 changed files with 219 additions and 298 deletions

265
test.bas
View File

@@ -1,24 +1,25 @@
SETMUSIC 0 "l5cccfrf>l6c." PLAYMUSIC
SETMUSIC 0 "L5CCCFRF>L6C." PLAYMUSIC
START:
BORDER INK_BLACK
COLOR INK_WHITE + PAPER_BLACK
BORDER INK_GRAY
COLOR INK_RED + PAPER_BLACK
CLS
LOCATE 4 2 PRINT CHR &h87, CHR &h85, CHR &h87, CHR &h85, CHR &h87, CHR &h85, CHR &h87, CHR &h81
LOCATE 4 3 PRINT CHR &h85, CHR &h85, CHR &h85, CHR &h85, CHR &h85, CHR &h85, CHR &h85, CHR &h84
LOCATE 4 4 PRINT CHR &h87, CHR &h81, CHR &h8D, CHR &h85, CHR &h85, CHR &h85, CHR &h8D, CHR &h85
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 3 8 PRINT "PRESS CTRL"
LOCATE 4 9 PRINT "TO PLAY"
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
IF W < 25 THEN GOTO MENU_BLINK END
MENU_BLINK2:
LOCATE 3 8 PRINT " "
LOCATE 4 9 PRINT " "
LOCATE 0 9 PRINT " "
UPDATESCR
INC W
IF KEYPRESSED BTN_A THEN GOTO INIT_GAME END
@@ -26,184 +27,70 @@ MENU_BLINK2:
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
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
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
' 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 BX = 131 DX = -DX END
IF BX <= 5 THEN BX = 5 DX = -DX END
BY = BY + DY
IF BY >= 99 THEN BY = 99 DY = -DY END
IF BY <= 5 THEN BY = 5 DY = -DY END
TX = (BX-5)/8
TY = (BY-5)/8
CHAR = GETCHAR TX TY
IF NOT(CHAR = 32) THEN
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_GREEN + PAPER_BLACK THEN DY = 2 DX = 2 END
'IF GETCOLOR TX TY = INK_YELLOW + PAPER_BLACK THEN DY = 3 DX = 3 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
' PINTEM SPRITES
PUTSPRITE 0 BX BY
PUTSPRITE 1 X 96
PUTSPRITE 2 X+8 96
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
GOTO MAIN_GAME
LOOP: GOTO LOOP
MOVE_LEFT: IF X > 8 THEN X = X - 4 END RETURN
MOVE_RIGHT: IF X < 120 THEN X = X + 4 END 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