1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-07-05 06:30:24 +00:00
qb64/programs/samples/qb45com/action/4pong.bas

1910 lines
62 KiB
QBasic

SCREEN 12
RANDOMIZE TIMER
GOSUB title
WIDTH 80, 60
DIM tx(2 TO 16) AS INTEGER
DIM ty(2 TO 16) AS INTEGER
DIM itemx(1, 15) AS INTEGER
DIM itemy(1, 15) AS INTEGER
DIM demoitemx(1, 15) AS INTEGER
DIM demoitemy(1, 15) AS INTEGER
DIM symbolx(1 TO 30) AS INTEGER
DIM symboly(1 TO 30) AS INTEGER
DIM symbolt(1 TO 30) AS INTEGER
DIM symbolc(1 TO 30) AS INTEGER
DIM stime(1 TO 30) AS INTEGER
FOR i = 1 TO 15
demoitemx(1, i) = INT(RND * 74) + 14
demoitemy(1, i) = INT(RND * 74) + 14
NEXT i
speed& = 1
pad& = 1
scoret& = 4
max& = 100
dir& = 1
it1& = 1
it2& = 1
it3& = 1
it4& = 1
it5& = 1
it6& = 1
it7& = 1
it8& = 1
ballx& = 50
bally& = 10
ballxs& = INT(RND * 2) + 1
ballys& = INT(RND * 2) + 1
pad1& = 50
pad2& = 50
pad3& = 50
pad4& = 50
p1& = 1
p2& = 1
p3& = 1
p4& = 1
co& = 1
items& = 1
it& = 15
GOTO start
new:
x& = 240
y& = 240
xs& = 0
ys& = 0
a& = speed&
IF p1& = 0 THEN ly1& = 57 ELSE ly1& = 1
IF p2& = 0 THEN lx1& = 57 ELSE lx1& = 1
IF p3& = 0 THEN ly2& = 423 ELSE ly2& = 479
IF p4& = 0 THEN lx2& = 423 ELSE lx2& = 479
started& = 1
IF items& = 0 THEN it& = 0
IF p1& = 7 THEN p1& = INT(RND * 5) + 2
IF p2& = 7 THEN p2& = INT(RND * 5) + 2
IF p3& = 7 THEN p3& = INT(RND * 5) + 2
IF p4& = 7 THEN p4& = INT(RND * 5) + 2
p1hyper& = 0
p2hyper& = 0
p3hyper& = 0
p4hyper& = 0
p1descore& = 0
p2descore& = 0
p3descore& = 0
p4descore& = 0
IF scoret& = 3 OR scoret& = 6 THEN
p1descore& = max&
p2descore& = max&
p3descore& = max&
p4descore& = max&
END IF
IF p1& = 0 THEN p1descore& = -2000000000
IF p2& = 0 THEN p2descore& = -2000000000
IF p3& = 0 THEN p3descore& = -2000000000
IF p4& = 0 THEN p4descore& = -2000000000
p1score& = p1descore&
p2score& = p2descore&
p3score& = p3descore&
p4score& = p4descore&
p1des& = 240
p2des& = 240
p3des& = 240
p4des& = 240
p1pad& = 240
p2pad& = 240
p3pad& = 240
p4pad& = 240
p1size& = 0
p2size& = 0
p3size& = 0
p4size& = 0
p1desize& = 25
p2desize& = 25
p3desize& = 25
p4desize& = 25
p1dir& = 0
p2dir& = 0
p3dir& = 0
p4dir& = 0
p1scores& = 0
p2scores& = 0
p3scores& = 0
p4scores& = 0
p1speed& = pad& * 7
p2speed& = pad& * 7
p3speed& = pad& * 7
p4speed& = pad& * 7
center& = 0
serve& = 5
colo& = INT(RND * 5) + 1
FOR i = 1 TO it&
itemx(1, i) = INT(RND * 340) + 70
itemy(1, i) = INT(RND * 340) + 70
NEXT i
retrylast:
lasthit& = INT(RND * 4) + 1
IF lasthit& = 1 AND p1& = 0 THEN GOTO retrylast
IF lasthit& = 2 AND p2& = 0 THEN GOTO retrylast
IF lasthit& = 3 AND p3& = 0 THEN GOTO retrylast
IF lasthit& = 4 AND p4& = 0 THEN GOTO retrylast
finished& = 0
subtract& = 0
startedd& = TIMER
FOR i = 1 TO 30
stime(i) = 0
NEXT i
restart:
CLS
IF p1& > 1 THEN p1com& = 1 ELSE p1com& = 0
IF p1& > 1 THEN p1ac& = (6 - p1&) * 20
IF p1& > 1 THEN p1ai& = p1& * 80
IF p2& > 1 THEN p2com& = 1 ELSE p2com& = 0
IF p2& > 1 THEN p2ac& = (6 - p2&) * 20
IF p2& > 1 THEN p2ai& = p2& * 80
IF p3& > 1 THEN p3com& = 1 ELSE p3com& = 0
IF p3& > 1 THEN p3ac& = (6 - p3&) * 20
IF p3& > 1 THEN p3ai& = p3& * 80
IF p4& > 1 THEN p4com& = 1 ELSE p4com& = 0
IF p4& > 1 THEN p4ac& = (6 - p4&) * 20
IF p4& > 1 THEN p4ai& = p4& * 80
GOSUB draww
scombo& = 0
CLS
VIEW SCREEN (lx1&, ly1&)-(lx2&, ly2&)
DO
'IF delay& < 0 THEN delay& = 0
'FOR i = 1 TO delay&
'NEXT i
_DELAY 0.03 + DELAY& / 10000
finished& = TIMER
IF max& > 0 AND (scoret& = 3 OR scoret& = 6) THEN
IF p1& > 0 THEN players& = players& + 1
IF p2& > 0 THEN players& = players& + 1
IF p3& > 0 THEN players& = players& + 1
IF p4& > 0 THEN players& = players& + 1
IF p1descore& < 1 AND p1& > 0 THEN
p1& = 0
p1descore& = -players&
ly1& = 57
serve& = 5
GOSUB centerserve
VIEW
CLS
GOSUB draww
ELSEIF p2descore& < 1 AND p2& > 0 THEN
p2& = 0
p2descore& = -players&
lx1& = 57
serve& = 5
GOSUB centerserve
VIEW
CLS
GOSUB draww
ELSEIF p3descore& < 1 AND p3& > 0 THEN
p3& = 0
p3descore& = -players&
ly2& = 423
serve& = 5
GOSUB centerserve
VIEW
CLS
GOSUB draww
ELSEIF p4descore& < 1 AND p4& > 0 THEN
p4& = 0
p4descore& = -players&
lx2& = 423
serve& = 5
GOSUB centerserve
VIEW
CLS
GOSUB draww
END IF
IF players& = 1 THEN GOTO theend
players& = 0
ELSE
IF (p1descore& > max& - 1 OR p2descore& > max& - 1 OR p3descore& > max& - 1 OR p4descore& > max& - 1) AND max& > 0 THEN GOTO theend
END IF
IF p1score& <> p1descore& AND p1& > 0 THEN
FOR i = 1 TO CLNG(ABS(p1descore& - p1score&) / 10) + 1
IF p1descore& - p1score& > 0 THEN p1score& = p1score& + 1
IF p1descore& - p1score& < 0 THEN p1score& = p1score& - 1
NEXT i
SOUND 1000, .1
GOSUB draww
ELSEIF p2score& <> p2descore& AND p2& > 0 THEN
FOR i = 1 TO CLNG(ABS(p2descore& - p2score&) / 10) + 1
IF p2descore& - p2score& > 0 THEN p2score& = p2score& + 1
IF p2descore& - p2score& < 0 THEN p2score& = p2score& - 1
NEXT i
SOUND 1000, .1
GOSUB draww
ELSEIF p3score& <> p3descore& AND p3& > 0 THEN
FOR i = 1 TO CLNG(ABS(p3descore& - p3score&) / 10) + 1
IF p3descore& - p3score& > 0 THEN p3score& = p3score& + 1
IF p3descore& - p3score& < 0 THEN p3score& = p3score& - 1
NEXT i
SOUND 1000, .1
GOSUB draww
ELSEIF p4score& <> p4descore& AND p4& > 0 THEN
FOR i = 1 TO CLNG(ABS(p4descore& - p4score&) / 10) + 1
IF p4descore& - p4score& > 0 THEN p4score& = p4score& + 1
IF p4descore& - p4score& < 0 THEN p4score& = p4score& - 1
NEXT i
SOUND 1000, .1
GOSUB draww
END IF
IF p1size& > p1desize& THEN p1size& = p1size& - 1
IF p1size& < p1desize& THEN p1size& = p1size& + 1
IF p2size& > p2desize& THEN p2size& = p2size& - 1
IF p2size& < p2desize& THEN p2size& = p2size& + 1
IF p3size& > p3desize& THEN p3size& = p3size& - 1
IF p3size& < p3desize& THEN p3size& = p3size& + 1
IF p4size& > p4desize& THEN p4size& = p4size& - 1
IF p4size& < p4desize& THEN p4size& = p4size& + 1
IF scombo& > -1 THEN
IF scombo& > 0 THEN COLOR 3 ELSE COLOR 0
LOCATE 30, 30: PRINT combo&
scombo& = scombo& - 1
END IF
IF ABS(xs&) < 8 AND ABS(ys&) < 8 AND serve& = 0 THEN
IF ABS(xs&) > ABS(ys&) THEN
IF xs& > 0 THEN
IF ys& > 0 THEN ys& = ys& + (8 / xs&)
IF ys& < 0 THEN ys& = ys& - xs&
xs& = 8
ELSEIF xs& < 0 THEN
IF ys& > 0 THEN ys& = ys& + (8 / ABS(xs&))
IF ys& < 0 THEN ys& = ys& - (8 / ABS(xs&))
xs& = -8
END IF
ELSEIF ABS(xs&) < ABS(ys&) THEN
IF ys& > 0 THEN
IF xs& > 0 THEN xs& = xs& + (8 / ys&)
IF xs& < 0 THEN xs& = xs& - (8 / ys&)
ys& = 8
ELSEIF ys& < 0 THEN
IF xs& > 0 THEN xs& = xs& + (8 / ABS(ys&))
IF xs& < 0 THEN xs& = xs& - (8 / ABS(ys&))
ys& = -8
END IF
ELSEIF ABS(xs&) = ABS(ys&) AND xs& <> 0 THEN
IF xs& > 0 THEN xs& = 8
IF xs& < 0 THEN xs& = -8
IF ys& > 0 THEN ys& = 8
IF ys& < 0 THEN ys& = -8
END IF
END IF
FOR ba = 1 TO a&
IF x& < 65 AND xs& = 0 THEN xs& = -1
IF x& > 415 AND xs& = 0 THEN xs& = 1
IF y& < 65 AND ys& = 0 THEN ys& = -1
IF y& > 415 AND ys& = 0 THEN ys& = 1
IF serve& = 1 THEN
x& = p1pad&
y& = 13
ELSEIF serve& = 2 THEN
x& = 13
y& = p2pad&
ELSEIF serve& = 3 THEN
x& = p3pad&
y& = 467
ELSEIF serve& = 4 THEN
x& = 467
y& = p4pad&
END IF
IF serve& > 0 THEN xs& = 0
IF serve& > 0 THEN ys& = 0
x& = x& + xs&
y& = y& + ys&
IF x& < 60 AND y& < 60 AND p1& > 0 AND p2& > 0 THEN
FOR i = 1 TO 60
IF (x& - 3) < i AND y& - 3 < (60 - i) THEN
SWAP xs&, ys&
xs& = -xs&
ys& = -ys&
IF ABS(xs&) = ABS(ys&) THEN xs& = xs& + 1
x& = i + 3
y& = 63 - i
SOUND 750, .1
END IF
NEXT i
END IF
IF x& < 60 AND y& > 420 AND p2& > 0 AND p3& > 0 THEN
FOR i = 1 TO 60
IF (x& - 3) < i AND (y& + 3) > (420 + i) THEN
SWAP xs&, ys&
IF ABS(xs&) = ABS(ys&) THEN xs& = xs& + 1
x& = i + 3
y& = 417 + i
SOUND 750, .1
END IF
NEXT i
END IF
IF x& > 420 AND y& < 60 AND p4& > 0 AND p1& > 0 THEN
FOR i = 1 TO 60
IF (x& + 3) > (480 - i) AND (y& - 3) < (60 - i) THEN
SWAP xs&, ys&
IF ABS(xs&) = ABS(ys&) THEN xs& = xs& + 1
x& = 477 - i
y& = 63 - i
SOUND 750, .1
END IF
NEXT i
END IF
IF x& > 420 AND y& > 420 AND p3& > 0 AND p4& > 0 THEN
FOR i = 1 TO 60
IF (x& + 3) > (480 - i) AND (y& + 3) > (420 + i) THEN
SWAP xs&, ys&
xs& = -xs&
ys& = -ys&
IF ABS(xs&) = ABS(ys&) THEN xs& = xs& + 1
x& = 477 - i
y& = 417 + i
SOUND 750, .1
END IF
NEXT i
END IF
IF countdown& > 0 THEN countdown& = countdown& - 1
FOR i = 1 TO it&
IF it1& = 0 AND it2& = 0 AND it3& = 0 AND it4& = 0 AND it5& = 0 AND it6& = 0 AND it7& = 0 AND it8& = 0 THEN EXIT FOR
IF x& < itemx(1, i) + 9 AND x& > itemx(1, i) - 9 AND y& < itemy(1, i) + 9 AND y& > itemy(1, i) - 9 THEN
IF hit& = i AND countdown& > 0 THEN GOTO endder
hit& = i
countdown& = 20
GOSUB item
END IF
endder:
NEXT i
IF y& < 60 AND p1& = 0 THEN
ys& = -ys&
IF ys& = 0 THEN ys& = 1
y& = 60
SOUND 500, .1
ELSEIF x& < 60 AND p2& = 0 THEN
xs& = -xs&
IF xs& = 0 THEN xs& = 1
x& = 60
SOUND 500, .1
ELSEIF y& > 420 AND p3& = 0 THEN
ys& = -ys&
IF ys& = 0 THEN ys& = -1
y& = 420
SOUND 500, .1
ELSEIF x& > 420 AND p4& = 0 THEN
xs& = -xs&
IF xs& = 0 THEN xs& = -1
x& = 420
SOUND 500, .1
END IF
IF y& < 8 AND ((x& > (p1pad& - p1size&) AND x& < (p1pad& + p1size&)) OR p1hyper& > 0) THEN
ys& = INT(RND * 8) + 1
IF xs& = 0 THEN xs& = INT(RND * 17) - 8
lasthit& = 1
IF p1hyper& = 1 THEN p1hyper& = 0
y& = 8
GOSUB universal
ELSEIF x& < 8 AND ((y& > (p2pad& - p2size&) AND y& < (p2pad& + p2size&)) OR p2hyper& > 0) THEN
xs& = INT(RND * 8) + 1
IF ys& = 0 THEN ys& = INT(RND * 17) - 8
lasthit& = 2
IF p2hyper& = 1 THEN p2hyper& = 0
x& = 8
GOSUB universal
ELSEIF y& > 472 AND ((x& > (p3pad& - p3size&) AND x& < (p3pad& + p3size&)) OR p3hyper& > 0) THEN
ys& = -(INT(RND * 8) + 1)
IF xs& = 0 THEN xs& = INT(RND * 17) - 8
lasthit& = 3
IF p3hyper& = 1 THEN p3hyper& = 0
y& = 472
GOSUB universal
ELSEIF x& > 472 AND ((y& > (p4pad& - p4size&) AND y& < (p4pad& + p4size&)) OR p4hyper& > 0) THEN
xs& = -(INT(RND * 8) + 1)
IF ys& = 0 THEN ys& = INT(RND * 17) - 8
lasthit& = 4
IF p4hyper& = 1 THEN p4hyper& = 0
x& = 472
GOSUB universal
END IF
IF y& < 0 AND p1& > 0 THEN GOSUB score1
IF x& < 0 AND p2& > 0 THEN GOSUB score2
IF y& > 480 AND p3& > 0 THEN GOSUB score3
IF x& > 480 AND p4& > 0 THEN GOSUB score4
NEXT ba
PSET (tx(16), ty(16)), 0
PSET (tx(15), ty(15)), 8
PSET (tx(14), ty(14)), 8
PSET (tx(13), ty(13)), 7
PSET (tx(12), ty(12)), 7
PSET (tx(11), ty(11)), 4
CIRCLE (tx(10), ty(10)), 1, 0
PSET (tx(10), ty(10)), 4
CIRCLE (tx(9), ty(9)), 1, 4
CIRCLE (tx(8), ty(8)), 1, 4
CIRCLE (tx(7), ty(7)), 1, 4
CIRCLE (tx(6), ty(6)), 1, 12
CIRCLE (tx(5), ty(5)), 1, 12
CIRCLE (tx(4), ty(4)), 2, 0
CIRCLE (tx(4), ty(4)), 1, 12
CIRCLE (tx(3), ty(3)), 2, 4
CIRCLE (tx(3), ty(3)), 1, 14
CIRCLE (tx(2), ty(2)), 3, 0
CIRCLE (tx(2), ty(2)), 2, 4
CIRCLE (tx(2), ty(2)), 1, 14
PSET (tx(2) - 1, ty(2) - 1), 0
PSET (tx(2) + 1, ty(2) - 1), 0
PSET (tx(2) - 1, ty(2) + 1), 0
PSET (tx(2) + 1, ty(2) + 1), 0
LINE (x& - 1, y& - 1)-(x& + 1, y& + 1), 14, BF
CIRCLE (x&, y&), 2, 12
CIRCLE (x&, y&), 3, 4
FOR i = 16 TO 3 STEP -1
tx(i) = tx(i - 1)
ty(i) = ty(i - 1)
NEXT i
tx(2) = x&
ty(2) = y&
IF p1& > 0 AND p1dir& = 2 THEN p1pad& = p1pad& - p1speed&
IF p1& > 0 AND p1dir& = 1 THEN p1pad& = p1pad& + p1speed&
IF p2& > 0 AND p2dir& = 2 THEN p2pad& = p2pad& - p2speed&
IF p2& > 0 AND p2dir& = 1 THEN p2pad& = p2pad& + p2speed&
IF p3& > 0 AND p3dir& = 2 THEN p3pad& = p3pad& - p3speed&
IF p3& > 0 AND p3dir& = 1 THEN p3pad& = p3pad& + p3speed&
IF p4& > 0 AND p4dir& = 2 THEN p4pad& = p4pad& - p4speed&
IF p4& > 0 AND p4dir& = 1 THEN p4pad& = p4pad& + p4speed&
IF p1hyper& > 0 THEN
IF serve& = 0 AND p1hyper& > 1 THEN p1hyper& = p1hyper& - 1
IF ys& < 0 THEN p1pad& = x&
END IF
IF p2hyper& > 0 THEN
IF serve& = 0 AND p2hyper& > 1 THEN p2hyper& = p2hyper& - 1
IF xs& < 0 THEN p2pad& = y&
END IF
IF p3hyper& > 0 THEN
IF serve& = 0 AND p3hyper& > 1 THEN p3hyper& = p3hyper& - 1
IF ys& > 0 THEN p3pad& = x&
END IF
IF p4hyper& > 0 THEN
IF serve& = 0 AND p4hyper& > 1 THEN p4hyper& = p4hyper& - 1
IF xs& > 0 THEN p4pad& = y&
END IF
IF (p1pad& - p1size&) < 60 THEN p1pad& = (60 + p1size&)
IF (p1pad& + p1size&) > 420 THEN p1pad& = (420 - p1size&)
IF (p2pad& - p2size&) < 60 THEN p2pad& = (60 + p2size&)
IF (p2pad& + p2size&) > 420 THEN p2pad& = (420 - p2size&)
IF (p3pad& - p3size&) < 60 THEN p3pad& = (60 + p3size&)
IF (p3pad& + p3size&) > 420 THEN p3pad& = (420 - p3size&)
IF (p4pad& - p4size&) < 60 THEN p4pad& = (60 + p4size&)
IF (p4pad& + p4size&) > 420 THEN p4pad& = (420 - p4size&)
FOR i = 1 TO it&
IF it1& = 0 AND it2& = 0 AND it3& = 0 AND it4& = 0 AND it5& = 0 AND it6& = 0 AND it7& = 0 AND it8& = 0 THEN EXIT FOR
IF items& = 0 THEN EXIT FOR
LINE (itemx(1, i) - 2, itemy(1, i) - 2)-(itemx(1, i) + 2, itemy(1, i) + 2), colo&, B
LINE (itemx(1, i) - 1, itemy(1, i) - 1)-(itemx(1, i) + 1, itemy(1, i) + 1), colo& + 8, B
PSET (itemx(1, i), itemy(1, i)), 15
NEXT i
FOR i = 1 TO 30
IF stime(i) > 0 THEN
IF symbolt(i) = 3 OR symbolt(i) = 4 OR symbolt(i) = 5 OR symbolt(i) = 8 OR symbolt(i) = 9 OR symbolt(i) = 12 OR symbolt(i) = 13 THEN symbolc(i) = 0
PSET (symbolx(i), symboly(i)), symbolc(i)
stime(i) = stime(i) - 1
IF symbolt(i) = 1 THEN DRAW "M-2,0 R4 U L4 BL2 C4 D BL2 U Bl2 D BR12 NE NR3 NF"
IF symbolt(i) = 2 THEN DRAW "M-2,0 R4 U L4 BL2 C2 D BL2 U Bl2 D BR15 NH NL3 NG"
IF symbolt(i) = 3 THEN DRAW "C4 E F C14 L1 C4 BD E BR2 NR3 NE NF BL5 L BR C0 U BL2 C8 G BE C0 L"
IF symbolt(i) = 4 THEN DRAW "C4 E F C14 L1 C4 BD E C2 BR5 NL3 NH NG C4 BL8 L BR C0 U BL2 C8 G BE C0 L"
IF symbolt(i) = 5 THEN DRAW "BD2 C8 F BU C0 L1 BM-2,-1 C12 R BG C0 U2 C4 U1 BD C0 L BU3 BR2 C14 R BR C4 G H E"
IF symbolt(i) = 8 THEN DRAW "C3 BL H2 BD2 E2 BM+3,-1 E R F D G3 R3"
IF symbolt(i) = 9 THEN DRAW "BM-1,-4 C14 R4 D L4 G R4 D L4 G R7 G L3 D R2 G L2 D R G L D"
IF symbolt(i) = 10 THEN DRAW "BL2 R4 U1 L4 BM-5,1 C2 NR3 NF NE BR14 NL3 NG NH"
IF symbolt(i) = 11 THEN DRAW "BL2 R4 U1 L4 BM-2,1 C4 NL3 NG NH BR8 NR3 NF NE"
IF symbolt(i) = 12 THEN DRAW "C3 BM-3,-1 R2 H D2 BR4 F R E U H L2 U2 R3"
IF symbolt(i) = 13 THEN DRAW "C3 BM-3,-1 R2 H D2 BR4 BU4 R F D G L D3 BE C0 L"
IF stime(i) < 5 THEN LINE (symbolx(i) - 10, symboly(i) - 10)-(symbolx(i) + 10, symboly(i) + 10), 0, BF
END IF
NEXT i
IF lasthit& = 1 THEN c& = 1
IF lasthit& = 2 THEN c& = 4
IF lasthit& = 3 THEN c& = 2
IF lasthit& = 4 THEN c& = 6
LINE (lx1&, ly1&)-(lx2&, ly2&), c&, B
LINE (lx1& + 1, ly1& + 1)-(lx2& - 1, ly2& - 1), c& + 8, B
IF p1& = 0 OR p2& = 0 THEN GOTO skip1:
LINE (3, 3)-(3, 60), 1
LINE (3, 3)-(60, 3), 1
LINE (60, 3)-(3, 60), 1
LINE (4, 4)-(4, 59), 1
LINE (4, 4)-(59, 4), 1
LINE (59, 3)-(3, 59), 1
skip1:
IF p4& = 0 OR p1& = 0 THEN GOTO skip2:
LINE (477, 3)-(477, 60), 14
LINE (477, 3)-(420, 3), 14
LINE (420, 3)-(477, 60), 14
LINE (476, 4)-(476, 59), 14
LINE (476, 4)-(421, 4), 14
LINE (421, 3)-(477, 59), 14
skip2:
IF p2& = 0 OR p3& = 0 THEN GOTO skip3:
LINE (3, 477)-(3, 420), 4
LINE (3, 477)-(60, 477), 4
LINE (60, 477)-(3, 420), 4
LINE (4, 476)-(4, 421), 4
LINE (4, 476)-(59, 476), 4
LINE (59, 477)-(3, 421), 4
skip3:
IF p3& = 0 OR p4& = 0 THEN GOTO skip4:
LINE (477, 477)-(477, 420), 2
LINE (477, 477)-(420, 477), 2
LINE (420, 477)-(477, 420), 2
LINE (476, 476)-(476, 421), 2
LINE (476, 476)-(421, 476), 2
LINE (421, 477)-(477, 421), 2
skip4:
IF p1& > 0 THEN LINE (p1pad& - (p1size& - 1), 5)-(p1pad& + (p1size& - 1), 7), 1, BF
IF p1hyper& = 0 AND p1& > 0 THEN LINE (p1pad& - p1size&, 4)-(p1pad& + p1size&, 8), 1, B
IF p1& > 0 THEN LINE (p1pad& - (p1size& + 1), 3)-(61, 9), 0, BF
IF p1& > 0 THEN LINE (p1pad& + (p1size& + 1), 3)-(419, 9), 0, BF
IF p2& > 0 THEN LINE (5, p2pad& - (p2size& - 1))-(7, p2pad& + (p2size& - 1)), 4, BF
IF p2hyper& = 0 AND p2& > 0 THEN LINE (4, p2pad& - p2size&)-(8, p2pad& + p2size&), 4, B
IF p2& > 0 THEN LINE (3, p2pad& - (p2size& + 1))-(9, 61), 0, BF
IF p2& > 0 THEN LINE (3, p2pad& + (p2size& + 1))-(9, 419), 0, BF
IF p3& > 0 THEN LINE (p3pad& - (p3size& - 1), 475)-(p3pad& + (p3size& - 1), 473), 2, BF
IF p3hyper& = 0 AND p3& > 0 THEN LINE (p3pad& - p3size&, 476)-(p3pad& + p3size&, 472), 2, B
IF p3& > 0 THEN LINE (p3pad& - (p3size& + 1), 477)-(61, 471), 0, BF
IF p3& > 0 THEN LINE (p3pad& + (p3size& + 1), 477)-(419, 471), 0, BF
IF p4& > 0 THEN LINE (475, p4pad& - (p4size& - 1))-(473, p4pad& + (p4size& - 1)), 14, BF
IF p4hyper& = 0 AND p4& > 0 THEN LINE (476, p4pad& - p4size&)-(472, p4pad& + p4size&), 14, B
IF p4& > 0 THEN LINE (477, p4pad& - (p4size& + 1))-(471, 61), 0, BF
IF p4& > 0 THEN LINE (477, p4pad& + (p4size& + 1))-(471, 419), 0, BF
a$ = INKEY$
IF p1com& = 1 THEN GOTO player1
IF a$ = "v" THEN p1dir& = 2
IF a$ = "b" THEN p1dir& = 0
IF a$ = "n" THEN p1dir& = 1
IF a$ = "g" AND serve& = 1 THEN GOSUB serve
p2:
IF p2com& = 1 THEN GOTO player2
IF a$ = "q" THEN p2dir& = 2
IF a$ = "a" THEN p2dir& = 0
IF a$ = "z" THEN p2dir& = 1
IF a$ = "s" AND serve& = 2 THEN GOSUB serve
p3:
IF p3com& = 1 THEN GOTO player3
IF a$ = CHR$(0) + "K" THEN p3dir& = 2
IF a$ = CHR$(0) + "P" THEN p3dir& = 0
IF a$ = CHR$(0) + "M" THEN p3dir& = 1
IF a$ = CHR$(0) + "H" AND serve& = 3 THEN GOSUB serve
p4:
IF p4com& = 1 THEN GOTO player4
IF a$ = "]" THEN p4dir& = 2
IF a$ = "'" THEN p4dir& = 0
IF a$ = "/" THEN p4dir& = 1
IF a$ = ";" AND serve& = 4 THEN GOSUB serve
finish:
IF a$ = "=" THEN delay& = delay& - 100
IF a$ = "-" THEN delay& = delay& + 100
IF a$ = CHR$(27) THEN
subtract& = TIMER
GOTO start
ELSEIF a$ = "p" THEN
subtract& = TIMER
COLOR 3
LOCATE 29, 29
PRINT "PAUSED"
SLEEP
DO
c$ = INKEY$
LOOP UNTIL c$ <> "~"
CLS
subtract& = TIMER - subtract&
startedd& = startedd& + subtract&
END IF
IF serve& = 5 THEN GOSUB centerserve
LOOP
universal:
IF p1& > 1 THEN p1ac2& = INT(RND * (p1ac& * 2)) - p1ac&
IF p2& > 1 THEN p2ac2& = INT(RND * (p2ac& * 2)) - p2ac&
IF p3& > 1 THEN p3ac2& = INT(RND * (p3ac& * 2)) - p3ac&
IF p4& > 1 THEN p4ac2& = INT(RND * (p4ac& * 2)) - p4ac&
combo& = combo& + 1
scombo& = 50
p1serve& = 0
p2serve& = 0
p3serve& = 0
p4serve& = 0
SOUND 700, .1
RETURN
serve:
IF serve& = 1 THEN
IF p1dir& = 1 THEN
xs& = 8
ys& = 8
ELSEIF p1dir& = 2 THEN
xs& = -8
ys& = 8
END IF
IF p1dir& = 0 THEN ys& = 8
p1serve& = p1serve& + 1
ELSEIF serve& = 2 THEN
IF p2dir& = 1 THEN
xs& = 8
ys& = 8
ELSEIF p2dir& = 2 THEN
xs& = 8
ys& = -8
END IF
IF p2dir& = 0 THEN xs& = 8
p2serve& = p2serve& + 1
ELSEIF serve& = 3 THEN
IF p3dir& = 1 THEN
xs& = 8
ys& = -8
ELSEIF p3dir& = 2 THEN
xs& = -8
ys& = -8
END IF
IF p3dir& = 0 THEN ys& = -8
p3serve& = p3serve& + 1
ELSEIF serve& = 4 THEN
IF p4dir& = 1 THEN
xs& = -8
ys& = 8
ELSEIF p4dir& = 2 THEN
xs& = -8
ys& = -8
END IF
IF p4dir& = 0 THEN xs& = -8
p4serve& = p4serve& + 1
END IF
serve& = 0
scombo& = 50
RETURN
centerserve:
x& = 240
y& = 240
xs& = 0
ys& = 0
center& = center& + 1
IF center& = 25 THEN
scombo& = 50
combo& = 5
ELSEIF center& = 50 THEN
scombo& = 50
combo& = 4
ELSEIF center& = 75 THEN
scombo& = 50
combo& = 3
ELSEIF center& = 100 THEN
scombo& = 50
combo& = 2
ELSEIF center& = 125 THEN
scombo& = 50
combo& = 1
ELSEIF center& = 150 THEN
retry:
xs& = INT(RND * 17) - 8
ys& = INT(RND * 17) - 8
IF xs& = 0 AND ys& = 0 THEN GOTO retry
IF xs& = 0 AND p1& = 0 AND p3& = 0 THEN GOTO retry
IF ys& = 0 AND p2& = 0 AND p4& = 0 THEN GOTO retry
DO
lasthit& = INT(RND * 4) + 1
IF lasthit& = 1 AND p1& > 0 THEN EXIT DO
IF lasthit& = 2 AND p2& > 0 THEN EXIT DO
IF last7hit& = 3 AND p3& > 0 THEN EXIT DO
IF lasthit& = 4 AND p4& > 0 THEN EXIT DO
LOOP
serve& = 0
center& = 0
END IF
RETURN
score1:
IF scoret& < 4 THEN combo& = 1
IF scoret& = 1 OR scoret& = 4 THEN
IF lasthit& = 2 THEN p2descore& = p2descore& + combo&
IF lasthit& = 3 THEN p3descore& = p3descore& + combo&
IF lasthit& = 4 THEN p4descore& = p4descore& + combo&
IF lasthit& = 1 THEN p1descore& = p1descore& - combo&
ELSEIF scoret& = 2 OR scoret& = 5 THEN
p2descore& = p2descore& + combo&
p3descore& = p3descore& + combo&
p4descore& = p4descore& + combo&
ELSEIF scoret& = 3 OR scoret& = 6 THEN
p1descore& = p1descore& - combo&
END IF
IF lasthit& = 2 THEN p2scores& = p2scores& + 1
IF lasthit& = 3 THEN p3scores& = p3scores& + 1
IF lasthit& = 4 THEN p4scores& = p4scores& + 1
IF lose& = 1 THEN
p1desize& = 25
p1speed& = 4 + pad& * 3
END IF
GOSUB score
RETURN
score2:
IF scoret& < 4 THEN combo& = 1
IF scoret& = 1 OR scoret& = 4 THEN
IF lasthit& = 2 THEN p2descore& = p2descore& - combo&
IF lasthit& = 3 THEN p3descore& = p3descore& + combo&
IF lasthit& = 4 THEN p4descore& = p4descore& + combo&
IF lasthit& = 1 THEN p1descore& = p1descore& + combo&
ELSEIF scoret& = 2 OR scoret& = 5 THEN
p1descore& = p1descore& + combo&
p3descore& = p3descore& + combo&
p4descore& = p4descore& + combo&
ELSEIF scoret& = 3 OR scoret& = 6 THEN
p2descore& = p2descore& - combo&
END IF
IF lasthit& = 1 THEN p1scores& = p1scores& + 1
IF lasthit& = 3 THEN p3scores& = p3scores& + 1
IF lasthit& = 4 THEN p4scores& = p4scores& + 1
IF lose& = 1 THEN
p2desize& = 25
p2speed& = 4 + pad& * 3
END IF
GOSUB score
RETURN
score3:
IF scoret& < 4 THEN combo& = 1
IF scoret& = 1 OR scoret& = 4 THEN
IF lasthit& = 2 THEN p2descore& = p2descore& + combo&
IF lasthit& = 3 THEN p3descore& = p3descore& - combo&
IF lasthit& = 4 THEN p4descore& = p4descore& + combo&
IF lasthit& = 1 THEN p1descore& = p1descore& + combo&
ELSEIF scoret& = 2 OR scoret& = 5 THEN
p1descore& = p1descore& + combo&
p2descore& = p2descore& + combo&
p4descore& = p4descore& + combo&
ELSEIF scoret& = 3 OR scoret& = 6 THEN
p3descore& = p3descore& - combo&
END IF
IF lasthit& = 1 THEN p1scores& = p1scores& + 1
IF lasthit& = 2 THEN p2scores& = p2scores& + 1
IF lasthit& = 4 THEN p4scores& = p4scores& + 1
IF lose& = 1 THEN
p3desize& = 25
p3speed& = 4 + pad& * 3
END IF
GOSUB score
RETURN
score4:
IF scoret& < 4 THEN combo& = 1
IF scoret& = 1 OR scoret& = 4 THEN
IF lasthit& = 2 THEN p2descore& = p2descore& + combo&
IF lasthit& = 3 THEN p3descore& = p3descore& + combo&
IF lasthit& = 4 THEN p4descore& = p4descore& - combo&
IF lasthit& = 1 THEN p1descore& = p1descore& + combo&
ELSEIF scoret& = 2 OR scoret& = 5 THEN
p1descore& = p1descore& + combo&
p2descore& = p2descore& + combo&
p3descore& = p3descore& + combo&
ELSEIF scoret& = 3 OR scoret& = 6 THEN
p4descore& = p4descore& - combo&
END IF
IF lasthit& = 1 THEN p1scores& = p1scores& + 1
IF lasthit& = 2 THEN p2scores& = p2scores& + 1
IF lasthit& = 3 THEN p3scores& = p3scores& + 1
IF lose& = 1 THEN
p4desize& = 25
p4speed& = 4 + pad& * 3
END IF
GOSUB score
RETURN
score:
combo& = 1
scombo& = 0
serve& = lasthit&
IF p1serve& >= 5 OR p2serve& >= 5 OR p3serve& >= 5 OR p4serve& >= 5 THEN
p1serve& = 0
p2serve& = 0
p3serve& = 0
p4serve& = 0
serve& = 5
GOSUB centerserve
END IF
IF serve& = 1 THEN
x& = p1pad&
y& = 13
ELSEIF serve& = 2 THEN
x& = 13
y& = p2pad&
ELSEIF serve& = 3 THEN
x& = p3pad&
y& = 467
ELSEIF serve& = 4 THEN
x& = 467
y& = p4pad&
END IF
waits& = 100
GOSUB draww
IF p1& > 1 THEN p1ac2& = INT(RND * (p1ac& * 2)) - p1ac&
IF p2& > 1 THEN p2ac2& = INT(RND * (p2ac& * 2)) - p2ac&
IF p3& > 1 THEN p3ac2& = INT(RND * (p3ac& * 2)) - p3ac&
IF p4& > 1 THEN p4ac2& = INT(RND * (p4ac& * 2)) - p4ac&
COLOR 0: LOCATE 30, 30: PRINT combo&
RETURN
draww:
VIEW
p1loc& = 1
p2loc& = 1
p3loc& = 1
p4loc& = 1
IF p1descore& <= p2descore& THEN p1loc& = p1loc& + 1
IF p1descore& <= p3descore& THEN p1loc& = p1loc& + 1
IF p1descore& <= p4descore& THEN p1loc& = p1loc& + 1
IF p2descore& <= p1descore& THEN p2loc& = p2loc& + 1
IF p2descore& <= p3descore& THEN p2loc& = p2loc& + 1
IF p2descore& <= p4descore& THEN p2loc& = p2loc& + 1
IF p3descore& <= p1descore& THEN p3loc& = p3loc& + 1
IF p3descore& <= p2descore& THEN p3loc& = p3loc& + 1
IF p3descore& <= p4descore& THEN p3loc& = p3loc& + 1
IF p4descore& <= p1descore& THEN p4loc& = p4loc& + 1
IF p4descore& <= p2descore& THEN p4loc& = p4loc& + 1
IF p4descore& <= p3descore& THEN p4loc& = p4loc& + 1
DO
IF p1loc& = p2loc& OR p1loc& = p3loc& OR p1loc& = p4loc& THEN p1loc& = p1loc& - 1
IF p2loc& = p1loc& OR p2loc& = p3loc& OR p2loc& = p4loc& THEN p2loc& = p2loc& - 1
IF p3loc& = p1loc& OR p3loc& = p2loc& OR p3loc& = p4loc& THEN p3loc& = p3loc& - 1
IF p4loc& = p1loc& OR p4loc& = p2loc& OR p4loc& = p3loc& THEN p4loc& = p4loc& - 1
LOOP UNTIL (p1loc& <> p2loc& AND p2loc& <> p3loc& AND p3loc& <> p4loc& AND p4loc& <> p1loc& AND p2loc& <> p4loc& AND p3loc& <> p1loc&)
LOCATE ((p1loc& - 1) * 15) + 2, 62
COLOR 1
IF p1& = 0 THEN COLOR 0
PRINT "Score:"; p1score&; " "
LOCATE ((p1loc& - 1) * 15) + 3, 62
IF p1com& = 1 THEN
IF p1& = 2 THEN PRINT "Computer Easiest"
IF p1& = 3 THEN PRINT "Computer Easy "
IF p1& = 4 THEN PRINT "Computer Medium "
IF p1& = 5 THEN PRINT "Computer Hard "
IF p1& = 6 THEN PRINT "Computer Hardest"
LOCATE ((p1loc& - 1) * 15) + 4, 62: PRINT " "
LOCATE ((p1loc& - 1) * 15) + 5, 62: PRINT " "
LOCATE ((p1loc& - 1) * 15) + 6, 62: PRINT " "
LOCATE ((p1loc& - 1) * 15) + 7, 62: PRINT " "
LOCATE ((p1loc& - 1) * 15) + 8, 62: PRINT " "
END IF
IF p1com& = 1 THEN GOTO ppp2
PRINT "Human "
LOCATE ((p1loc& - 1) * 15) + 4, 62: PRINT "Keys:"
LOCATE ((p1loc& - 1) * 15) + 5, 62: PRINT "G -Serve "
LOCATE ((p1loc& - 1) * 15) + 6, 62: PRINT "V -Left "
LOCATE ((p1loc& - 1) * 15) + 7, 62: PRINT "B -Stop "
LOCATE ((p1loc& - 1) * 15) + 8, 62: PRINT "N -Right "
ppp2:
LOCATE ((p2loc& - 1) * 15) + 2, 62
COLOR 4
IF p2& = 0 THEN COLOR 0
PRINT "Score:"; p2score&; " "
LOCATE ((p2loc& - 1) * 15) + 3, 62
IF p2com& = 1 THEN
IF p2& = 2 THEN PRINT "Computer Easiest"
IF p2& = 3 THEN PRINT "Computer Easy "
IF p2& = 4 THEN PRINT "Computer Medium "
IF p2& = 5 THEN PRINT "Computer Hard "
IF p2& = 6 THEN PRINT "Computer Hardest"
LOCATE ((p2loc& - 1) * 15) + 4, 62: PRINT " "
LOCATE ((p2loc& - 1) * 15) + 5, 62: PRINT " "
LOCATE ((p2loc& - 1) * 15) + 6, 62: PRINT " "
LOCATE ((p2loc& - 1) * 15) + 7, 62: PRINT " "
LOCATE ((p2loc& - 1) * 15) + 8, 62: PRINT " "
END IF
IF p2com& = 1 THEN GOTO ppp3
PRINT "Human "
LOCATE ((p2loc& - 1) * 15) + 4, 62: PRINT "Keys:"
LOCATE ((p2loc& - 1) * 15) + 5, 62: PRINT "S -Serve "
LOCATE ((p2loc& - 1) * 15) + 6, 62: PRINT "Q -Up "
LOCATE ((p2loc& - 1) * 15) + 7, 62: PRINT "A -Stop "
LOCATE ((p2loc& - 1) * 15) + 8, 62: PRINT "Z -Down "
ppp3:
LOCATE ((p3loc& - 1) * 15) + 2, 62
COLOR 2
IF p3& = 0 THEN COLOR 0
PRINT "Score:"; p3score&; " "
LOCATE ((p3loc& - 1) * 15) + 3, 62
IF p3com& = 1 THEN
IF p3& = 2 THEN PRINT "Computer Easiest"
IF p3& = 3 THEN PRINT "Computer Easy "
IF p3& = 4 THEN PRINT "Computer Medium "
IF p3& = 5 THEN PRINT "Computer Hard "
IF p3& = 6 THEN PRINT "Computer Hardest"
LOCATE ((p3loc& - 1) * 15) + 4, 62: PRINT " "
LOCATE ((p3loc& - 1) * 15) + 5, 62: PRINT " "
LOCATE ((p3loc& - 1) * 15) + 6, 62: PRINT " "
LOCATE ((p3loc& - 1) * 15) + 7, 62: PRINT " "
LOCATE ((p3loc& - 1) * 15) + 8, 62: PRINT " "
END IF
IF p3com& = 1 THEN GOTO ppp4
PRINT "Human "
LOCATE ((p3loc& - 1) * 15) + 4, 62: PRINT "Keys:"
LOCATE ((p3loc& - 1) * 15) + 5, 62: PRINT CHR$(24); " -Serve "
LOCATE ((p3loc& - 1) * 15) + 6, 62: PRINT CHR$(17); " -Left "
LOCATE ((p3loc& - 1) * 15) + 7, 62: PRINT CHR$(25); " -Stop "
LOCATE ((p3loc& - 1) * 15) + 8, 62: PRINT CHR$(16); " -Right "
ppp4:
LOCATE ((p4loc& - 1) * 15) + 2, 62
COLOR 14
IF p4& = 0 THEN COLOR 0
PRINT "Score:"; p4score&; " "
LOCATE ((p4loc& - 1) * 15) + 3, 62
IF p4com& = 1 THEN
IF p4& = 2 THEN PRINT "Computer Easiest"
IF p4& = 3 THEN PRINT "Computer Easy "
IF p4& = 4 THEN PRINT "Computer Medium "
IF p4& = 5 THEN PRINT "Computer Hard "
IF p4& = 6 THEN PRINT "Computer Hardest"
LOCATE ((p4loc& - 1) * 15) + 4, 62: PRINT " "
LOCATE ((p4loc& - 1) * 15) + 5, 62: PRINT " "
LOCATE ((p4loc& - 1) * 15) + 6, 62: PRINT " "
LOCATE ((p4loc& - 1) * 15) + 7, 62: PRINT " "
LOCATE ((p4loc& - 1) * 15) + 8, 62: PRINT " "
END IF
IF p4com& = 1 THEN GOTO fff
PRINT "Human "
LOCATE ((p4loc& - 1) * 15) + 4, 62: PRINT "Keys:"
LOCATE ((p4loc& - 1) * 15) + 5, 62: PRINT "; -Serve "
LOCATE ((p4loc& - 1) * 15) + 6, 62: PRINT "] -Up "
LOCATE ((p4loc& - 1) * 15) + 7, 62: PRINT "' -Stop "
LOCATE ((p4loc& - 1) * 15) + 8, 62: PRINT "/ -Down "
fff:
col1& = 0
col2& = 0
col3& = 0
col4& = 0
IF p1& > 0 THEN
IF p1loc& = 1 THEN col1& = 1
IF p1loc& = 2 THEN col2& = 1
IF p1loc& = 3 THEN col3& = 1
IF p1loc& = 4 THEN col4& = 1
END IF
IF p2& > 0 THEN
IF p2loc& = 1 THEN col1& = 4
IF p2loc& = 2 THEN col2& = 4
IF p2loc& = 3 THEN col3& = 4
IF p2loc& = 4 THEN col4& = 4
END IF
IF p3& > 0 THEN
IF p3loc& = 1 THEN col1& = 2
IF p3loc& = 2 THEN col2& = 2
IF p3loc& = 3 THEN col3& = 2
IF p3loc& = 4 THEN col4& = 2
END IF
IF p4& > 0 THEN
IF p4loc& = 1 THEN col1& = 6
IF p4loc& = 2 THEN col2& = 6
IF p4loc& = 3 THEN col3& = 6
IF p4loc& = 4 THEN col4& = 6
END IF
LINE (481, 0)-(639, 118), col1&, B
IF col1& = 0 THEN col1& = -8
LINE (482, 1)-(638, 117), col1& + 8, B
LINE (481, 121)-(639, 239), col2&, B
IF col2& = 0 THEN col2& = -8
LINE (482, 122)-(638, 238), col2& + 8, B
LINE (481, 241)-(639, 359), col3&, B
IF col3& = 0 THEN col3& = -8
LINE (482, 242)-(638, 358), col3& + 8, B
LINE (481, 361)-(639, 479), col4&, B
IF col4& = 0 THEN col4& = -8
LINE (482, 362)-(638, 478), col4& + 8, B
VIEW SCREEN (lx1& - 1, ly1& - 1)-(lx2&, ly2&)
RETURN
item:
startitem:
FOR j = 1 TO 30
IF stime(j) = 0 THEN symbol& = j
NEXT j
item& = INT(RND * 9) + 1
symbolt(symbol&) = item&
IF item& = 1 THEN
IF it2& = 0 THEN GOTO startitem
IF lasthit& = 1 THEN p1speed& = p1speed& - 1
IF p1speed& < 1 THEN p1speed& = 1
IF lasthit& = 2 THEN p2speed& = p2speed& - 1
IF p2speed& < 1 THEN p2speed& = 1
IF lasthit& = 3 THEN p3speed& = p3speed& - 1
IF p3speed& < 1 THEN p3speed& = 1
IF lasthit& = 4 THEN p4speed& = p4speed& - 1
IF p4speed& < 1 THEN p4speed& = 1
ELSEIF item& = 2 THEN
IF it2& = 0 THEN GOTO startitem
IF lasthit& = 1 THEN p1speed& = p1speed& + 1
IF p1speed& > 30 THEN p1speed& = 30
IF lasthit& = 2 THEN p2speed& = p2speed& + 1
IF p2speed& > 30 THEN p2speed& = 30
IF lasthit& = 3 THEN p3speed& = p3speed& + 1
IF p3speed& > 30 THEN p3speed& = 30
IF lasthit& = 4 THEN p4speed& = p4speed& + 1
IF p4speed& > 30 THEN p4speed& = 30
ELSEIF item& = 3 THEN
IF it1& = 0 THEN GOTO startitem
a& = a& - 1
IF a& < 1 THEN a& = 1
ELSEIF item& = 4 THEN
IF it1& = 0 THEN GOTO startitem
a& = a& + 1
IF a& > 4 THEN a& = 4
ELSEIF item& = 5 THEN
IF it4& = 0 THEN GOTO startitem
rann:
DO
xs& = INT(RND * 17) - 8
ys& = INT(RND * 17) - 8
LOOP UNTIL (xs& <> 0 OR ys& <> 0)
IF xs& = 0 AND p1& = 0 AND p3& = 0 THEN GOTO rann
IF ys& = 0 AND p2& = 0 AND p4& = 0 THEN GOTO rann
ELSEIF item& = 6 THEN
IF it3& = 0 THEN GOTO startitem
rand& = INT(RND * 18) + 1
padsize& = (rand& * 5) + 10
IF lasthit& = 1 THEN
IF padsize& > p1desize& THEN symbolt(symbol&) = 10 ELSE symbolt(symbol&) = 11
p1desize& = padsize&
ELSEIF lasthit& = 2 THEN
IF padsize& > p2desize& THEN symbolt(symbol&) = 10 ELSE symbolt(symbol&) = 11
p2desize& = padsize&
ELSEIF lasthit& = 3 THEN
IF padsize& > p3desize& THEN symbolt(symbol&) = 10 ELSE symbolt(symbol&) = 11
p3desize& = padsize&
ELSEIF lasthit& = 4 THEN
IF padsize& > p4desize& THEN symbolt(symbol&) = 10 ELSE symbolt(symbol&) = 11
p4desize& = padsize&
END IF
ELSEIF item& = 7 THEN
IF INT(RND * 5) + 1 = 1 THEN
IF it8& = 0 THEN GOTO startitem
points& = INT(RND * 50) + 1
symbolt(symbol&) = 13
ELSE
IF it5& = 0 THEN GOTO startitem
symbolt(symbol&) = 12
points& = 5
END IF
IF lasthit& = 1 THEN p1descore& = p1descore& + points&
IF lasthit& = 2 THEN p2descore& = p2descore& + points&
IF lasthit& = 3 THEN p3descore& = p3descore& + points&
IF lasthit& = 4 THEN p4descore& = p4descore& + points&
GOSUB draww
ELSEIF item& = 8 THEN
IF it6& = 0 THEN GOTO startitem
IF INT(RND * 5) + 1 <> 1 THEN GOTO startitem
IF combo& < 50000 THEN combo& = combo& * 2
scombo& = 50
ELSEIF item& = 9 THEN
IF it7& = 0 THEN GOTO startitem
IF INT(RND * 3) + 1 <> 1 THEN GOTO startitem
CLS
IF lasthit& = 1 THEN p1hyper& = INT(RND * 1001) + 500
IF lasthit& = 2 THEN p2hyper& = INT(RND * 1001) + 500
IF lasthit& = 3 THEN p3hyper& = INT(RND * 1001) + 500
IF lasthit& = 4 THEN p4hyper& = INT(RND * 1001) + 500
END IF
iitemx& = itemx(1, hit&)
iitemy& = itemy(1, hit&)
symbolx(symbol&) = iitemx&
symboly(symbol&) = iitemy&
IF re& = 1 THEN
symbolx(symbol&) = iitemx& + 10
symboly(symbol&) = iitemy& + 10
END IF
stime(symbol&) = 100
IF lasthit& = 1 THEN symbolc(symbol&) = 1
IF lasthit& = 2 THEN symbolc(symbol&) = 4
IF lasthit& = 3 THEN symbolc(symbol&) = 2
IF lasthit& = 4 THEN symbolc(symbol&) = 14
LINE (iitemx& - 2, iitemy& - 2)-(iitemx& + 2, iitemy& + 2), 0, BF
IF re& = 1 THEN RETURN
iitemx& = INT(RND * 340) + 70
iitemy& = INT(RND * 340) + 70
itemx(1, hit&) = iitemx&
itemy(1, hit&) = iitemy&
RETURN
player1:
IF y& < p1ai& AND ys& < 0 THEN
p1des& = x& - xs& * (y& / ys&)
p1des& = p1des& + p1ac2&
ELSE
IF serve& = 0 AND p1& > 2 THEN p1des& = 240 ELSE p1des& = p1pad&
END IF
IF serve& = 2 AND p1& > 3 THEN
p1des& = p2pad&
ELSEIF serve& = 3 AND p1& > 3 THEN
p1des& = p3pad&
ELSEIF serve& = 4 AND p1& > 3 THEN
p1des& = 480 - p4pad&
END IF
IF serve& = 1 THEN
IF p2descore& < p4descore& THEN p1des& = 0
IF p4descore& < p2descore& THEN p1des& = 480
IF p2descore& = p4descore& THEN p1des& = 240
END IF
IF p1des& > p1pad& THEN p1dir& = 1
IF p1des& < p1pad& THEN p1dir& = 2
IF p1des& > (p1pad& - p1speed&) AND p1des& < (p1pad& + p1speed&) THEN p1dir& = 0
IF waits& > 0 THEN waits& = waits& - 1
IF serve& = 1 AND waits& = 0 THEN GOSUB serve
GOTO p2
player2:
IF x& < p2ai& AND xs& < 0 THEN
p2des& = y& - ys& * (x& / xs&)
p2des& = p2des& + p2ac2&
ELSE
IF serve& = 0 AND p2& > 2 THEN p2des& = 240 ELSE p2des& = p2pad&
END IF
IF serve& = 1 AND p2& > 3 THEN
p2des& = p1pad&
ELSEIF serve& = 3 AND p2& > 3 THEN
p2des& = 480 - p3pad&
ELSEIF serve& = 4 AND p2& > 3 THEN
p2des& = p4pad&
END IF
IF serve& = 2 THEN
IF p1descore& < p3descore& THEN p2des& = 0
IF p3descore& < p1descore& THEN p2des& = 480
IF p1descore& = p3descore& THEN p2des& = 240
END IF
IF p2des& > p2pad& THEN p2dir& = 1
IF p2des& < p2pad& THEN p2dir& = 2
IF p2des& > (p2pad& - p2speed&) AND p2des& < (p2pad& + p2speed&) THEN p2dir& = 0
IF waits& > 0 THEN waits& = waits& - 1
IF serve& = 2 AND waits& = 0 THEN GOSUB serve
GOTO p3
player3:
IF y& > (480 - p3ai&) AND ys& > 0 THEN
p3des& = x& - xs& * ((480 - y&) / -ys&)
p3des& = p3des& + p3ac2&
ELSE
IF serve& = 0 AND p3& > 2 THEN p3des& = 240 ELSE p3des& = p3pad&
END IF
IF serve& = 1 AND p3& > 3 THEN
p3des& = p1pad&
ELSEIF serve& = 2 AND p3& > 3 THEN
p3des& = 480 - p2pad&
ELSEIF serve& = 4 AND p3& > 3 THEN
p3des& = p4pad&
END IF
IF serve& = 3 THEN
IF p2descore& < p4descore& THEN p3des& = 0
IF p4descore& < p2descore& THEN p3des& = 480
IF p2descore& = p4descore& THEN p3des& = 240
END IF
IF p3des& > p3pad& THEN p3dir& = 1
IF p3des& < p3pad& THEN p3dir& = 2
IF p3des& > (p3pad& - p3speed&) AND p3des& < (p3pad& + p3speed&) THEN p3dir& = 0
IF waits& > 0 THEN waits& = waits& - 1
IF serve& = 3 AND waits& = 0 THEN GOSUB serve
GOTO p4
player4:
IF x& > (480 - p4ai&) AND xs& > 0 THEN
p4des& = y& - ys& * ((480 - x&) / -xs&)
p4des& = p4des& + p4ac2&
ELSE
IF serve& = 0 AND p4& > 2 THEN p4des& = 240 ELSE p4des& = p4pad&
END IF
IF serve& = 1 AND p4& > 3 THEN
p4des& = 480 - p1pad&
ELSEIF serve& = 2 AND p4& > 3 THEN
p4des& = p2pad&
ELSEIF serve& = 3 AND p4& > 3 THEN
p4des& = p3pad&
END IF
IF serve& = 4 THEN
IF p1descore& < p3descore& THEN p4des& = 0
IF p3descore& < p1descore& THEN p4des& = 480
IF p1descore& = p3descore& THEN p4des& = 240
END IF
IF p4des& > p4pad& THEN p4dir& = 1
IF p4des& < p4pad& THEN p4dir& = 2
IF p4des& > (p4pad& - p4speed&) AND p4des& < (p4pad& + p4speed&) THEN p4dir& = 0
IF waits& > 0 THEN waits& = waits& - 1
IF serve& = 4 AND waits& = 0 THEN GOSUB serve
GOTO finish
title:
WIDTH 80, 30
COLOR 4
LOCATE 1, 1: COLOR 8: PRINT "4 Player Pong"
FOR x = 0 TO 64
FOR y = 0 TO 15
LINE ((x * 5) + 160, (y * 5) + 160)-((x * 5) + 165, (y * 5) + 165), POINT(x, y) / 2, B
NEXT y
NEXT x
FOR x = 0 TO 40
FOR y = 0 TO 15
LINE ((x * 5) + 240, (y * 5) + 235)-((x * 5) + 245, (y * 5) + 240), POINT(x + 72, y) / 2, B
NEXT y
NEXT x
LOCATE 1, 1
PRINT " "
LINE (153, 149)-(481, 316), 14, B
LINE (152, 148)-(482, 317), 6, B
COLOR 3: LOCATE 21, 31: PRINT " By Matthew "
COLOR 11
LINE (640, 327)-(353, 327)
LINE (0, 327)-(269, 327)
LINE (269, 334)-(269, 320)
LINE (353, 334)-(353, 320)
LINE (353, 334)-(269, 334)
LINE (353, 320)-(269, 320)
DO
changeword& = changeword& + 1
IF changeword& = 2000 THEN changeword& = 0
IF changeword& < 1001 THEN COLOR 1
IF changeword& > 1000 THEN COLOR 0
LOCATE 27, 34: PRINT "Press any key"
a$ = INKEY$
LOOP UNTIL (a$ <> "")
CLS
RETURN
theend:
VIEW
started& = 0
CLS
p1pl& = 1
p2pl& = 1
p3pl& = 1
p4pl& = 1
IF p1descore& <= p2descore& OR p1& = 0 THEN p1pl& = p1pl& + 1
IF p1descore& <= p3descore& OR p1& = 0 THEN p1pl& = p1pl& + 1
IF p1descore& <= p4descore& OR p1& = 0 THEN p1pl& = p1pl& + 1
IF p2descore& <= p1descore& OR p2& = 0 THEN p2pl& = p2pl& + 1
IF p2descore& <= p3descore& OR p2& = 0 THEN p2pl& = p2pl& + 1
IF p2descore& <= p4descore& OR p2& = 0 THEN p2pl& = p2pl& + 1
IF p3descore& <= p1descore& OR p3& = 0 THEN p3pl& = p3pl& + 1
IF p3descore& <= p2descore& OR p3& = 0 THEN p3pl& = p3pl& + 1
IF p3descore& <= p4descore& OR p3& = 0 THEN p3pl& = p3pl& + 1
IF p4descore& <= p1descore& OR p4& = 0 THEN p4pl& = p4pl& + 1
IF p4descore& <= p2descore& OR p4& = 0 THEN p4pl& = p4pl& + 1
IF p4descore& <= p3descore& OR p4& = 0 THEN p4pl& = p4pl& + 1
tie& = 0
IF p1pl& = 1 THEN
IF p1pl& = p2pl& OR p1pl& = p3pl& OR p1pl& = p4pl& THEN tie& = 1
END IF
IF p2pl& = 1 THEN
IF p2pl& = p3pl& OR p2pl& = p4pl& THEN tie& = 1
END IF
IF p3pl& = 1 THEN
IF p3pl& = p4pl& THEN tie& = 1
END IF
IF p1pl& = 1 THEN co1& = 1
IF p2pl& = 1 THEN co1& = 4
IF p3pl& = 1 THEN co1& = 2
IF p4pl& = 1 THEN co1& = 14
IF tie& = 1 THEN co1& = 15
IF p1pl& = 1 THEN co2& = 9
IF p2pl& = 1 THEN co2& = 12
IF p3pl& = 1 THEN co2& = 10
IF p4pl& = 1 THEN co2& = 6
IF tie& = 1 THEN co2& = 8
co& = co1&
ch& = 0
FOR i = 1 TO 240
ch& = ch& + 1
IF ch& = 10 AND co& = co1& THEN
co& = co2&
ELSEIF ch& = 10 AND co& = co2& THEN
co& = co1&
END IF
IF ch& = 10 THEN ch& = 0
LINE (320 - i, 240 - i)-(320 + i, 240 + i), co&, B
NEXT i
FOR i = 1 TO 100
FOR d = 1 TO 500
NEXT d
LINE (320 - i, 240)-(320 + i, 240), 15
LINE (319 - i, 239)-(321 + i, 241), 7, B
NEXT i
FOR i = 1 TO 100
FOR d = 1 TO 200
NEXT d
LINE (220, 240 - i)-(420, 240 + i), 15, B
LINE (221, 241 - i)-(419, 239 + i), 7, B
LINE (219, 239 - i)-(421, 241 + i), 7, B
LINE (222, 242 - i)-(418, 238 + i), 0, BF
NEXT i
COLOR 3: LOCATE 20, 36: PRINT "Game Stats"
LINE (279, 160)-(359, 160), 3
COLOR co1&
LOCATE 22, 30
IF tie& = 1 THEN PRINT " Tie Game " ELSE IF p1pl& = 1 THEN PRINT "Player 1 is the winner!" ELSE IF p2pl& = 1 THEN PRINT "Player 2 is the winner!" ELSE IF p3pl& = 1 THEN PRINT "Player 3 is the winner!" ELSE IF p4pl& = 1 THEN PRINT _
"Player 4 is the winner!"
IF p1& > 1 THEN p1t$ = "Com " ELSE IF p1& = 1 THEN p1t$ = "Human" ELSE IF p1& = 0 THEN p1t$ = "Off "
IF p2& > 1 THEN p2t$ = "Com " ELSE IF p2& = 1 THEN p2t$ = "Human" ELSE IF p2& = 0 THEN p2t$ = "Off "
IF p3& > 1 THEN p3t$ = "Com " ELSE IF p3& = 1 THEN p3t$ = "Human" ELSE IF p3& = 0 THEN p3t$ = "Off "
IF p4& > 1 THEN p4t$ = "Com " ELSE IF p4& = 1 THEN p4t$ = "Human" ELSE IF p4& = 0 THEN p4t$ = "Off "
DO
IF p1pl& = p2pl& OR p1pl& = p3pl& OR p1pl& = p4pl& THEN p1pl& = p1pl& - 1
IF p2pl& = p1pl& OR p2pl& = p3pl& OR p2pl& = p4pl& THEN p2pl& = p2pl& - 1
IF p3pl& = p1pl& OR p3pl& = p2pl& OR p3pl& = p4pl& THEN p3pl& = p3pl& - 1
IF p4pl& = p1pl& OR p4pl& = p2pl& OR p4pl& = p3pl& THEN p4pl& = p4pl& - 1
LOOP UNTIL (p1pl& <> p2pl& AND p2pl& <> p3pl& AND p3pl& <> p4pl& AND p4pl& <> p1pl& AND p2pl& <> p4pl& AND p3pl& <> p1pl&)
IF p1& = 0 THEN p1descore& = 0
IF p2& = 0 THEN p2descore& = 0
IF p3& = 0 THEN p3descore& = 0
IF p4& = 0 THEN p4descore& = 0
COLOR 3: LOCATE 24, 30: PRINT "Player Score Goals"
COLOR 1: LOCATE 24 + p1pl&, 31: PRINT "P1-"; p1t$
LOCATE 24 + p1pl&, 39: PRINT p1descore&
LOCATE 24 + p1pl&, 46: PRINT p1scores&
COLOR 4: LOCATE 24 + p2pl&, 31: PRINT "P2-"; p2t$
LOCATE 24 + p2pl&, 39: PRINT p2descore&
LOCATE 24 + p2pl&, 46: PRINT p2scores&
COLOR 2: LOCATE 24 + p3pl&, 31: PRINT "P3-"; p3t$
LOCATE 24 + p3pl&, 39: PRINT p3descore&
LOCATE 24 + p3pl&, 46: PRINT p3scores&
COLOR 14: LOCATE 24 + p4pl&, 31: PRINT "P4-"; p4t$
LOCATE 24 + p4pl&, 39: PRINT p4descore&
LOCATE 24 + p4pl&, 46: PRINT p4scores&
gts& = finished& - startedd&
DO
IF gts& >= 60 THEN
gts& = gts& - 60
gtm& = gtm& + 1
ELSE
EXIT DO
END IF
LOOP
DO
IF gtm& >= 60 THEN
gtm& = gtm& - 60
gth& = gth& + 1
ELSE
EXIT DO
END IF
LOOP
COLOR 3: LOCATE 30, 30: PRINT "Game time:"
LOCATE 31, 30: IF gts& > -1 THEN PRINT gts&; "sec" ELSE PRINT "Error"
LOCATE 31, 30: IF gtm& > 0 THEN PRINT gtm&; "min"; gts&; "sec"
LOCATE 31, 30: IF gth& > 0 THEN PRINT gth&; "hr"; gtm&; "min"; gts&; "sec"
LOCATE 33, 31: PRINT "ontinue"
COLOR 11: LOCATE 33, 30: PRINT "C"
DO WHILE a$ <> "c"
a$ = INKEY$
SWAP co1&, co2&
FOR i = 102 TO 240
ch& = ch& + 1
IF ch& = 10 AND co& = co1& THEN
co& = co2&
ELSEIF ch& = 10 AND co& = co2& THEN
co& = co1&
END IF
IF ch& = 10 THEN ch& = 0
LINE (320 - i, 240 - i)-(320 + i, 240 + i), co&, B
NEXT i
LOOP
gts& = 0
gtm& = 0
gth& = 0
GOTO start
switch:
COLOR 5
a$ = INKEY$
IF a$ = CHR$(0) + "P" THEN
arrow& = arrow& + 1
ELSEIF a$ = CHR$(0) + "H" THEN
arrow& = arrow& - 1
ELSEIF a$ = " " THEN
IF arrow& = 1 THEN it1& = it1& + 1
IF arrow& = 2 THEN it2& = it2& + 1
IF arrow& = 3 THEN it3& = it3& + 1
IF arrow& = 4 THEN it4& = it4& + 1
IF arrow& = 5 THEN it5& = it5& + 1
IF arrow& = 6 THEN it8& = it8& + 1
IF arrow& = 7 THEN it6& = it6& + 1
IF arrow& = 8 THEN it7& = it7& + 1
END IF
IF it1& = 2 THEN it1& = 0
IF it2& = 2 THEN it2& = 0
IF it3& = 2 THEN it3& = 0
IF it4& = 2 THEN it4& = 0
IF it5& = 2 THEN it5& = 0
IF it6& = 2 THEN it6& = 0
IF it7& = 2 THEN it7& = 0
IF it8& = 2 THEN it8& = 0
IF arrow& = 9 THEN arrow& = 1
IF arrow& = 0 THEN arrow& = 8
DRAW "BM583,130 C4 E F C14 L1 C4 BD E BR2 NR3 NE NF BL5 L BR C0 U BL2 C8 G BE C0 L"
DRAW "BM583,134 C4 E F C14 L1 C4 BD E C2 BR5 NL3 NH NG C4 BL8 L BR C0 U BL2 C8 G BE C0 L"
DRAW "BM578,138 C1 M-2,0 R4 U L4 BL2 C4 D BL2 U Bl2 D BR12 NE NR3 NF"
DRAW "BM578,142 C1 M-2,0 R4 U L4 BL2 C2 D BL2 U Bl2 D BR15 NH NL3 NG"
DRAW "BM585,146 C1 BL2 R4 U1 L4 BM-5,1 C2 NR3 NF NE BR14 NL3 NG NH"
DRAW "BM585,150 C1 BL2 R4 U1 L4 BM-2,1 C4 NL3 NG NH BR8 NR3 NF NE"
DRAW "BM574,156 BD2 C8 F BU C0 L1 BM-2,-1 C12 R BG C0 U2 C4 U1 BD C0 L BU3 BR2 C14 R BR C4 G H E"
DRAW "BM583,164 C3 BM-3,-1 R2 H D2 BR4 F R E U H L2 U2 R3"
DRAW "BM574,172 C3 BM-3,-1 R2 H D2 BR4 BU4 R F D G L D3 BE C0 L"
DRAW "BM583,180 C3 BL H2 BD2 E2 BM+3,-1 E R F D G3 R3"
DRAW "BM575,187 BM-1,-4 C14 R4 D L4 G R4 D L4 G R7 G L3 D R2 G L2 D R G L D"
COLOR 4
IF arrow& = 1 THEN COLOR 12 ELSE COLOR 4
LOCATE 17, 42
PRINT "Change Ball Speed -"
IF arrow& = 2 THEN COLOR 12 ELSE COLOR 4
LOCATE 18, 42
PRINT "Change Pad Speed -"
IF arrow& = 3 THEN COLOR 12 ELSE COLOR 4
LOCATE 19, 42
PRINT "Change Pad Size -"
IF arrow& = 4 THEN COLOR 12 ELSE COLOR 4
LOCATE 20, 42
PRINT "Change Ball Direction -"
IF arrow& = 5 THEN COLOR 12 ELSE COLOR 4
LOCATE 21, 42
PRINT "5 Point Bonus -"
IF arrow& = 6 THEN COLOR 12 ELSE COLOR 4
LOCATE 22, 42
PRINT "Major Point Bonus -"
IF arrow& = 7 THEN COLOR 12 ELSE COLOR 4
LOCATE 23, 42
PRINT "Combo Double -"
IF arrow& = 8 THEN COLOR 12 ELSE COLOR 4
LOCATE 24, 42
PRINT "Hyper Mode -"
IF it1& = 1 THEN COLOR 12 ELSE COLOR 4
LOCATE 17, 66
PRINT "On "
IF it1& = 0 THEN COLOR 12 ELSE COLOR 4
LOCATE 17, 69
PRINT "Off"
IF it2& = 1 THEN COLOR 12 ELSE COLOR 4
LOCATE 18, 66
PRINT "On "
IF it2& = 0 THEN COLOR 12 ELSE COLOR 4
LOCATE 18, 69
PRINT "Off"
IF it3& = 1 THEN COLOR 12 ELSE COLOR 4
LOCATE 19, 66
PRINT "On "
IF it3& = 0 THEN COLOR 12 ELSE COLOR 4
LOCATE 19, 69
PRINT "Off"
IF it4& = 1 THEN COLOR 12 ELSE COLOR 4
LOCATE 20, 66
PRINT "On "
IF it4& = 0 THEN COLOR 12 ELSE COLOR 4
LOCATE 20, 69
PRINT "Off"
IF it5& = 1 THEN COLOR 12 ELSE COLOR 4
LOCATE 21, 66
PRINT "On "
IF it5& = 0 THEN COLOR 12 ELSE COLOR 4
LOCATE 21, 69
PRINT "Off"
IF it8& = 1 THEN COLOR 12 ELSE COLOR 4
LOCATE 22, 66
PRINT "On "
IF it8& = 0 THEN COLOR 12 ELSE COLOR 4
LOCATE 22, 69
PRINT "Off"
IF it6& = 1 THEN COLOR 12 ELSE COLOR 4
LOCATE 23, 66
PRINT "On "
IF it6& = 0 THEN COLOR 12 ELSE COLOR 4
LOCATE 23, 69
PRINT "Off"
IF it7& = 1 THEN COLOR 12 ELSE COLOR 4
LOCATE 24, 66
PRINT "On "
IF it7& = 0 THEN COLOR 12 ELSE COLOR 4
LOCATE 24, 69
PRINT "Off"
IF a$ = "d" THEN
CLS
switch& = 0
END IF
GOTO skip
start:
IF it& = 0 THEN it& = 15
fic& = INT(RND * 5) + 1
IF p1r& = 1 THEN p1m& = p1&
IF p2r& = 1 THEN p2m& = p2&
IF p3r& = 1 THEN p3m& = p3&
IF p4r& = 1 THEN p4m& = p4&
IF p1r& = 1 THEN p1& = 7
IF p2r& = 1 THEN p2& = 7
IF p3r& = 1 THEN p3& = 7
IF p4r& = 1 THEN p4& = 7
VIEW
CLS
DO
COLOR 14: LOCATE 1, 15: PRINT "Game Setup"
LINE (111, 8)-(191, 8)
COLOR 2: LOCATE 3, 15: PRINT "Players ("
LOCATE 3, 31: PRINT ")"
COLOR 10: LOCATE 3, 24: PRINT "1,2,3,4"
COLOR 1: LOCATE 4, 16: PRINT "P1 -"
LOCATE 4, 21
IF p1& = 0 THEN PRINT "Off "
IF p1& = 1 THEN PRINT "Human "
IF p1& = 2 THEN PRINT "Computer (Easiest)"
IF p1& = 3 THEN PRINT "Computer (Easy) "
IF p1& = 4 THEN PRINT "Computer (Medium) "
IF p1& = 5 THEN PRINT "Computer (Hard) "
IF p1& = 6 THEN PRINT "Computer (Hardest)"
IF p1& = 7 THEN PRINT "Computer (Random) "
COLOR 4: LOCATE 5, 16: PRINT "P2 -"
LOCATE 5, 21
IF p2& = 0 THEN PRINT "Off "
IF p2& = 1 THEN PRINT "Human "
IF p2& = 2 THEN PRINT "Computer (Easiest)"
IF p2& = 3 THEN PRINT "Computer (Easy) "
IF p2& = 4 THEN PRINT "Computer (Medium) "
IF p2& = 5 THEN PRINT "Computer (Hard) "
IF p2& = 6 THEN PRINT "Computer (Hardest)"
IF p2& = 7 THEN PRINT "Computer (Random) "
COLOR 2: LOCATE 6, 16: PRINT "P3 -"
LOCATE 6, 21
IF p3& = 0 THEN PRINT "Off "
IF p3& = 1 THEN PRINT "Human "
IF p3& = 2 THEN PRINT "Computer (Easiest)"
IF p3& = 3 THEN PRINT "Computer (Easy) "
IF p3& = 4 THEN PRINT "Computer (Medium) "
IF p3& = 5 THEN PRINT "Computer (Hard) "
IF p3& = 6 THEN PRINT "Computer (Hardest)"
IF p3& = 7 THEN PRINT "Computer (Random) "
COLOR 14: LOCATE 7, 16: PRINT "P4 -"
LOCATE 7, 21
IF p4& = 0 THEN PRINT "Off "
IF p4& = 1 THEN PRINT "Human "
IF p4& = 2 THEN PRINT "Computer (Easiest)"
IF p4& = 3 THEN PRINT "Computer (Easy) "
IF p4& = 4 THEN PRINT "Computer (Medium) "
IF p4& = 5 THEN PRINT "Computer (Hard) "
IF p4& = 6 THEN PRINT "Computer (Hardest)"
IF p4& = 7 THEN PRINT "Computer (Random) "
COLOR 4
IF items& = 1 THEN
COLOR 12: LOCATE 9, 48: PRINT "l"
COLOR 4: LOCATE 9, 40: PRINT "Items Re"
LOCATE 9, 49: PRINT "ocate when Hit"
LOCATE 10, 41
IF re& = 1 THEN PRINT "No "
IF re& = 0 THEN PRINT "Yes"
COLOR 12: LOCATE 12, 45: PRINT "U"
COLOR 4: LOCATE 12, 40: PRINT "Lose "
LOCATE 12, 46: PRINT "pgrades when Scored On"
LOCATE 13, 41
IF lose& = 0 THEN PRINT "No "
IF lose& = 1 THEN PRINT "Yes"
LOCATE 15, 40: PRINT "Item Switch"
COLOR 12
IF switch& = 1 THEN COLOR 4
LOCATE 15, 46: PRINT "w"
IF switch& = 1 THEN
COLOR 4: LOCATE 15, 51: PRINT "(Press "
LOCATE 15, 60: PRINT "when done)"
COLOR 12: LOCATE 15, 58: PRINT "D"
END IF
END IF
COLOR 12: LOCATE 3, 40: PRINT "I"
COLOR 4: LOCATE 3, 41: PRINT "tems"
LOCATE 4, 41
IF items& = 1 THEN PRINT "On "
IF items& = 0 THEN PRINT "Off"
IF items& = 1 THEN
COLOR 12: LOCATE 6, 40: PRINT "N"
COLOR 4: LOCATE 6, 41: PRINT "umber of Items"
LOCATE 7, 40: PRINT it&
END IF
COLOR 11: LOCATE 9, 15: PRINT "B"
COLOR 3: LOCATE 9, 16: PRINT "all Speed"
LOCATE 10, 16
IF speed& = 1 THEN PRINT "Normal "
IF speed& = 2 THEN PRINT "Fast "
IF speed& = 3 THEN PRINT "Very Fast"
IF speed& = 4 THEN PRINT "Too Fast "
COLOR 11: LOCATE 12, 15: PRINT "P"
COLOR 3: LOCATE 12, 16: PRINT "ad Speed"
LOCATE 13, 16
IF pad& = 1 THEN PRINT "Normal "
IF pad& = 2 THEN PRINT "Fast "
IF pad& = 3 THEN PRINT "Very Fast"
IF pad& = 4 THEN PRINT "Too Fast "
COLOR 9: LOCATE 15, 23: PRINT "M"
COLOR 1: LOCATE 15, 15: PRINT "Scoring"
LOCATE 15, 24: PRINT "ode"
LOCATE 16, 16
IF scoret& = 1 THEN PRINT "Basic "
IF scoret& = 2 THEN PRINT "All Gain "
IF scoret& = 3 THEN PRINT "One Lose "
IF scoret& = 4 THEN PRINT "Combo "
IF scoret& = 5 THEN PRINT "All Gain (Combo)"
IF scoret& = 6 THEN PRINT "One Lose (Combo)"
IF scoret& = 3 OR scoret& = 6 THEN
COLOR 1: LOCATE 18, 15: PRINT "Start S"
LOCATE 19, 15: PRINT max&
LOCATE 18, 23: PRINT "ore 0 = No End "
COLOR 9: LOCATE 18, 22: PRINT "c"
ELSE
COLOR 1: LOCATE 18, 15: PRINT "Ma"
LOCATE 19, 15: PRINT max&
LOCATE 18, 19: PRINT "Score 0 = Unlimited"
COLOR 9: LOCATE 18, 17: PRINT "x "
END IF
COLOR 13: LOCATE 15, 2: PRINT "S"
LOCATE 17, 2: PRINT "R"
LOCATE 19, 2: PRINT "Q"
COLOR 5: LOCATE 15, 3: PRINT "tart"
LOCATE 17, 3: PRINT "eturn"
LOCATE 19, 3: PRINT "uit"
o& = 0
IF p1& > 0 THEN o& = o& + 1
IF p2& > 0 THEN o& = o& + 1
IF p3& > 0 THEN o& = o& + 1
IF p4& > 0 THEN o& = o& + 1
IF switch& = 1 THEN GOTO switch
a$ = INKEY$
IF a$ = "q" THEN END
IF a$ = "r" THEN EXIT DO
IF a$ = "s" THEN
started& = 0
EXIT DO
ELSEIF a$ = "l" THEN
re& = -re& + 1
ELSEIF a$ = "u" THEN
lose& = -lose& + 1
ELSEIF a$ = "x" OR a$ = "c" THEN
LOCATE 19, 16
PRINT " "
COLOR 1
LOCATE 19, 16
INPUT "", max&
IF max& > 500000 THEN max& = 500000
CLS
ELSEIF a$ = "m" THEN
scoret& = scoret& + 1
IF scoret& = 7 THEN scoret& = 1
ELSEIF a$ = "w" AND items& = 1 THEN
arrow& = 1
switch& = 1
ELSEIF a$ = "b" THEN
speed& = speed& + 1
IF speed& > 4 THEN speed& = 1
ELSEIF a$ = "p" THEN
pad& = pad& + 1
IF pad& = 5 THEN pad& = 1
ELSEIF a$ = "n" THEN
it& = it& + 1
IF it& > 15 THEN it& = 1: CLS
ELSEIF a$ = "i" THEN
items& = -items& + 1
CLS
ELSEIF a$ = "1" THEN
p1& = p1& + 1
IF p1& = 8 AND o& > 1 THEN p1& = 0
IF p1& = 8 AND o& < 2 THEN p1& = 1
started& = 0
CLS
ELSEIF a$ = "2" THEN
p2& = p2& + 1
IF p2& = 8 AND o& > 1 THEN p2& = 0
IF p2& = 8 AND o& < 2 THEN p2& = 1
started& = 0
CLS
ELSEIF a$ = "3" THEN
p3& = p3& + 1
IF p3& = 8 AND o& > 1 THEN p3& = 0
IF p3& = 8 AND o& < 2 THEN p3& = 1
started& = 0
CLS
ELSEIF a$ = "4" THEN
p4& = p4& + 1
IF p4& = 8 AND o& > 1 THEN p4& = 0
IF p4& = 8 AND o& < 2 THEN p4& = 1
started& = 0
CLS
END IF
skip:
VIEW SCREEN (0, 0)-(102, 102)
IF items& = 1 THEN
FOR i = 1 TO it&
IF ABS(ballx& - demoitemx(1, i)) < 2 AND ABS(bally& - demoitemy(1, i)) < 2 AND re& = 0 THEN
CLS
demoitemx(1, i) = INT(RND * 74) + 14
demoitemy(1, i) = INT(RND * 74) + 14
END IF
LINE (demoitemx(1, i), demoitemy(1, i))-(demoitemx(1, i) + 1, demoitemy(1, i) + 1), fic&, BF
NEXT i
END IF
x1& = 0
y1& = 0
x2& = 102
y2& = 102
IF p1& = 0 THEN y1& = 12
IF p2& = 0 THEN x1& = 12
IF p3& = 0 THEN y2& = 90
IF p4& = 0 THEN x2& = 90
LINE (x1&, y1&)-(x2&, y2&), co&, B
IF p1& > 0 AND p2& > 0 THEN
LINE (2, 2)-(2, 14), 1
LINE (2, 2)-(14, 2), 1
LINE (14, 2)-(2, 14), 1
END IF
IF p2& > 0 AND p3& > 0 THEN
LINE (2, 100)-(2, 88), 4
LINE (2, 100)-(14, 100), 4
LINE (14, 100)-(2, 88), 4
END IF
IF p3& > 0 AND p4& > 0 THEN
LINE (100, 100)-(100, 88), 2
LINE (100, 100)-(88, 100), 2
LINE (88, 100)-(100, 88), 2
END IF
IF p4& > 0 AND p1& > 0 THEN
LINE (100, 2)-(100, 14), 14
LINE (100, 2)-(88, 2), 14
LINE (88, 2)-(100, 14), 14
END IF
IF p1& > 0 THEN LINE (pad1& - 5, 2)-(pad1& + 5, 3), 1, BF
IF p2& > 0 THEN LINE (2, pad2& - 5)-(3, pad2& + 5), 4, BF
IF p3& > 0 THEN LINE (pad3& - 5, 100)-(pad3& + 5, 99), 2, BF
IF p4& > 0 THEN LINE (100, pad4& - 5)-(99, pad4& + 5), 14, BF
IF p1& > 0 THEN LINE (pad1& - 6, 2)-(15, 4), 0, BF
IF p1& > 0 THEN LINE (pad1& + 6, 2)-(87, 4), 0, BF
IF p2& > 0 THEN LINE (2, pad2& - 6)-(4, 15), 0, BF
IF p2& > 0 THEN LINE (2, pad2& + 6)-(4, 87), 0, BF
IF p3& > 0 THEN LINE (pad3& - 6, 100)-(15, 98), 0, BF
IF p3& > 0 THEN LINE (pad3& + 6, 100)-(87, 98), 0, BF
IF p4& > 0 THEN LINE (100, pad4& - 6)-(98, 15), 0, BF
IF p4& > 0 THEN LINE (100, pad4& + 6)-(98, 87), 0, BF
IF (bally& < 15 OR bally& > 87) AND ballxs& = 0 THEN ballxs& = 1
IF (ballx& < 15 OR ballx& > 87) AND ballys& = 0 THEN ballys& = 1
IF ballx& < 14 AND bally& < 14 THEN
SWAP ballxs&, ballys&
ballxs& = -ballxs&
ballys& = -ballys&
IF ABS(ballxs&) = ABS(ballys&) THEN ballxs& = ballxs& + 1
LINE (ballx& - 1, bally& - 1)-(ballx&, bally&), 0, B
bally& = 13
ballx& = 13
SOUND 750, .1
END IF
IF ballx& < 14 AND bally& > 88 THEN
SWAP ballxs&, ballys&
IF ABS(ballxs&) = ABS(ballys&) THEN ballxs& = ballxs& + 1
LINE (ballx& - 1, bally& - 1)-(ballx&, bally&), 0, B
bally& = 89
ballx& = 13
SOUND 750, .1
END IF
IF ballx& > 88 AND bally& < 14 THEN
SWAP ballxs&, ballys&
IF ABS(ballxs&) = ABS(ballys&) THEN ballxs& = ballxs& + 1
LINE (ballx& - 1, bally& - 1)-(ballx&, bally&), 0, B
bally& = 13
ballx& = 89
SOUND 750, .1
END IF
IF ballx& > 88 AND bally& > 88 THEN
SWAP ballxs&, ballys&
ballxs& = -ballxs&
ballys& = -ballys&
IF ABS(ballxs&) = ABS(ballys&) THEN ballxs& = ballxs& + 1
LINE (ballx& - 1, bally& - 1)-(ballx&, bally&), 0, B
bally& = 89
ballx& = 89
SOUND 750, .1
END IF
LINE (ballx& - 1, bally& - 1)-(ballx&, bally&), 0, B
PSET (ballx2&, bally2&), 0
PSET (ballx3&, bally3&), 0
PSET (ballx4&, bally4&), 0
bally4& = bally3&
bally3& = bally2&
bally2& = bally&
ballx4& = ballx3&
ballx3& = ballx2&
ballx2& = ballx&
bally& = bally& + ballys&
ballx& = ballx& + ballxs&
LINE (ballx& - 1, bally& - 1)-(ballx&, bally&), 4, B
PSET (ballx&, bally&), 14
PSET (ballx2&, bally2&), 12
PSET (ballx3&, bally3&), 12
PSET (ballx4&, bally4&), 8
IF bally& < 1 OR (bally& < 14 AND p1& = 0) THEN
IF p1& > 0 THEN co& = 1
ballys& = INT(RND * 3) + 1
SOUND 500, .1
ELSEIF ballx& < 1 OR (ballx& < 14 AND p2& = 0) THEN
IF p2& > 0 THEN co& = 4
ballxs& = INT(RND * 3) + 1
SOUND 500, .1
ELSEIF ballx& > 100 OR (ballx& > 88 AND p4& = 0) THEN
IF p4& > 0 THEN co& = 14
ballxs& = -(INT(RND * 3) + 1)
SOUND 500, .1
ELSEIF bally& > 100 OR (bally& > 88 AND p3& = 0) THEN
IF p3& > 0 THEN co& = 2
ballys& = -(INT(RND * 3) + 1)
SOUND 500, .1
END IF
IF ballys& < 0 THEN
IF ballx& > pad1& THEN pad1& = pad1& + 3
IF ballx& < pad1& THEN pad1& = pad1& - 3
IF pad1& > 82 THEN pad1& = 82
IF pad1& < 20 THEN pad1& = 20
END IF
IF ballxs& < 0 THEN
IF bally& > pad2& THEN pad2& = pad2& + 3
IF bally& < pad2& THEN pad2& = pad2& - 3
IF pad2& > 82 THEN pad2& = 82
IF pad2& < 20 THEN pad2& = 20
END IF
IF ballys& > 0 THEN
IF ballx& > pad3& THEN pad3& = pad3& + 3
IF ballx& < pad3& THEN pad3& = pad3& - 3
IF pad3& > 82 THEN pad3& = 82
IF pad3& < 20 THEN pad3& = 20
END IF
IF ballxs& > 0 THEN
IF bally& > pad4& THEN pad4& = pad4& + 3
IF bally& < pad4& THEN pad4& = pad4& - 3
IF pad4& > 82 THEN pad4& = 82
IF pad4& < 20 THEN pad4& = 20
END IF
VIEW
LOOP
IF (scoret& = 3 OR scoret& = 6) AND o& = 1 THEN GOTO start
IF p1& = 7 THEN p1r& = 1 ELSE p1r& = 0
IF p2& = 7 THEN p2r& = 1 ELSE p2r& = 0
IF p3& = 7 THEN p3r& = 1 ELSE p3r& = 0
IF p4& = 7 THEN p4r& = 1 ELSE p4r& = 0
IF started& = 1 THEN
IF p1r& = 1 THEN p1& = p1m&
IF p2r& = 1 THEN p2& = p2m&
IF p3r& = 1 THEN p3& = p3m&
IF p4r& = 1 THEN p4& = p4m&
END IF
IF started& = 1 THEN startedd& = startedd& + subtract&
IF started& = 0 THEN GOTO new ELSE GOTO restart