1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-07-08 05:35:16 +00:00
qb64/programs/samples/pete/pongtennis/tennis.bas

1969 lines
40 KiB
QBasic

CHDIR ".\programs\samples\pete\pongtennis"
DECLARE SUB challengeMatchDay ()
DECLARE SUB challengeMode ()
DECLARE SUB matchDayMenu ()
DECLARE SUB calender ()
DECLARE SUB career ()
DECLARE SUB worldRankings ()
DECLARE SUB backWallRally ()
DECLARE SUB training ()
DECLARE SUB targetPractice ()
DECLARE SUB tournament ()
DECLARE SUB preMatchDay ()
DECLARE SUB options ()
DECLARE SUB matchDay ()
DECLARE SUB getInfo ()
DECLARE FUNCTION rand! (c!)
DIM SHARED points(2)
DIM SHARED realPoints$(2)
DIM SHARED games(2)
DIM SHARED sets(2)
DIM SHARED forename$(32)
DIM SHARED surname$(32)
DIM SHARED speedRating(32)
DIM SHARED speed(32)
DIM SHARED power(32)
DIM SHARED accuracy(32)
DIM SHARED colour$(15)
DIM SHARED winners(2)
DIM SHARED aces(2)
DIM SHARED faults(2)
DIM SHARED errors(2)
DIM SHARED player(33)
DIM SHARED flag(32)
DIM SHARED in(32)
DIM SHARED tournamentPlayer(33)
DIM SHARED round$(5)
DIM SHARED arp(32)
DIM SHARED rankPoints(10, 32)
DIM SHARED minorRating(32)
DIM SHARED rank(32)
DIM SHARED month$(12)
DIM SHARED days(12)
DIM SHARED day(24)
DIM SHARED month(24)
DIM SHARED qual(34)
DIM SHARED tourney$(34)
DIM SHARED qual$(34)
DIM SHARED entrants(6)
DIM SHARED rounds(34)
DIM SHARED cPlayerNumber(2, 6)
DIM SHARED cGames(2, 6)
DIM SHARED cSets(2, 6)
DIM SHARED cGamesToWin(6)
DIM SHARED cSetsToWin(6)
DIM SHARED cAmount(6)
DIM SHARED cDescription$(6, 6)
DIM SHARED cCompleted(6)
COMMON SHARED challenge, day, month, year, userDone, winner, userColour, opponentColour, forename$, surname$, l$, r$, u$, d$, opponent, gamesToWin, setsToWin, gamesToWin2
SCREEN 0
CALL getInfo
gamesToWin = 6
gamesToWin2 = 2
setsToWin = 1
userColour = 11
opponentColour = 4
colour$(3) = "CYAN"
colour$(4) = "RED"
colour$(5) = "PURPLE"
colour$(6) = "ORANGE"
colour$(7) = "WHITE"
colour$(8) = "GREY"
colour$(9) = "TURQOUISE"
colour$(10) = "GREEN"
colour$(11) = "BLUE"
colour$(12) = "LIGHT RED"
colour$(13) = "PINK"
colour$(14) = "YELLOW"
colour$(15) = "BRIGHT WHITE"
name$ = "USER"
COLOR 15, 2
CLS
LOCATE 16, 32
PRINT "PONG TENNIS"
COLOR 7, 2
LOCATE 20, 30
PRINT "BY ALEX BEIGHTON"
DO
LOOP UNTIL INKEY$ = CHR$(13)
COLOR 15, 2
CLS
LOCATE 16, 32
PRINT "KEY CONFIG"
LOCATE 20, 25
COLOR 7, 2
PRINT "PLEASE ENTER THE "; CHR$(34); "LEFT"; CHR$(34); " KEY"
DO
l$ = INKEY$
LOOP UNTIL l$ <> ""
COLOR 15, 2
CLS
LOCATE 16, 32
PRINT "KEY CONFIG"
LOCATE 20, 24
COLOR 7, 2
PRINT "PLEASE ENTER THE "; CHR$(34); "RIGHT"; CHR$(34); " KEY"
DO
r$ = INKEY$
LOOP UNTIL r$ <> ""
COLOR 15, 2
CLS
LOCATE 16, 32
PRINT "KEY CONFIG"
LOCATE 20, 26
COLOR 7, 2
PRINT "PLEASE ENTER THE "; CHR$(34); "UP"; CHR$(34); " KEY"
DO
u$ = INKEY$
LOOP UNTIL u$ <> ""
COLOR 15, 2
CLS
LOCATE 16, 32
PRINT "KEY CONFIG"
LOCATE 20, 25
COLOR 7, 2
PRINT "PLEASE ENTER THE "; CHR$(34); "DOWN"; CHR$(34); " KEY"
DO
d$ = INKEY$
LOOP UNTIL d$ <> ""
COLOR 15, 2
CLS
LOCATE 16, 32
PRINT "PLEASE ENTER YOUR FORENAME"
LOCATE 20, 32
COLOR 7, 2
PRINT "MY FORENAME IS"
DO
LOCATE 20, 48
INPUT forename$
LOOP UNTIL forename$ <> ""
COLOR 15, 2
CLS
LOCATE 16, 32
PRINT "PLEASE ENTER YOUR SURNAME"
LOCATE 20, 32
COLOR 7, 2
PRINT "MY SURNAME IS"
DO
LOCATE 20, 48
INPUT surname$
LOOP UNTIL surname$ <> ""
210 COLOR 15, 2
CLS
os = 1
180 COLOR 15, 2
LOCATE 16, 28
PRINT "SELECT GAME MODE"
IF os = 1 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 20, 28
PRINT "PLAY NOW"
IF os = 2 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 22, 28
PRINT "TOURNAMENT MODE"
IF os = 3 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 24, 28
PRINT "CAREER MODE"
IF os = 4 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 26, 28
PRINT "TRAINING MODE"
IF os = 5 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 28, 28
PRINT "CHALLENGE MODE"
IF os = 6 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 30, 28
PRINT "QUIT GAME"
170 SELECT CASE INKEY$
CASE IS = u$
os = os - 1
IF os < 1 THEN os = 6
GOTO 180
CASE IS = d$
os = os + 1
IF os > 6 THEN os = 1
GOTO 180
CASE IS = CHR$(13)
CASE ELSE
GOTO 170
END SELECT
challenge = 0
SELECT CASE os
CASE IS = 1
CALL preMatchDay
GOTO 180
CASE IS = 2
CALL tournament
GOTO 180
CASE IS = 3
REM CALL career
GOTO 180
CASE IS = 4
CALL training
GOTO 180
CASE IS = 5
CALL challengeMode
GOTO 180
CASE IS = 6
COLOR 7, 2
END
END SELECT
SUB backWallRally
450 a = 37
b = 32
y = 36
z = 40
t = 0
w = 26
x = 1
bs = 1
rally = 0
rallyEnd = 0
alreadyAdded = 0
hitTarget = 0
totals = 0
speed = 0
direction = 1
directionbs = 1
COLOR 15, 2
CLS
LOCATE 16, 24
PRINT "BACK WALL RALLY"
COLOR 7, 2
LOCATE 20, 24
PRINT "Rally with the back wall as many times as"
LOCATE 21, 24
PRINT "possible before the ball goes out, or you"
LOCATE 22, 24
PRINT "miss the ball. Every time the ball makes"
LOCATE 23, 24
PRINT "contact with the back wall, you will score"
LOCATE 24, 24
PRINT "a point. The higher your score at the end,"
LOCATE 25, 24
PRINT "the better. However, it's not that simple -"
LOCATE 26, 24
PRINT "throughout your rally, a solid object will"
LOCATE 27, 24
PRINT "be bouncing between the walls and gradally"
LOCATE 28, 24
PRINT "increasing in size. Hit the object and it's"
LOCATE 29, 24
PRINT "game over!"
COLOR 15, 2
LOCATE 33, 24
PRINT "PRESS RETURN TO BEGIN BACK WALL RALLY"
DO
LOOP UNTIL INKEY$ = CHR$(13)
alreadyAdded = 0
COLOR 15, 2
CLS
FOR i = 2 TO 20
COLOR 1, 15
LOCATE 2, i
PRINT CHR$(219)
NEXT i
COLOR 15, 1
LOCATE 2, 2
PRINT surname$
tt = TIMER
DO
LOCATE 2, 21
COLOR 15, 3
PRINT " RALLY "; rally
FOR i = 1 TO bs
COLOR 14, 2
LOCATE w, x + i
PRINT CHR$(219)
NEXT i
FOR i = 1 TO 17
COLOR userColour, 2
IF b + i > 0 AND b + i < 81 THEN LOCATE a, b + i
COLOR 6, 2
IF b + i > 0 AND b + i < 81 THEN PRINT CHR$(223)
NEXT i
LOCATE y, z
COLOR 10, 2
PRINT "o"
SELECT CASE INKEY$
CASE IS = l$
FOR i = 1 TO 17
IF b + i > 0 AND b + i < 81 THEN LOCATE a, b + i
COLOR 6, 2
IF b + i > 0 AND b + i < 81 THEN PRINT " "
NEXT i
b = b - 1
CASE IS = r$
FOR i = 1 TO 17
IF b + i > 0 AND b + i < 81 THEN LOCATE a, b + i
COLOR 6, 2
IF b + i > 0 AND b + i < 81 THEN PRINT " "
NEXT i
b = b + 1
CASE IS = CHR$(13)
IF y < b - 3 THEN GOTO 350
IF y > b + 13 THEN GOTO 350
IF speed <> 0 THEN GOTO 350
speed = 10
ballHit = b - z + 9
directionlr = 1
FOR i = 1 TO 8
IF ballHit = -i THEN directionlr = 2
IF ballHit = -i THEN ballHit = i
NEXT i
350 END SELECT
IF speed = 0 THEN GOTO 360
moveAmount = (15 - speed) / 200
moveAmount = INT(moveAmount * 1000) / 1000
SELECT CASE TIMER
CASE IS >= t + moveAmount
COLOR 2, 2
LOCATE y, z
PRINT " "
IF direction = 1 THEN y = y - 1 ELSE y = y + 1
t = TIMER
totals = totals + 1
END SELECT
SELECT CASE totals
CASE IS >= changeAmount
COLOR 2, 2
LOCATE y, z
PRINT " "
IF directionlr = 1 THEN z = z - 1 ELSE z = z + 1
IF ballHit = 8 AND directionlr = 1 AND serveHit <> 1 THEN z = z - 1
IF ballHit = 8 AND directionlr = 2 AND serveHit <> 1 THEN z = z + 1
totals = 0
END SELECT
hit1 = 0
IF y = a - 1 AND z <= b + 17 AND z >= b + 1 THEN hit1 = 1 ELSE hit1 = 0
SELECT CASE hit1
CASE IS = 1
ballHit = b - z + 9
directionlr = 1
direction = 1
FOR i = 1 TO 8
IF ballHit = -i THEN directionlr = 2
IF ballHit = -i THEN ballHit = i
NEXT i
END SELECT
360 IF ballHit = 0 THEN changeAmount = 100 ELSE changeAmount = 9 - ballHit
IF b < -12 THEN b = -12
IF b > 75 THEN b = 75
IF d < -12 THEN d = -12
IF d > 75 THEN d = 75
IF y < 1 THEN y = 1
IF y > 47 THEN y = 47
IF z < 1 THEN z = 1
IF z > 80 THEN z = 80
IF y = 3 THEN direction = 2
IF y = 3 AND alreadyAdded = 0 THEN rally = rally + 1
IF y = 3 AND alreadyAdded = 0 THEN alreadyAdded = 1
IF y = 4 THEN alreadyAdded = 0
outOfBounds = 0
IF y > 42 THEN outOfBounds = 1
IF z < 2 THEN outOfBounds = 1
IF z > 79 THEN outOfBounds = 1
FOR i = 1 TO bs
COLOR 2, 2
IF y = w AND z = x + i THEN rallyEnd = 1
NEXT i
SELECT CASE outOfBounds
CASE IS = 1
rallyEnd = 1
speed = 0
a = 37
b = 32
y = 36
z = 40
t = 0
totals = 0
speed = 0
direction = 1
alreadyAdded = 0
COLOR 15, 2
CLS
FOR i = 2 TO 20
COLOR 1, 15
LOCATE 2, i
PRINT CHR$(219)
NEXT i
COLOR 15, 1
LOCATE 2, 2
PRINT surname$
END SELECT
SELECT CASE TIMER - tt
CASE IS >= .005
FOR i = 1 TO bs
COLOR 2, 2
LOCATE w, x + i
PRINT " "
NEXT i
IF directionbs = 1 THEN x = x + 1 ELSE x = x - 1
tt = TIMER
END SELECT
IF directionbs = 2 THEN GOTO 400
SELECT CASE x + bs
CASE IS >= 80
directionbs = 2
END SELECT
400 IF directionbs = 1 THEN GOTO 410
SELECT CASE x
CASE IS <= 1
directionbs = 1
bs = bs + 1
END SELECT
410 LOOP UNTIL rallyEnd = 1
COLOR 15, 2
CLS
FOR i = 2 TO 20
COLOR 1, 15
LOCATE 2, i
PRINT CHR$(219)
NEXT i
COLOR 15, 1
LOCATE 2, 2
PRINT surname$
LOCATE 2, 21
COLOR 15, 3
PRINT " RALLY "; rally
COLOR 15, 2
LOCATE 16, 24
SELECT CASE rally
CASE IS > 29
PRINT "THAT WAS AN UNBELIEVEABLE EFFORT! WELL PLAYED!"
CASE 24 TO 29
PRINT "WELL DONE! THAT WAS AN EXCELLENT PERFORMANCE."
CASE 19 TO 23
PRINT "VERY IMPRESSIVE! YOU SHOULD BE PLEASED WITH THAT SCORE."
CASE 16 TO 18
PRINT "GOOD SCORE, BUT STILL A LOT OF IMPROVEMENT TO BE MADE."
CASE 12 TO 15
PRINT "NOT A BAD SCORE, BUT YOU CAN DO MUCH BETTER."
CASE 9 TO 11
PRINT "BY NO MEANS IMPRESSIVE. TRY AGAIN."
CASE 6 TO 8
PRINT "THAT WAS ABSOLUTLY DREADFUL. ENOUGH SAID."
CASE 3 TO 5
PRINT "THAT WAS SHOCKING. HAVE YOU EVER PLAYED THIS GAME BEFORE?"
CASE 0 TO 2
PRINT "THE ONLY WAS TO DESCRIBE THAT PERFORMANCE IS EMBARRASING."
END SELECT
LOCATE 20, 24
PRINT "YOUR SCORE:"
COLOR 7, 2
LOCATE 20, 36
PRINT rally
LOCATE 28, 24
PRINT "PRESS RETURN TO GO BACK TO THE MAIN MENU"
LOCATE 30, 24
PRINT "PRESS SPACE TO TRY BACK WALL RALLY AGAIN"
440 SELECT CASE INKEY$
CASE IS = CHR$(13)
CASE IS = CHR$(32)
GOTO 450
CASE ELSE
GOTO 440
END SELECT
END SUB
SUB calender
COLOR 15, 2
CLS
LOCATE 2, 5
PRINT forename$(32); " "; surname$(32); " "; day; " "; month$(month); " "; year
LOCATE 5, 5
PRINT "CALENDER"
LOCATE 9, 5
PRINT "DATE"
LOCATE 9, 20
PRINT "TOURNAMENT"
LOCATE 9, 60
PRINT "QUALIFICATION"
FOR i = 1 TO 24
IF qual(i) = 1 THEN COLOR 15, 2 ELSE COLOR 7, 2
LOCATE i + 10, 4
PRINT day(i); month$(month(i))
LOCATE i + 10, 20
PRINT tourney$(i)
LOCATE i + 10, 60
PRINT qual$(qual(i))
NEXT i
DO
LOOP UNTIL INKEY$ = CHR$(13)
COLOR 15, 2
CLS
END SUB
SUB career
os = 1
COLOR 15, 2
CLS
470 COLOR 15, 2
LOCATE 16, 24
PRINT "CAREER MODE"
COLOR 7, 2
IF os = 1 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 20, 24
PRINT "NEW CAREER"
IF os = 2 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 22, 24
PRINT "LOAD CAREER"
460 SELECT CASE INKEY$
CASE IS = u$
os = os - 1
IF os < 1 THEN os = 2
GOTO 470
CASE IS = d$
os = os + 1
IF os > 2 THEN os = 1
GOTO 470
CASE IS = CHR$(13)
CASE ELSE
GOTO 460
END SELECT
SELECT CASE os
CASE IS = 1
CASE IS = 2
GOTO 470
END SELECT
year = 2006
day = 1
month = 1
forename$(32) = forename$
surname$(32) = surname$
DO
z = 0
arp(i) = 0
FOR i = 1 TO 32
FOR j = 1 TO 9
arp(i) = arp(i) + rankPoints(j, i)
NEXT j
arp(i) = INT(arp(i) / 10)
minorRating(i) = i / 1000
NEXT i
FOR i = 1 TO 32
rank(i) = 33
NEXT i
FOR i = 1 TO 32
FOR j = 1 TO 32
IF arp(i) + minorRating(i) >= arp(j) + minorRating(j) THEN rank(i) = rank(i) - 1
NEXT j
NEXT i
DO
COLOR 15, 2
CLS
os = 1
490 COLOR 15, 2
LOCATE 2, 24
PRINT forename$(32); " "; surname$(32); " "; day; month$(month); year
LOCATE 16, 24
PRINT "CAREER MODE"
COLOR 7, 2
LOCATE 20, 24
IF os = 1 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "CALENDER"
LOCATE 22, 24
IF os = 2 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "PLAYER STATISTICS"
LOCATE 24, 24
IF os = 3 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "WORLD RANKINGS"
LOCATE 26, 24
IF os = 4 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "GO TO NEXT TOURNAMENT"
LOCATE 28, 24
IF os = 5 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "CAREER OPTIONS"
LOCATE 30, 24
IF os = 6 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "QUIT CAREER"
480 SELECT CASE INKEY$
CASE IS = u$
os = os - 1
IF os < 1 THEN os = 6
GOTO 490
CASE IS = d$
os = os + 1
IF os > 6 THEN os = 1
GOTO 490
CASE IS = CHR$(13)
CASE ELSE
GOTO 480
END SELECT
SELECT CASE os
CASE IS = 1
CALL calender
os = 1
GOTO 490
CASE IS = 3
CALL worldRankings
os = 3
GOTO 490
CASE IS = 4
z = 1
GOTO 490
CASE IS = 6
GOTO 500
CASE ELSE
GOTO 490
END SELECT
week = week + 1
IF week = 53 THEN year = year + 1
IF week = 53 THEN week = 1
LOOP UNTIL z = 1
LOOP UNTIL year = 11
500 COLOR 15, 2
CLS
END SUB
SUB challengeMatchDay
COLOR 15, 2
CLS
LOCATE 16, 24
IF cCompleted(challenge) = 1 THEN PRINT "MATCH "; challenge; " (Completed)" ELSE PRINT "MATCH "; challenge; " (Not Completed)"
COLOR 7, 2
FOR i = 1 TO cAmount(challenge)
LOCATE (i * 2) + 18, 24
PRINT cDescription$(i, challenge)
NEXT i
LOCATE 36, 24
COLOR 15, 2
PRINT "PRESS RETURN TO GO TO THE MATCH"
DO
LOOP UNTIL INKEY$ = CHR$(13)
CALL matchDay
END SUB
SUB challengeMode
os = 1
610 COLOR 15, 2
CLS
LOCATE 16, 24
PRINT "CHALLENGE MODE"
FOR i = 1 TO 6
LOCATE (i * 2) + 18, 24
IF os = i THEN COLOR 2, 7 ELSE COLOR 7, 2
IF cCompleted(i) = 1 THEN PRINT "MATCH "; i; " (Completed)" ELSE PRINT "MATCH "; i; " (Not Completed)"
NEXT i
LOCATE 32, 24
IF os = 7 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "RETURN TO MAIN MENU"
600 SELECT CASE INKEY$
CASE IS = u$
os = os - 1
IF os < 1 THEN os = 7
GOTO 610
CASE IS = d$
os = os + 1
IF os > 7 THEN os = 1
GOTO 610
CASE IS = CHR$(13)
CASE ELSE
GOTO 600
END SELECT
SELECT CASE os
CASE IS = 7
CASE ELSE
challenge = os
CALL challengeMatchDay
END SELECT
COLOR 15, 2
CLS
END SUB
SUB getInfo
OPEN "t.txt" FOR INPUT AS #1
FOR i = 1 TO 31
INPUT #1, forename$(i)
INPUT #1, surname$(i)
INPUT #1, speedRating(i)
INPUT #1, power(i)
INPUT #1, accuracy(i)
INPUT #1, arp(i)
NEXT i
CLOSE
FOR i = 1 TO 31
speed(i) = 11 - speedRating(i)
speed(i) = speed(i) * 25
NEXT i
round$(1) = "ROUND 1"
round$(2) = "ROUND 2"
round$(3) = "QUARTER-FINALS"
round$(4) = "SEMI-FINALS"
round$(5) = "FINAL"
FOR j = 1 TO 32
FOR i = 1 TO 10
rankPoints(i, j) = arp(j)
NEXT i
NEXT j
'OPEN "t2.txt" FOR INPUT AS #1
'FOR i = 1 TO 24
'INPUT #1, day(i)
'INPUT #1, month(i)
'INPUT #1, qual(i)
'INPUT #1, tourney$(i)
'NEXT i
'CLOSE
month$(1) = "JANUARY"
days(1) = 31
month$(2) = "FEBRUARY"
days(2) = 28
month$(3) = "MARCH"
days(3) = 31
month$(4) = "APRIL"
days(4) = 30
month$(5) = "MAY"
days(5) = 31
month$(6) = "JUNE"
days(6) = 30
month$(7) = "JULY"
days(7) = 31
month$(8) = "AUGUST"
days(8) = 31
month$(9) = "SEPTEMBER"
days(9) = 30
month$(10) = "OCTOBER"
days(10) = 31
month$(11) = "NOVEMBER"
days(11) = 30
month$(12) = "DECEMBER"
days(12) = 31
qual$(1) = "No qualification"
qual$(2) = "1-16 in Rankings"
qual$(3) = "17-32 in Rankings"
qual$(4) = "1-10 in Rankings"
qual$(5) = "11-20 in Rankings"
qual$(6) = "21-32 in Rankings"
entrants(1) = 32
entrants(2) = 16
entrants(3) = 16
entrants(4) = 8
entrants(5) = 8
entrants(6) = 8
rounds(1) = 5
rounds(2) = 4
rounds(3) = 4
rounds(4) = 3
rounds(5) = 3
rounds(6) = 3
OPEN "t3.txt" FOR INPUT AS #1
FOR i = 1 TO 6
INPUT #1, cPlayerNumber(1, i)
INPUT #1, cGames(1, i)
INPUT #1, cSets(1, i)
INPUT #1, cPlayerNumber(2, i)
INPUT #1, cGames(2, i)
INPUT #1, cSets(2, i)
INPUT #1, cGamesToWin(i)
INPUT #1, cSetsToWin(i)
INPUT #1, cAmount(i)
FOR j = 1 TO cAmount(i)
INPUT #1, cDescription$(j, i)
NEXT j
cCompleted(i) = 0
NEXT i
CLOSE
END SUB
SUB matchDay
IF challenge > 0 THEN oGamesToWin = gamesToWin
IF challenge > 0 THEN gamesToWin = cGamesToWin(challenge)
IF challenge > 0 THEN oSetsToWin = setsToWin
IF challenge > 0 THEN setsToWin = cSetsToWin(challenge)
IF challenge > 0 THEN oForename$ = forename$
IF challenge > 0 THEN forename$ = forename$(cPlayerNumber(1, challenge))
IF challenge > 0 THEN oSurname$ = surname$
IF challenge > 0 THEN surname$ = surname$(cPlayerNumber(1, challenge))
IF challenge > 0 THEN opponent = cPlayerNumber(2, challenge)
FOR i = 1 TO 2
points(i) = 0
realPoints$(i) = ""
IF challenge > 0 THEN games(i) = cGames(i, challenge) ELSE games(i) = 0
IF challenge > 0 THEN sets(i) = cSets(i, challenge) ELSE sets(i) = 0
winners(i) = 0
aces(i) = 0
faults(i) = 0
errors(i) = 0
NEXT i
side = 1
speed = 0
serve = 1
serveHit = 0
direction = 1
realPoints$(1) = "0"
realPoints$(2) = "0"
COLOR 0, 2
CLS
DO
SELECT CASE speed
CASE IS = 0
a = 37
b = 32
c = 16
IF serve = 1 THEN d = 32 ELSE d = rand(12) + 25
IF serve = 1 THEN y = 36 ELSE y = 17
z = 41
END SELECT
total = 0
totals = 0
moveAmount = 0
tt = 0
t = 0
noOutChance = 0
COLOR 0, 2
CLS
FOR i = 1 TO 2
LOCATE 1 + i, 2
COLOR 7, 1
PRINT " "
LOCATE 1 + i, 2
COLOR 7, 1
IF i = 1 AND serve = 1 THEN PRINT surname$; " *"
IF i = 1 AND serve = 2 THEN PRINT surname$
IF i = 2 AND serve = 1 THEN PRINT surname$(opponent);
IF i = 2 AND serve = 2 THEN PRINT surname$(opponent); " *"
LOCATE 1 + i, 20
COLOR 7, 3
PRINT " "
LOCATE 1 + i, 21
COLOR 7, 3
PRINT realPoints$(i)
LOCATE 1 + i, 24
COLOR 7, 4
PRINT " "
COLOR 7, 4
LOCATE 1 + i, 24
PRINT games(i)
LOCATE 1 + i, 28
COLOR 7, 6
PRINT " "
COLOR 7, 6
LOCATE 1 + i, 28
PRINT sets(i)
IF i = 1 THEN j = 2 ELSE j = 1
SELECT CASE realPoints$(i)
CASE IS = "A"
LOCATE 1 + i, 32
COLOR 7, 6
PRINT "ADVANTAGE"
CASE IS = "40"
LOCATE 1 + i, 32
COLOR 7, 6
IF realPoints$(j) <> "40" AND realPoints$(j) <> "A" AND serve = i THEN PRINT "GAME POINT"
IF realPoints$(j) <> "40" AND realPoints$(j) <> "A" AND serve <> i THEN PRINT "BREAK POINT"
LOCATE 1 + i, 32
IF realPoints$(j) <> "40" AND realPoints$(j) <> "A" AND gamesToWin - games(i) = 1 AND setsToWin - sets(i) = 1 THEN PRINT "MATCH POINT"
LOCATE 1 + i, 32
IF realPoints$(j) <> "40" AND realPoints$(j) <> "A" AND gamesToWin - games(i) = 1 AND setsToWin - sets(i) <> 1 THEN PRINT " "
LOCATE 1 + i, 32
IF realPoints$(j) <> "40" AND realPoints$(j) <> "A" AND gamesToWin - games(i) = 1 AND setsToWin - sets(i) <> 1 THEN PRINT "SET POINT "
END SELECT
NEXT i
winner = 0
ttt = TIMER
DO
FOR i = 1 TO 17
IF b + i > 0 AND b + i < 81 THEN LOCATE a, b + i
COLOR userColour, 2
IF b + i > 0 AND b + i < 81 THEN PRINT CHR$(223)
NEXT i
FOR i = 1 TO 17
IF d + i > 0 AND d + i < 81 THEN LOCATE c, d + i
COLOR opponentColour, 2
IF d + i > 0 AND d + i < 81 THEN PRINT CHR$(220)
NEXT i
LOCATE y, z
COLOR 10, 2
PRINT CHR$(111)
zz = 0
DO
SELECT CASE INKEY$
CASE IS = l$
zz = 1
FOR i = 1 TO 17
IF b + i > 0 AND b + i < 81 THEN LOCATE a, b + i
COLOR 6, 2
IF b + i > 0 AND b + i < 81 THEN PRINT " "
NEXT i
b = b - 1
CASE IS = r$
zz = 1
FOR i = 1 TO 17
IF b + i > 0 AND b + i < 81 THEN LOCATE a, b + i
COLOR 6, 2
IF b + i > 0 AND b + i < 81 THEN PRINT " "
NEXT i
b = b + 1
CASE IS = CHR$(13)
IF speed <> 0 THEN GOTO 80
IF y < b - 4 THEN GOTO 80
IF y > b + 12 THEN GOTO 80
IF serve = 1 AND speed = 0 THEN direction = 1
IF serve = 1 AND speed = 0 THEN serveHit = 1
IF serve = 1 AND speed = 0 THEN speed = 10
longHit = rand(12 - accuracy(opponent))
SELECT CASE longHit
CASE IS = 1
IF d > 28 THEN sideHit = 1 ELSE sideHit = 2
290 IF sideHit = 1 THEN e = rand(3) + 0 ELSE e = rand(3) + 14
IF e = 1 OR e = 17 THEN GOTO 290
CASE ELSE
e = rand(17)
END SELECT
ballHit = b - z + 9
directionlr = 1
FOR i = 1 TO 8
IF ballHit = -i THEN directionlr = 2
IF ballHit = -i THEN ballHit = i
NEXT i
IF ballHit = 0 THEN changeAmount = 100 ELSE changeAmount = 9 - ballHit
80 END SELECT
IF speed = 0 THEN GOTO 40
moveAmount = (15 - speed) / 200
moveAmount = INT(moveAmount * 1000) / 1000
SELECT CASE TIMER
CASE IS >= t + moveAmount
zz = 1
COLOR 2, 2
LOCATE y, z
PRINT " "
IF direction = 1 THEN y = y - 1 ELSE y = y + 1
t = TIMER
totals = totals + 1
END SELECT
IF zz = 1 THEN GOTO 140
SELECT CASE totals
CASE IS >= changeAmount
zz = 1
COLOR 2, 2
LOCATE y, z
PRINT " "
IF directionlr = 1 THEN z = z - 1 ELSE z = z + 1
IF ballHit = 8 AND directionlr = 1 AND serveHit <> 1 THEN z = z - 1
IF ballHit = 8 AND directionlr = 2 AND serveHit <> 1 THEN z = z + 1
totals = 0
END SELECT
IF zz = 1 THEN GOTO 140
40 IF serve = 1 AND speed = 0 THEN GOTO 140
fatigue = INT(TIMER - ttt)
IF fatigue > 40 THEN fatigue = 40
opponentMove = rand(speed(opponent) + fatigue)
SELECT CASE opponentMove
CASE IS = 1
zz = 1
IF speed <> 0 THEN GOTO 100
IF tt > 0 THEN GOTO 110
tt = TIMER
110 IF TIMER - tt < 1.5 THEN GOTO 100
direction = 2
speed = 10
ballHit = d - z + 9
serveHit = 1
serveNow = 1
100 IF speed = 0 THEN GOTO 120
FOR i = 1 TO 17
IF d + i > 0 AND d + i < 81 THEN LOCATE c, d + i
COLOR 2, 2
IF d + i > 0 AND d + i < 81 AND d + e <> z THEN PRINT " "
NEXT i
SELECT CASE d + e
CASE IS < z
d = d + 1
CASE IS > z
d = d - 1
END SELECT
120 END SELECT
140 LOOP UNTIL zz = 1
90 IF y = c + 1 AND z <= d + 17 AND z >= d + 1 THEN hit2 = 1 ELSE hit2 = 0
IF y = a - 1 AND z <= b + 17 AND z >= b + 1 THEN hit1 = 1 ELSE hit1 = 0
SELECT CASE hit1
CASE IS = 1
serveHit = 0
longHit = rand(12 - accuracy(opponent))
SELECT CASE longHit
CASE IS = 1
IF d > 28 THEN sideHit = 1 ELSE sideHit = 2
280 IF sideHit = 1 THEN e = rand(4) + 0 ELSE e = rand(4) + 13
IF e = 1 AND d < 50 AND d > 30 THEN GOTO 280
IF e = 17 AND d < 50 AND d > 30 THEN GOTO 280
CASE ELSE
e = rand(17)
END SELECT
END SELECT
SELECT CASE hit2
CASE IS = 1
IF serveNow = 0 THEN serveHit = 0
ballHit = d - z + 9
direction = 2
IF speed <> 0 THEN speed = power(opponent)
END SELECT
SELECT CASE hit1
CASE IS = 1
ballHit = b - z + 9
direction = 1
IF speed <> 0 THEN speed = 10
END SELECT
serveNow = 0
IF hit2 = 0 AND hit1 = 0 THEN GOTO 50
directionlr = 1
FOR i = 1 TO 8
IF ballHit = -i THEN directionlr = 2
IF ballHit = -i THEN ballHit = i
NEXT i
50 IF ballHit = 0 THEN changeAmount = 100 ELSE changeAmount = 9 - ballHit
IF b < -12 THEN b = -12
IF b > 75 THEN b = 75
IF d < -12 THEN d = -12
IF d > 75 THEN d = 75
IF y < 6 THEN y = 6
IF y > 47 THEN y = 47
IF z < 1 THEN z = 1
IF z > 80 THEN z = 80
IF winner > 0 THEN GOTO 160
finish = 0
IF y = 15 THEN winner = 1
IF y = 15 AND serveHit <> 1 THEN winners(1) = winners(1) + 1
IF y = 15 AND serveHit = 1 THEN aces(1) = aces(1) + 1
IF y = 38 THEN winner = 2
IF y = 38 AND serveHit <> 1 THEN winners(2) = winners(2) + 1
IF y = 38 AND serveHit = 1 THEN aces(2) = aces(2) + 1
IF y = 15 THEN noOutChance = 1
IF y = 38 THEN noOutChance = 1
IF z <= 1 AND direction = 1 THEN winner = 2
IF z <= 1 AND direction = 1 AND serveHit <> 1 THEN errors(1) = errors(1) + 1
IF z <= 1 AND direction = 1 AND serveHit = 1 THEN faults(1) = faults(1) + 1
IF z <= 1 AND direction = 2 THEN winner = 1
IF z <= 1 AND direction = 2 AND serveHit <> 1 THEN errors(2) = errors(2) + 1
IF z <= 1 AND direction = 2 AND serveHit = 1 THEN faults(2) = faults(2) + 1
IF z >= 80 AND direction = 1 THEN winner = 2
IF z >= 80 AND direction = 1 AND serveHit <> 1 THEN errors(1) = errors(1) + 1
IF z >= 80 AND direction = 1 AND serveHit = 1 THEN faults(1) = faults(1) + 1
IF z >= 80 AND direction = 2 THEN winner = 1
IF z >= 80 AND direction = 2 AND serveHit <> 1 THEN errors(2) = errors(2) + 1
IF z >= 80 AND direction = 2 AND serveHit = 1 THEN faults(2) = faults(2) + 1
160 IF y = 6 THEN finish = 1
IF y = 47 THEN finish = 2
IF z <= 1 AND direction = 1 THEN finish = 2
IF z <= 1 AND direction = 2 THEN finish = 1
IF z >= 80 AND direction = 1 THEN finish = 2
IF z >= 80 AND direction = 2 THEN finish = 1
IF noOutChance = 1 THEN GOTO 240
SELECT CASE winner
CASE IS > 0
LOCATE 24, 38
COLOR 15, 2
PRINT "OUT!"
FOR t = 1 TO 180000
NEXT t
END SELECT
240 SELECT CASE y
CASE IS <= 15
LOCATE 24, 38
COLOR 15, 2
IF serveHit = 1 THEN PRINT "ACE!"
CASE IS >= 38
LOCATE 24, 38
COLOR 15, 2
IF serveHit = 1 THEN PRINT "ACE!"
END SELECT
LOOP UNTIL finish <> 0
points(winner) = points(winner) + 1
SELECT CASE points(winner)
CASE IS = 4
IF winner = 1 THEN loser = 2 ELSE loser = 1
SELECT CASE points(loser)
CASE IS = 4
points(winner) = 3
points(loser) = 3
CASE IS < 3
points(winner) = 5
END SELECT
END SELECT
FOR i = 1 TO 2
SELECT CASE points(i)
CASE IS = 0
realPoints$(i) = "0"
CASE IS = 1
realPoints$(i) = "15"
CASE IS = 2
realPoints$(i) = "30"
CASE IS = 3
realPoints$(i) = "40"
CASE IS = 4
realPoints$(i) = "A"
CASE IS = 5
points(1) = 0
points(2) = 0
realPoints$(1) = "0"
realPoints$(2) = "0"
games(i) = games(i) + 1
IF serve = 1 THEN serve = 2 ELSE serve = 1
END SELECT
IF games(i) = gamesToWin THEN sets(i) = sets(i) + 1
IF games(i) = gamesToWin THEN games(1) = 0
IF games(i) = gamesToWin THEN games(2) = 0
NEXT i
speed = 0
LOOP UNTIL sets(1) = 1 OR sets(2) = setsToWin
COLOR 0, 2
CLS
FOR i = 1 TO 2
LOCATE 1 + i, 2
COLOR 7, 1
PRINT " "
LOCATE 1 + i, 2
COLOR 7, 1
IF i = 1 AND serve = 1 THEN PRINT surname$; " *"
IF i = 1 AND serve = 2 THEN PRINT surname$
IF i = 2 AND serve = 1 THEN PRINT surname$(opponent);
IF i = 2 AND serve = 2 THEN PRINT surname$(opponent); " *"
LOCATE 1 + i, 20
COLOR 7, 3
PRINT " "
LOCATE 1 + i, 21
COLOR 7, 3
PRINT realPoints$(i)
LOCATE 1 + i, 24
COLOR 7, 4
PRINT " "
COLOR 7, 4
LOCATE 1 + i, 24
PRINT games(i)
LOCATE 1 + i, 28
COLOR 7, 6
PRINT " "
COLOR 7, 6
LOCATE 1 + i, 28
PRINT sets(i)
NEXT i
COLOR 15, 2
LOCATE 30, 20
SELECT CASE sets(1)
CASE IS > sets(2)
IF challenge = 1 THEN cCompleted(challenge) = 1
PRINT forename$; " "; surname$; " BEAT "; forename$(opponent); " "; surname$(opponent); " "; sets(1); "-"; sets(2)
CASE ELSE
PRINT forename$(opponent); " "; surname$(opponent); " BEAT "; forename$; " "; surname$; " "; sets(2); "-"; sets(1)
END SELECT
COLOR 7, 2
LOCATE 34, 20
PRINT "PRESS RETURN TO VIEW THE MATCH STATISTICS"
DO
LOOP UNTIL INKEY$ = CHR$(13)
COLOR 15, 2
CLS
FOR i = 1 TO 2
LOCATE 1 + i, 2
COLOR 7, 1
PRINT " "
LOCATE 1 + i, 2
COLOR 7, 1
IF i = 1 AND serve = 1 THEN PRINT surname$; " *"
IF i = 1 AND serve = 2 THEN PRINT surname$
IF i = 2 AND serve = 1 THEN PRINT surname$(opponent);
IF i = 2 AND serve = 2 THEN PRINT surname$(opponent); " *"
LOCATE 1 + i, 20
COLOR 7, 3
PRINT " "
LOCATE 1 + i, 21
COLOR 7, 3
PRINT realPoints$(i)
LOCATE 1 + i, 24
COLOR 7, 4
PRINT " "
COLOR 7, 4
LOCATE 1 + i, 24
PRINT games(i)
LOCATE 1 + i, 28
COLOR 7, 6
PRINT " "
COLOR 7, 6
LOCATE 1 + i, 28
PRINT sets(i)
NEXT i
COLOR 15, 2
LOCATE 28, 20
PRINT surname$
LOCATE 28, 48
PRINT surname$(opponent)
LOCATE 30, 33
PRINT "TOTAL SETS"
LOCATE 32, 32
PRINT "TOTAL POINTS"
LOCATE 34, 36
PRINT "ACES"
LOCATE 36, 34
PRINT "WINNERS"
LOCATE 38, 30
PRINT "SERVICE FAULTS"
LOCATE 40, 30
PRINT "UNFORCED ERRORS"
COLOR 7, 2
LOCATE 30, 25
PRINT sets(1)
LOCATE 30, 47
PRINT sets(2)
LOCATE 32, 25
PRINT aces(1) + winners(1) + faults(2) + errors(2)
LOCATE 32, 47
PRINT aces(2) + winners(2) + faults(1) + errors(1)
LOCATE 34, 25
PRINT aces(1)
LOCATE 34, 47
PRINT aces(2)
LOCATE 36, 25
PRINT winners(1)
LOCATE 36, 47
PRINT winners(2)
LOCATE 38, 25
PRINT faults(1)
LOCATE 38, 47
PRINT faults(2)
LOCATE 40, 25
PRINT errors(1)
LOCATE 40, 47
PRINT errors(2)
DO
LOOP UNTIL INKEY$ = CHR$(13)
COLOR 15, 2
CLS
IF challenge > 0 THEN gamesToWin = oGamesToWin
IF challenge > 0 THEN setsToWin = oSetsToWin
IF challenge > 0 THEN forename$ = oForename$
IF challenge > 0 THEN surname$ = oSurname$
END SUB
SUB matchDayMenu
560 os = 1
COLOR 15, 2
CLS
550 LOCATE 16, 24
COLOR 15, 2
PRINT "MATCH DAY"
LOCATE 20, 24
PRINT forename$; " "; surname$; " V "; forename$(opponent); " "; surname$(opponent)
LOCATE 22, 24
PRINT "First to "; gamesToWin; " games"
LOCATE 24, 24
IF setsToWin = 1 THEN PRINT "First to 1 set" ELSE PRINT "First to "; setsToWin; " sets"
LOCATE 30, 24
IF os = 1 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "MATCH OPTIONS"
LOCATE 32, 24
IF os = 2 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "GO TO MATCH"
540 SELECT CASE INKEY$
CASE IS = u$
os = os - 1
IF os < 1 THEN os = 2
GOTO 550
CASE IS = d$
os = os + 1
IF os > 2 THEN os = 1
GOTO 550
CASE IS = CHR$(13)
CASE ELSE
GOTO 540
END SELECT
SELECT CASE os
CASE IS = 1
CALL options
GOTO 560
CASE IS = 2
CALL matchDay
END SELECT
END SUB
SUB options
COLOR 15, 2
os = 1
230 COLOR 15, 2
CLS
IF gamesToWin2 = 1 THEN gamesToWin = 3 ELSE gamesToWin = 6
COLOR 15, 2
LOCATE 16, 32
PRINT "OPTIONS"
IF os = 1 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 20, 32
PRINT "GAMES IN A SET : FIRST TO "; gamesToWin
IF os = 2 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 22, 32
PRINT "SETS IN A MATCH : FIRST TO "; setsToWin
IF os = 3 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 24, 32
PRINT "USER'S RACKET : "; colour$(userColour)
IF os = 4 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 26, 32
PRINT "OPPONENT'S RACKET: "; colour$(opponentColour)
IF os = 5 THEN COLOR 2, 7 ELSE COLOR 7, 2
LOCATE 28, 32
PRINT "RETURN TO MATCH MENU"
220 SELECT CASE INKEY$
CASE IS = u$
os = os - 1
IF os < 1 THEN os = 5
GOTO 230
CASE IS = d$
os = os + 1
IF os > 5 THEN os = 1
GOTO 230
CASE IS = l$
IF os = 1 THEN gamesToWin2 = gamesToWin2 - 1
IF os = 2 THEN setsToWin = setsToWin - 1
IF gamesToWin2 < 1 THEN gamesToWin2 = 2
IF setsToWin < 1 THEN setsToWin = 3
IF os = 3 THEN userColour = userColour - 1
IF userColour < 3 THEN userColour = 15
IF os = 4 THEN opponentColour = opponentColour - 1
IF opponentColour < 3 THEN opponentColour = 15
GOTO 230
CASE IS = r$
IF os = 1 THEN gamesToWin2 = gamesToWin2 + 1
IF os = 2 THEN setsToWin = setsToWin + 1
IF gamesToWin2 > 2 THEN gamesToWin2 = 1
IF setsToWin > 3 THEN setsToWin = 1
IF os = 3 THEN userColour = userColour + 1
IF userColour > 15 THEN userColour = 3
IF os = 4 THEN opponentColour = opponentColour + 1
IF opponentColour > 15 THEN opponentColour = 3
GOTO 230
CASE IS = CHR$(13)
IF os <> 5 THEN GOTO 220
CASE ELSE
GOTO 220
END SELECT
COLOR 15, 2
CLS
END SUB
SUB preMatchDay
os = 1
COLOR 15, 2
CLS
200 COLOR 15, 2
LOCATE 16, 24
PRINT "SELECT YOUR OPPONENT"
COLOR 7, 2
LOCATE 20, 24
PRINT CHR$(29); " "; forename$(os); " "; surname$(os); " "; CHR$(29); " "
LOCATE 24, 24
COLOR 15, 2
PRINT "SPEED:"
LOCATE 26, 24
COLOR 15, 2
PRINT "POWER:"
LOCATE 28, 24
COLOR 15, 2
PRINT "ACCURACY:"
FOR i = 1 TO 10
LOCATE 24, i + 34
COLOR 4, 2
IF i <= speedRating(os) THEN PRINT CHR$(219) ELSE PRINT " "
LOCATE 26, i + 34
COLOR 5, 2
IF i <= power(os) THEN PRINT CHR$(219) ELSE PRINT " "
LOCATE 28, i + 34
COLOR 6, 2
IF i <= accuracy(os) THEN PRINT CHR$(219) ELSE PRINT " "
NEXT i
190 SELECT CASE INKEY$
CASE IS = l$
os = os - 1
IF os < 1 THEN os = 31
GOTO 200
CASE IS = r$
os = os + 1
IF os > 31 THEN os = 1
GOTO 200
CASE IS = CHR$(13)
CASE ELSE
GOTO 190
END SELECT
opponent = os
CALL matchDayMenu
END SUB
FUNCTION rand (c)
RANDOMIZE TIMER
rand = INT(c * RND(1)) + 1
END FUNCTION
SUB targetPractice
430 a = 37
b = 32
score = 0
w = 6
SELECT CASE target
CASE IS > 4
location = rand(2)
IF location = 1 THEN x = rand(16) ELSE x = rand(16) + 55
CASE ELSE
x = rand(68)
END SELECT
y = 36
z = 40
t = 0
alreadyAdded = 0
hitTarget = 0
totals = 0
speed = 0
direction = 1
COLOR 15, 2
CLS
LOCATE 16, 24
PRINT "TARGET PRACTICE"
COLOR 7, 2
LOCATE 20, 24
PRINT "There are 10 targets to hit, each one slightly"
LOCATE 21, 24
PRINT "smaller than the last. Every time you hit the"
LOCATE 22, 24
PRINT "back wall, hit the ball out, or miss the ball,"
LOCATE 23, 24
PRINT "your score will increase by 1 point. The lower"
LOCATE 24, 24
PRINT "your score at the end, the better. Shown next"
LOCATE 25, 24
PRINT "to your name are firstly, the amount of targets"
LOCATE 26, 24
PRINT "you've hit so far, followed by your points."
LOCATE 27, 24
PRINT "Remember to keep your points low!"
COLOR 15, 2
LOCATE 35, 24
PRINT "PRESS RETURN TO BEGIN TARGET PRACTICE"
DO
LOOP UNTIL INKEY$ = CHR$(13)
score = 0
FOR target = 1 TO 10
w = 6
SELECT CASE target
CASE IS > 4
location = rand(2)
IF location = 1 THEN x = rand(16) ELSE x = rand(16) + 55
CASE ELSE
x = rand(68)
END SELECT
alreadyAdded = 0
hitTarget = 0
IF y = w THEN y = y + 2
IF y - w = 1 THEN y = y + 1
COLOR 15, 2
CLS
FOR i = 2 TO 20
COLOR 1, 15
LOCATE 2, i
PRINT CHR$(219)
NEXT i
COLOR 15, 1
LOCATE 2, 2
PRINT surname$
DO
LOCATE 2, 21
COLOR 15, 4
PRINT target - 1
LOCATE 2, 24
COLOR 15, 5
PRINT " SCORE "; score
FOR i = 1 TO 11 - target
LOCATE w, x + i
COLOR target + 2, 2
PRINT CHR$(219)
NEXT i
FOR i = 1 TO 17
COLOR userColour, 2
IF b + i > 0 AND b + i < 81 THEN LOCATE a, b + i
COLOR 6, 2
IF b + i > 0 AND b + i < 81 THEN PRINT CHR$(223)
NEXT i
LOCATE y, z
COLOR 10, 2
PRINT "o"
SELECT CASE INKEY$
CASE IS = l$
FOR i = 1 TO 17
IF b + i > 0 AND b + i < 81 THEN LOCATE a, b + i
COLOR 6, 2
IF b + i > 0 AND b + i < 81 THEN PRINT " "
NEXT i
b = b - 1
CASE IS = r$
FOR i = 1 TO 17
IF b + i > 0 AND b + i < 81 THEN LOCATE a, b + i
COLOR 6, 2
IF b + i > 0 AND b + i < 81 THEN PRINT " "
NEXT i
b = b + 1
CASE IS = CHR$(13)
IF y < b - 3 THEN GOTO 330
IF y > b + 13 THEN GOTO 330
IF speed <> 0 THEN GOTO 330
speed = 10
ballHit = b - z + 9
directionlr = 1
FOR i = 1 TO 8
IF ballHit = -i THEN directionlr = 2
IF ballHit = -i THEN ballHit = i
NEXT i
330 END SELECT
IF speed = 0 THEN GOTO 320
moveAmount = (15 - speed) / 200
moveAmount = INT(moveAmount * 1000) / 1000
SELECT CASE TIMER
CASE IS >= t + moveAmount
COLOR 2, 2
LOCATE y, z
PRINT " "
IF direction = 1 THEN y = y - 1 ELSE y = y + 1
t = TIMER
totals = totals + 1
END SELECT
SELECT CASE totals
CASE IS >= changeAmount
COLOR 2, 2
LOCATE y, z
PRINT " "
IF directionlr = 1 THEN z = z - 1 ELSE z = z + 1
IF ballHit = 8 AND directionlr = 1 AND serveHit <> 1 THEN z = z - 1
IF ballHit = 8 AND directionlr = 2 AND serveHit <> 1 THEN z = z + 1
totals = 0
END SELECT
hit1 = 0
IF y = a - 1 AND z <= b + 17 AND z >= b + 1 THEN hit1 = 1 ELSE hit1 = 0
SELECT CASE hit1
CASE IS = 1
ballHit = b - z + 9
directionlr = 1
direction = 1
FOR i = 1 TO 8
IF ballHit = -i THEN directionlr = 2
IF ballHit = -i THEN ballHit = i
NEXT i
END SELECT
320 IF ballHit = 0 THEN changeAmount = 100 ELSE changeAmount = 9 - ballHit
IF b < -12 THEN b = -12
IF b > 75 THEN b = 75
IF d < -12 THEN d = -12
IF d > 75 THEN d = 75
IF y < 1 THEN y = 1
IF y > 47 THEN y = 47
IF z < 1 THEN z = 1
IF z > 80 THEN z = 80
IF y = 2 THEN direction = 2
IF y = 2 AND alreadyAdded = 0 THEN score = score + 1
IF y = 2 AND alreadyAdded = 0 THEN alreadyAdded = 1
IF y = 3 THEN alreadyAdded = 0
outOfBounds = 0
IF y > 42 THEN outOfBounds = 1
IF z < 2 THEN outOfBounds = 1
IF z > 79 THEN outOfBounds = 1
FOR i = 1 TO 11 - target
IF y = w + 1 AND z = x + i THEN hitTarget = 1
IF y = w AND z = x + i THEN hitTarget = 1
NEXT i
IF hitTarget = 1 THEN direction = 2
SELECT CASE outOfBounds
CASE IS = 1
score = score + 1
speed = 0
a = 37
b = 32
y = 36
z = 40
t = 0
totals = 0
speed = 0
direction = 1
alreadyAdded = 0
COLOR 15, 2
CLS
FOR i = 2 TO 20
COLOR 1, 15
LOCATE 2, i
PRINT CHR$(219)
NEXT i
COLOR 15, 1
LOCATE 2, 2
PRINT surname$
END SELECT
LOOP UNTIL hitTarget = 1
NEXT target
COLOR 15, 2
CLS
FOR i = 2 TO 20
COLOR 1, 15
LOCATE 2, i
PRINT CHR$(219)
NEXT i
COLOR 15, 1
LOCATE 2, 2
PRINT surname$
LOCATE 2, 21
COLOR 15, 4
PRINT target - 1
LOCATE 2, 25
COLOR 15, 3
PRINT " SCORE "; score
COLOR 15, 2
LOCATE 16, 24
SELECT CASE score
CASE IS < 10
PRINT "THAT WAS AN UNBELIEVEABLE EFFORT! WELL PLAYED!"
CASE 10 TO 18
PRINT "WELL DONE! THAT WAS AN EXCELLENT PERFORMANCE."
CASE 19 TO 26
PRINT "VERY IMPRESSIVE! YOU SHOULD BE PLEASED WITH THAT SCORE."
CASE 27 TO 35
PRINT "GOOD SCORE, BUT STILL A LOT OF IMPROVEMENT TO BE MADE."
CASE 36 TO 42
PRINT "NOT A BAD SCORE, BUT YOU CAN DO MUCH BETTER."
CASE 43 TO 50
PRINT "BY NO MEANS IMPRESSIVE. TRY AGAIN."
CASE 51 TO 56
PRINT "HAVE YOU FORGOTTEN THAT THE IDEA IS TO GET A LOW SCORE?"
CASE 57 TO 62
PRINT "THAT WAS ABSOLUTELY DREADFUL. ENOUGH SAID."
CASE IS > 62
PRINT "THAT WAS SHOCKING. HAVE YOU EVER PLAYED THIS GAME BEFORE?"
END SELECT
LOCATE 20, 24
PRINT "YOUR SCORE:"
COLOR 7, 2
LOCATE 20, 36
PRINT score
LOCATE 28, 24
PRINT "PRESS RETURN TO GO BACK TO THE MAIN MENU"
LOCATE 30, 24
PRINT "PRESS SPACE TO TRY TARGET PRACTICE AGAIN"
420 SELECT CASE INKEY$
CASE IS = CHR$(13)
CASE IS = CHR$(32)
GOTO 430
CASE ELSE
GOTO 420
END SELECT
END SUB
SUB tournament
forename$(32) = forename$
surname$(32) = surname$
FOR i = 1 TO 32
in(i) = 1
flag(i) = 0
NEXT i
FOR roundNumber = 1 TO 5
SELECT CASE roundNumber
CASE IS = 1
entrants = 32
CASE IS = 2
entrants = 16
CASE IS = 3
entrants = 8
CASE IS = 4
entrants = 4
CASE IS = 5
entrants = 2
END SELECT
FOR i = 1 TO 32
flag(i) = 0
NEXT i
FOR i = 1 TO entrants
DO
tournamentPlayer(i) = rand(32)
LOOP UNTIL flag(tournamentPlayer(i)) = 0 AND in(tournamentPlayer(i)) = 1
flag(tournamentPlayer(i)) = 1
NEXT i
userIn = 0
COLOR 15, 2
CLS
LOCATE 6, 5
IF roundNumber = 5 THEN PRINT "THE FINAL:" ELSE PRINT round$(roundNumber); " FIXUTES:"
FOR i = 1 TO 32
FOR j = 1 TO entrants
IF tournamentPlayer(j) = 32 OR tournamentPlayer(j + 1) = 32 THEN COLOR 15, 2 ELSE COLOR 7, 2
IF tournamentPlayer(j) = 32 OR tournamentPlayer(j + 1) = 32 THEN userIn = 1
LOCATE j + 10, 5
IF tournamentPlayer(j) = i THEN PRINT forename$(i); " "; surname$(i)
LOCATE j + 10, 40
IF tournamentPlayer(j + 1) = i THEN PRINT forename$(i); " "; surname$(i)
LOCATE j + 10, 32
PRINT "V"
j = j + 1
NEXT j
NEXT i
COLOR 15, 2
LOCATE 44, 5
IF userIn = 1 THEN PRINT "PRESS RETURN TO GO TO YOUR NEXT MATCH" ELSE PRINT "YOU ARE OUT OF THE TOURNAMENT. PRESS RETURN TO SKIP TO THE NEXT ROUND"
DO
LOOP UNTIL INKEY$ = CHR$(13)
userDone = 0
FOR j = 1 TO entrants
IF tournamentPlayer(j) = 32 OR tournamentPlayer(j + 1) = 32 THEN userMatch = 1 ELSE userMatch = 0
IF userMatch = 1 THEN userDone = userDone + 1
SELECT CASE userMatch
CASE IS = 1
IF userDone > 1 THEN GOTO 270
IF tournamentPlayer(j) = 32 THEN opponent = tournamentPlayer(j + 1) ELSE opponent = tournamentPlayer(j)
CALL matchDayMenu
IF winner = 1 THEN in(opponent) = 0 ELSE in(32) = 0
CASE ELSE
270 totalRating = speedRating(tournamentPlayer(j)) + power(tournamentPlayer(j)) + accuracy(tournamentPlayer(j)) + speedRating(tournamentPlayer(j + 1)) + power(tournamentPlayer(j + 1)) + accuracy(tournamentPlayer(j + 1))
randTR = rand(totalRating)
SELECT CASE randTR
CASE IS <= speedRating(tournamentPlayer(j)) + power(tournamentPlayer(j)) + accuracy(tournamentPlayer(j))
in(tournamentPlayer(j + 1)) = 0
CASE ELSE
in(tournamentPlayer(j)) = 0
END SELECT
END SELECT
j = j + 1
NEXT j
NEXT roundNumber
COLOR 7, 2
CLS
FOR i = 34 TO 44
LOCATE 6, i
PRINT CHR$(219)
NEXT i
LOCATE 7, 34
PRINT CHR$(219); CHR$(219)
LOCATE 7, 43
PRINT CHR$(219); CHR$(219)
LOCATE 8, 35
PRINT CHR$(219); CHR$(219); CHR$(219)
LOCATE 8, 41
PRINT CHR$(219); CHR$(219); CHR$(219)
FOR i = 37 TO 41
LOCATE 9, i
PRINT CHR$(219)
NEXT i
FOR j = 10 TO 20
FOR i = 36 TO 42
LOCATE j, i
PRINT CHR$(219)
NEXT i
NEXT j
COLOR 7, 0
FOR i = 35 TO 43
LOCATE 21, i
IF i > 36 AND i < 42 THEN PRINT CHR$(196) ELSE PRINT " "
NEXT i
FOR i = 34 TO 44
LOCATE 22, i
IF i > 35 AND i < 43 THEN PRINT CHR$(196) ELSE PRINT " "
NEXT i
FOR i = 33 TO 45
LOCATE 23, i
IF i > 34 AND i < 44 THEN PRINT CHR$(196) ELSE PRINT " "
NEXT i
COLOR 15, 2
LOCATE 30, 20
PRINT "TOURNAMENT WINNER:"
COLOR 7, 2
LOCATE 30, 40
FOR i = 1 TO 32
IF in(i) = 1 THEN PRINT forename$(i); " "; surname$(i)
NEXT i
LOCATE 34, 20
PRINT "PRESS RETURN TO GO BACK TO THE MAIN MENU"
DO
LOOP UNTIL INKEY$ = CHR$(13)
COLOR 15, 2
CLS
END SUB
SUB training
os = 1
COLOR 15, 2
CLS
310 COLOR 15, 2
LOCATE 16, 32
PRINT "SELECT TRAINING TYPE"
LOCATE 20, 32
IF os = 1 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "TARGET PRACTICE"
LOCATE 22, 32
IF os = 2 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "BACK WALL RALLY"
LOCATE 24, 32
IF os = 3 THEN COLOR 2, 7 ELSE COLOR 7, 2
PRINT "RETURN TO MAIN MENU"
300 SELECT CASE INKEY$
CASE IS = u$
os = os - 1
IF os < 1 THEN os = 3
GOTO 310
CASE IS = d$
os = os + 1
IF os > 3 THEN os = 1
GOTO 310
CASE IS = CHR$(13)
CASE ELSE
GOTO 300
END SELECT
SELECT CASE os
CASE IS = 1
CALL targetPractice
CASE IS = 2
CALL backWallRally
CASE IS = 3
END SELECT
COLOR 15, 2
CLS
END SUB
SUB worldRankings
COLOR 15, 2
CLS
LOCATE 2, 5
PRINT forename$(32); " "; surname$(32); " "; day; " "; month$(month); " "; year
LOCATE 5, 5
PRINT "WORLD RANKINGS:"
LOCATE 9, 5
PRINT "RANK"
LOCATE 9, 12
PRINT "PLAYER"
LOCATE 9, 38
PRINT "RANK POINTS"
FOR i = 1 TO 32
IF i = 32 THEN COLOR 15, 2 ELSE COLOR 7, 2
LOCATE rank(i) + 10, 4
PRINT rank(i)
LOCATE rank(i) + 10, 12
PRINT forename$(i); " "; surname$(i)
LOCATE rank(i) + 10, 37
PRINT arp(i)
NEXT i
DO
LOOP UNTIL INKEY$ = CHR$(13)
COLOR 15, 2
CLS
END SUB