mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-28 05:17:49 +00:00
231 lines
4.4 KiB
QBasic
231 lines
4.4 KiB
QBasic
|
WIDTH 80, 50
|
||
|
|
||
|
GOTO menu
|
||
|
rt:
|
||
|
CLS
|
||
|
SCREEN 7
|
||
|
LINE (20, 20)-(300, 180), 1, B
|
||
|
LINE (10, 10)-(310, 190), 1, B
|
||
|
PAINT (12, 12), 1
|
||
|
LINE (20, 20)-(300, 180), 9, B
|
||
|
LINE (10, 10)-(310, 190), 9, B
|
||
|
LINE (23, 7)-(48, 16), 9, B
|
||
|
LINE (296, 7)-(271, 16), 9, B
|
||
|
COLOR 9
|
||
|
LOCATE 2, 4
|
||
|
PRINT win
|
||
|
LOCATE 2, 35
|
||
|
PRINT lose
|
||
|
blx = 50: ppx = 50: ppxx = 50: zim = 164:
|
||
|
bly = 21: mbx = 1: mby = 1: ppy = 22: PPYY = 52
|
||
|
amy = 0: amyy = 0: ay = 41: ayy = 51: ax = 36
|
||
|
ti = 0
|
||
|
iat = 1
|
||
|
COLOR 9
|
||
|
'-------------start location randomizer for ball
|
||
|
rerand:
|
||
|
RANDOMIZE TIMER
|
||
|
ballloc = INT(RND * 4) + 1
|
||
|
IF ballloc = 1 THEN GOTO location1
|
||
|
IF ballloc = 2 THEN GOTO location2
|
||
|
IF ballloc = 3 THEN GOTO location3
|
||
|
IF ballloc = 4 THEN GOTO location4
|
||
|
locre:
|
||
|
'-----------main loop
|
||
|
SLEEP 1
|
||
|
DO
|
||
|
PSET (50, 20), 9'-------------wall repair thing
|
||
|
pm = ppy + 25
|
||
|
LINE (ppx, ppy - 1)-(ppxx, PPYY + 1), 0, BF 'player erase
|
||
|
|
||
|
SELECT CASE INKEY$'-----------player control start
|
||
|
CASE CHR$(0) + CHR$(80)
|
||
|
IF PPYY = 178 THEN GOTO ppymm
|
||
|
ppy = ppy + 1
|
||
|
PPYY = PPYY + 1
|
||
|
ppymm:
|
||
|
CASE CHR$(0) + CHR$(72)
|
||
|
IF ppy = 22 THEN GOTO ppym
|
||
|
ppy = ppy - 1
|
||
|
PPYY = PPYY - 1
|
||
|
ppym:
|
||
|
CASE CHR$(27)
|
||
|
END
|
||
|
END SELECT'---------player control end
|
||
|
|
||
|
PSET (blx, bly), 0 '--------ball erase
|
||
|
'-------------------------ball colision detection
|
||
|
IF blx = 299 THEN mbx = -1
|
||
|
IF blx = 21 THEN mbx = 1
|
||
|
IF bly = 21 THEN mby = 1
|
||
|
IF bly = 179 THEN mby = -1
|
||
|
'----------------------------SCORE KEEPING
|
||
|
IF blx > 279 AND bly < ax - 15 THEN win = win + 1
|
||
|
IF blx > 279 AND bly < ax - 15 THEN GOTO rt
|
||
|
IF blx > 279 AND bly > ax + 15 THEN win = win + 1
|
||
|
IF blx > 279 AND bly > ax + 15 THEN GOTO rt
|
||
|
'---------------------------------------------------winning and losing
|
||
|
IF blx < 50 AND bly > ppy THEN lose = lose + 1
|
||
|
IF blx < 50 AND bly > ppy THEN GOTO rt
|
||
|
IF blx < 50 AND bly < PPYY THEN lose = lose + 1
|
||
|
IF blx < 50 AND bly < PPYY THEN GOTO rt
|
||
|
IF lose = 5 THEN GOTO losegame
|
||
|
bstt = 0
|
||
|
IF win = 5 THEN GOTO wingame
|
||
|
'----------------------------ball padle colision detection
|
||
|
IF blx = 50 GOTO ppm
|
||
|
GOTO sm
|
||
|
ppm:
|
||
|
IF bly > ppy AND bly < PPYY THEN mbx = 1
|
||
|
sm:
|
||
|
IF blx = 269 THEN GOTO ppmm
|
||
|
GOTO ms
|
||
|
ppmm:
|
||
|
IF bly < ax + 15 AND bly > ax - 15 THEN mbx = -1
|
||
|
ms:
|
||
|
'---------------ball movement
|
||
|
blx = blx + mbx
|
||
|
samy = samy + 1
|
||
|
IF samy = 1 THEN bly = bly + mby
|
||
|
IF samy = 1 THEN samy = 0
|
||
|
PSET (blx, bly), 15'-----------balldrawer
|
||
|
|
||
|
LINE (ppx, ppy - 1)-(ppxx, PPYY + 1), 15'------player padle drawer
|
||
|
|
||
|
'----------------------------------------------timing loop
|
||
|
DO
|
||
|
ti = ti + 1
|
||
|
LOOP UNTIL ti = gspeed
|
||
|
ti = 0
|
||
|
'-----------------------score display
|
||
|
LOCATE 2, 4
|
||
|
PRINT win
|
||
|
LOCATE 2, 35
|
||
|
PRINT lose
|
||
|
'------------ai goto
|
||
|
ait = ait + 1
|
||
|
IF ait = 1 THEN GOTO ai
|
||
|
backai:
|
||
|
ita = 0
|
||
|
LOOP
|
||
|
'--------------loop end
|
||
|
ai: '---------------------AI
|
||
|
sam = sam + 1
|
||
|
LINE (270, ax + 15)-(270, ax - 15), 0
|
||
|
IF sam < 0 THEN GOTO missera
|
||
|
|
||
|
IF ax - 14 < bly THEN amy = 1
|
||
|
IF ax + 14 > bly THEN amy = -1
|
||
|
IF ax = 164 THEN amy = -1
|
||
|
IF ax = 36 THEN amy = 1
|
||
|
|
||
|
IF sam = 2 THEN ax = ax + amy
|
||
|
missera:
|
||
|
IF sam = 2 THEN sam = 0
|
||
|
LINE (270, ax + 15)-(270, ax - 15), 15
|
||
|
ait = 0
|
||
|
GOTO backai
|
||
|
'------------------------------
|
||
|
losegame:
|
||
|
SLEEP 1
|
||
|
CLS
|
||
|
LOCATE 11, 19
|
||
|
PRINT "you lose"
|
||
|
SLEEP 2
|
||
|
END
|
||
|
|
||
|
wingame:
|
||
|
SLEEP 1
|
||
|
CLS
|
||
|
LOCATE 11, 19
|
||
|
PRINT "you win"
|
||
|
SLEEP 2
|
||
|
END
|
||
|
|
||
|
location1:
|
||
|
blx = 50
|
||
|
bly = 21
|
||
|
mbx = 1
|
||
|
mby = 1
|
||
|
GOTO locre
|
||
|
|
||
|
location2:
|
||
|
blx = 50
|
||
|
bly = 171
|
||
|
mby = -1
|
||
|
mbx = 1
|
||
|
GOTO locre
|
||
|
|
||
|
location3:
|
||
|
blx = 268
|
||
|
bly = 21
|
||
|
mbx = -1
|
||
|
mby = 1
|
||
|
GOTO locre
|
||
|
|
||
|
location4:
|
||
|
blx = 268
|
||
|
bly = 171
|
||
|
mbx = -1
|
||
|
mby = -1
|
||
|
GOTO locre
|
||
|
|
||
|
menu:
|
||
|
CLS
|
||
|
dotloc = 24
|
||
|
gspeed = 30000
|
||
|
dotloc = 24
|
||
|
menub:
|
||
|
COLOR 9
|
||
|
LOCATE 19, 35
|
||
|
PRINT "PONG CLONE"
|
||
|
PRINT " "
|
||
|
PRINT " programed by bj mccann"
|
||
|
PRINT
|
||
|
PRINT
|
||
|
PRINT " START"
|
||
|
PRINT
|
||
|
PRINT " CONTROLS"
|
||
|
PRINT
|
||
|
PRINT " CHANGE SPEED "
|
||
|
PRINT
|
||
|
PRINT " EXIT"
|
||
|
COLOR 1
|
||
|
DO
|
||
|
LOCATE dotloc, 35
|
||
|
PRINT " "
|
||
|
SELECT CASE INKEY$
|
||
|
'CASE CHR$(27)
|
||
|
'END
|
||
|
CASE CHR$(0) + CHR$(72)
|
||
|
IF dotloc > 24 THEN dotloc = dotloc - 2
|
||
|
CASE CHR$(0) + CHR$(80)
|
||
|
IF dotloc < 30 THEN dotloc = dotloc + 2
|
||
|
CASE CHR$(0) + CHR$(77)
|
||
|
IF dotloc = 24 THEN GOTO rt
|
||
|
IF dotloc = 26 THEN GOTO controls
|
||
|
IF dotloc = 28 THEN GOTO speed
|
||
|
IF dotloc = 30 THEN END
|
||
|
END SELECT
|
||
|
LOCATE dotloc, 35
|
||
|
PRINT "*"
|
||
|
LOOP
|
||
|
|
||
|
controls:
|
||
|
CLS
|
||
|
LOCATE 19, 25
|
||
|
PRINT "to move the paddle up press the up arrow."
|
||
|
PRINT " to move the paddle down press down."
|
||
|
PRINT " to return to the menu press escape"
|
||
|
SLEEP 5
|
||
|
GOTO menu
|
||
|
|
||
|
speed:
|
||
|
CLS
|
||
|
LOCATE 19, 25
|
||
|
PRINT "normal speed is 30000 the lower the number the faster the game runs"
|
||
|
INPUT gspeed
|
||
|
CLS
|
||
|
GOTO menub
|
||
|
|