mirror of
https://github.com/dschmenk/VM02.git
synced 2024-05-28 13:41:32 +00:00
236 lines
3.7 KiB
Plaintext
236 lines
3.7 KiB
Plaintext
|
CONST FALSE = 0
|
||
|
CONST TRUE = NOT FALSE
|
||
|
CONST SHOWLORES = $C056
|
||
|
CONST KEYBOARD = $C000
|
||
|
CONST KEYSTROBE = $C010
|
||
|
CONST SPEAKER = $C030
|
||
|
BYTE EXITMSG = "PRESS ANY KEY TO EXIT."
|
||
|
BYTE GOODBYE = "THAT'S ALL FOLKS!"
|
||
|
BYTE LEVEL = "1=HARD 2=MED 3=EASY ?"
|
||
|
BYTE YOURSCORE = "YOUR SCORE WAS "
|
||
|
BYTE AUTOPLAY = TRUE
|
||
|
BYTE PDLPOS, PDLSIZE, PDLMID, MISS
|
||
|
BYTE XSCRN, YSCRN
|
||
|
BYTE SCORE[3]
|
||
|
WORD XBALL, YBALL, XSPEED, YSPEED
|
||
|
FUNC INCSCORE
|
||
|
|
||
|
DEF BEEP(TONE, DURATION)
|
||
|
BYTE I, J
|
||
|
|
||
|
FOR J = DURATION DOWNTO 0
|
||
|
FOR I = TONE DOWNTO 0
|
||
|
NEXT
|
||
|
DROP ^SPEAKER
|
||
|
NEXT
|
||
|
END
|
||
|
|
||
|
DEF KEYPRESSED
|
||
|
RETURN ^KEYBOARD > 127
|
||
|
END
|
||
|
|
||
|
DEF GETKEY
|
||
|
BYTE KEY
|
||
|
|
||
|
REPEAT
|
||
|
KEY = ^KEYBOARD
|
||
|
UNTIL KEY > 127
|
||
|
DROP ^KEYSTROBE
|
||
|
RETURN KEY
|
||
|
END
|
||
|
|
||
|
DEF TEXTMODE
|
||
|
DROP ROMCALL(0, 0, 0, 0, $FB39)
|
||
|
END
|
||
|
|
||
|
DEF HOME
|
||
|
DROP ROMCALL(0, 0, 0, 0, $FC58)
|
||
|
END
|
||
|
|
||
|
DEF GOTOXY(X, Y)
|
||
|
^($24) = X
|
||
|
DROP ROMCALL(Y, 0, 0, 0, $FB5B)
|
||
|
END
|
||
|
|
||
|
DEF PRSTRXY(X, Y, STRPTR)
|
||
|
GOTOXY(X, Y)
|
||
|
PRSTR(STRPTR)
|
||
|
END
|
||
|
|
||
|
DEF GRMODE
|
||
|
DROP ROMCALL(0, 0, 0, 0, $FB40)
|
||
|
DROP ^SHOWLORES
|
||
|
END
|
||
|
|
||
|
DEF COLOR(CLR)
|
||
|
DROP ROMCALL(CLR, 0, 0, 0, $F864)
|
||
|
END
|
||
|
|
||
|
DEF PLOT(X, Y)
|
||
|
DROP ROMCALL(Y, 0, X, 0, $F800)
|
||
|
END
|
||
|
|
||
|
DEF HLIN(LEFT, RIGHT, VERT)
|
||
|
^($2C) = RIGHT
|
||
|
DROP ROMCALL(VERT, 0, LEFT, 0, $F819)
|
||
|
END
|
||
|
|
||
|
DEF VLIN(TOP, BOTTOM, HORZ)
|
||
|
^($2D) = BOTTOM
|
||
|
DROP ROMCALL(TOP, 0, HORZ, 0, $F828)
|
||
|
END
|
||
|
|
||
|
DEF PADDLE(NUM)
|
||
|
RETURN ROMCALL(0, NUM, 0, 0, $FB1E).2
|
||
|
END
|
||
|
|
||
|
DEF BUTTON(NUM)
|
||
|
RETURN ^($C060 + NUM) > 127
|
||
|
END
|
||
|
|
||
|
DEF UPDTPDL
|
||
|
IF AUTOPLAY
|
||
|
IF PDLPOS + PDLMID > XSCRN
|
||
|
IF PDLPOS > 0
|
||
|
PDLPOS = PDLPOS - 1
|
||
|
FIN
|
||
|
ELSIF PDLPOS + PDLMID + 1 < XSCRN
|
||
|
IF PDLPOS + PDLSIZE < 39
|
||
|
PDLPOS = PDLPOS + 1
|
||
|
FIN
|
||
|
FIN
|
||
|
ELSE
|
||
|
PDLPOS = PADDLE(0) / 5
|
||
|
FIN
|
||
|
IF PDLPOS + PDLSIZE > 39
|
||
|
PDLPOS = 39 - PDLSIZE
|
||
|
FIN
|
||
|
IF PDLPOS
|
||
|
COLOR(0)
|
||
|
HLIN(0, PDLPOS - 1, 39)
|
||
|
FIN
|
||
|
COLOR(1)
|
||
|
HLIN(PDLPOS, PDLPOS + PDLSIZE, 39)
|
||
|
IF PDLPOS + PDLSIZE < 38
|
||
|
COLOR(0)
|
||
|
HLIN(PDLPOS + PDLSIZE + 1, 39, 39)
|
||
|
FIN
|
||
|
END
|
||
|
|
||
|
DEF UPDTBALL
|
||
|
BYTE XNEW, YNEW
|
||
|
|
||
|
;
|
||
|
; UPDATE HORIZONTAL POSITION
|
||
|
;
|
||
|
XBALL = XBALL + XSPEED
|
||
|
IF XBALL > 623
|
||
|
XBALL = 623
|
||
|
XSPEED = -XSPEED
|
||
|
BEEP(4, 10)
|
||
|
ELSIF XBALL < 16
|
||
|
XBALL = 16
|
||
|
XSPEED = -XSPEED
|
||
|
BEEP(4, 10)
|
||
|
FIN
|
||
|
XNEW = XBALL >> 4
|
||
|
;
|
||
|
; UPDATE VERTICAL POSITION
|
||
|
;
|
||
|
YBALL = YBALL + YSPEED
|
||
|
IF YBALL > 623
|
||
|
;
|
||
|
; CHECK FOR PADDLE HIT
|
||
|
;
|
||
|
IF XNEW >= PDLPOS AND XNEW <= PDLPOS + PDLSIZE
|
||
|
YBALL = 623
|
||
|
YSPEED = -YSPEED - 2
|
||
|
XSPEED = XSPEED + (XNEW - (PDLPOS + PDLMID - 1))
|
||
|
IF XSPEED == 0
|
||
|
IF PDLPOS + PDLMID > 19
|
||
|
XSPEED = 1
|
||
|
ELSE
|
||
|
XSPEED = -1
|
||
|
FIN
|
||
|
FIN
|
||
|
INCSCORE
|
||
|
BEEP(4, 10)
|
||
|
ELSE
|
||
|
MISS = 1
|
||
|
BEEP(14, 40)
|
||
|
FIN
|
||
|
ELSIF YBALL < 16
|
||
|
YBALL = 16
|
||
|
YSPEED = -YSPEED
|
||
|
BEEP(4, 10)
|
||
|
FIN
|
||
|
YNEW = YBALL >> 4
|
||
|
;
|
||
|
; UPDATE ON-SCREEN BALL
|
||
|
;
|
||
|
IF XNEW <> XSCRN OR YNEW <> YSCRN
|
||
|
COLOR(8)
|
||
|
PLOT(XNEW, YNEW)
|
||
|
COLOR(0)
|
||
|
PLOT(XSCRN, YSCRN)
|
||
|
XSCRN = XNEW
|
||
|
YSCRN = YNEW
|
||
|
FIN
|
||
|
END
|
||
|
|
||
|
DEF PRSCORE
|
||
|
COUT(SCORE[2])
|
||
|
COUT(SCORE[1])
|
||
|
COUT(SCORE[0])
|
||
|
END
|
||
|
|
||
|
DEF INCSCORE
|
||
|
SCORE[0] = SCORE[0] + 1
|
||
|
IF SCORE[0] > '9'
|
||
|
SCORE[0] = '0'
|
||
|
SCORE[1] = SCORE[1] + 1
|
||
|
IF SCORE[1] > '9'
|
||
|
SCORE[1] = '0'
|
||
|
SCORE[2] = SCORE[2] + 1
|
||
|
FIN
|
||
|
FIN
|
||
|
GOTOXY(17, 22)
|
||
|
PRSCORE
|
||
|
END
|
||
|
|
||
|
DEF INITSCORE
|
||
|
SCORE[0] = '0'
|
||
|
SCORE[1] = '0'
|
||
|
SCORE[2] = '0'
|
||
|
GOTOXY(17, 22)
|
||
|
PRSCORE
|
||
|
END
|
||
|
|
||
|
PRSTR(@LEVEL)
|
||
|
PDLSIZE = (GETKEY - $B0) * 3
|
||
|
PDLMID = PDLSIZE >> 1
|
||
|
GRMODE
|
||
|
COLOR(15)
|
||
|
HLIN(0, 39, 0)
|
||
|
VLIN(1, 38, 0)
|
||
|
VLIN(1, 38, 39)
|
||
|
XBALL = PADDLE(0) + 16
|
||
|
YBALL = PADDLE(1) + 16
|
||
|
XSCRN = XBALL >> 4
|
||
|
YSCRN = YBALL >> 4
|
||
|
XSPEED = 1
|
||
|
YSPEED = 1
|
||
|
MISS = 0
|
||
|
INITSCORE
|
||
|
REPEAT
|
||
|
UPDTPDL
|
||
|
UPDTBALL
|
||
|
UNTIL KEYPRESSED OR MISS
|
||
|
TEXTMODE
|
||
|
HOME
|
||
|
PRSTR(@YOURSCORE)
|
||
|
PRSCORE
|
||
|
COUT($0D)
|
||
|
PRSTR(@GOODBYE)
|
||
|
DONE
|