DECLARE SUB ResetScores () DECLARE SUB GetScores () DECLARE SUB NewScoreC (sw!) DECLARE SUB NewScore (SCORE!) DECLARE SUB MoveBall (x!, Y!, MX!, MY!) DECLARE SUB DrawScreen (scrn!) DECLARE SUB OnePlay () DECLARE SUB TwoPlay () DECLARE SUB CheckRange (Hover!) DECLARE SUB MouseMenu (Menu!, Selection!, Buttons$) DECLARE SUB MovePointer () DECLARE SUB DrawPointer () DECLARE SUB MouseRange (x1%, y1%, x2%, y2%) DECLARE SUB MousePut (PUTX%, PUTY%) DECLARE SUB MouseStatus (Lbutton!, Rbutton!, XMouse!, YMouse!) DECLARE SUB MouseDriver (ax%, Bx%, cx%, dx%) DECLARE FUNCTION MouseInit% () DECLARE SUB box (x1!, y1!, x2!, y2!, BType!) DECLARE SUB DrawMenu (Menu!) DECLARE SUB ExtractButtons (strng$) DECLARE SUB CheckButtons (Hover!, Bpress!, Olbutton!, Chosen!) DIM SHARED MOUSE$, ax%, Bx%, cx%, dx%, Lbutton, Rbutton, XMouse, YMouse, OXmouse, OYmouse DIM SHARED NoButtons, SPEED: NoButtons = 5 DIM SHARED Range(1 TO NoButtons, 1 TO 5), back(1 TO 10000), ClearPointer(1 TO 100), Bat1D(1 TO 1000), Bat1U(1 TO 1000), Bat2D(1 TO 1000), Bat2U(1 TO 1000), Ball(1 TO 100) DIM SHARED S(1 TO 10), N$(1 TO 10) CALL GetScores data$ = "5589E58B5E0C8B07508B5E0A8B07508B5E088B0F8B5E068B175B581E07CD33538B5E0C8907588B5E0A89078B5E08890F8B5E0689175DCA0800" MOUSE$ = SPACE$(57) FOR x = 1 TO 57 a$ = MID$(data$, x * 2 - 1, 2) H$ = CHR$(VAL("&H" + a$)) MID$(MOUSE$, x, 1) = H$ NEXT x ms% = MouseInit SCREEN 9 LOCATE 11, 26: PRINT "CALCULATING SPEED OF PROCESSOR" LOCATE 13, 34: PRINT "PLEASE WAIT..." t = TIMER FOR counter = 1 TO 4000 LINE (0, 0)-(9, 9), 0, BF NEXT counter TIME = TIMER - t SPEED = (TIME + 1D-99) * 1.4 PALETTE 0, 4 PALETTE 6, 0 COLOR 11 CALL DrawScreen(0) DO CALL MouseMenu(1, choice, "378,112,397,127,R:358,112,377,127,R:252,136,393,158,F:252,163,393,186,F:252,192,393,214,F") SELECT CASE choice CASE 2 DO LINE (0, 0)-(640, 350), 6, BF CALL MouseMenu(4, choisir, "255,265,385,281,R") LOOP UNTIL choisir = 1 CALL DrawScreen(0) CASE 3: CALL OnePlay CASE 4: CALL TwoPlay CASE 5 DO LINE (0, 0)-(640, 350), 6, BF CALL MouseMenu(2, choisir, "180,265,300,281,R:348,265,464,281,R") IF choisir = 2 THEN OPEN "SCORES.DAT" FOR RANDOM AS #1 CALL ResetScores: CLOSE #1 END IF LOOP UNTIL choisir = 1 CALL DrawScreen(0) END SELECT LOOP UNTIL choice = 1 SUB box (x1, y1, x2, y2, BType) SELECT CASE BType CASE -1: LINE (x1, y2)-(x1, y1), 12: LINE (x1, y1)-(x2, y1), 12: LINE (x2, y1 + 1)-(x2, y2), 8: LINE (x2, y2)-(x1 + 1, y2), 8: LINE (x1 + 1, y1 + 1)-(x2 - 1, y2 - 1), 4, BF CASE 0: LINE (x1, y2)-(x1, y1), 12: LINE (x1, y1)-(x2, y1), 12: LINE (x2, y1 + 1)-(x2, y2), 8: LINE (x2, y2)-(x1 + 1, y2), 8 CASE 1: LINE (x1, y2)-(x1, y1), 8: LINE (x1, y1)-(x2, y1), 8: LINE (x2, y1 + 1)-(x2, y2), 12: LINE (x2, y2)-(x1 + 1, y2), 12 CASE 2: LINE (x1, y1)-(x2, y2), 0, B END SELECT END SUB SUB CheckButtons (Hover, Bpress, Olbutton, Chosen) OHover = Hover CheckRange Hover IF Hover = 0 AND Lbutton = -1 AND Olbutton = 0 THEN IF Bpress = 0 THEN Bpress = -1 IF OHover > 0 THEN IF Hover = 0 AND Range(OHover, 5) = 1 AND Lbutton = -1 AND Olbutton = -1 THEN IF Bpress = 0 THEN Bpress = -1 END IF IF Hover > 0 THEN IF Lbutton = 0 AND Olbutton = -1 AND ((Bpress = Hover AND Range(Hover, 5) = 2) OR (Bpress = 0 AND Range(Hover, 5) = 1)) THEN Chosen = Hover END IF IF Lbutton = 0 THEN Bpress = 0 IF Hover > 0 THEN IF Range(Hover, 5) = 2 AND Olbutton = 0 AND Lbutton = -1 THEN PUT (OXmouse, OYmouse), ClearPointer, PSET box Range(Hover, 1), Range(Hover, 2), Range(Hover, 3), Range(Hover, 4), 1 Bpress = Hover GET (XMouse, YMouse)-(XMouse + 26, YMouse + 20), ClearPointer DrawPointer END IF END IF IF OHover <> Hover THEN '-------------------------------------------- PUT (OXmouse, OYmouse), ClearPointer, PSET IF OHover > 0 THEN IF OHover > 0 AND Lbutton = -1 AND Olbutton = -1 AND Bpress = OHover AND Range(OHover, 5) = 2 THEN box Range(OHover, 1), Range(OHover, 2), Range(OHover, 3), Range(OHover, 4), 0 Bpress = OHover * 100 END IF END IF IF Hover > 0 THEN IF Bpress = Hover * 100 AND Range(Hover, 5) = 2 THEN box Range(Hover, 1), Range(Hover, 2), Range(Hover, 3), Range(Hover, 4), 1 Bpress = Hover END IF END IF FOR count = 1 TO NoButtons IF Range(count, 5) = 1 THEN box Range(count, 1), Range(count, 2), Range(count, 3), Range(count, 4), 2: IF Bpress = 0 THEN Bpress = -1 NEXT count IF Hover > 0 THEN IF Range(Hover, 5) = 1 THEN box Range(Hover, 1), Range(Hover, 2), Range(Hover, 3), Range(Hover, 4), 0 END IF END IF GET (XMouse, YMouse)-(XMouse + 26, YMouse + 20), ClearPointer DrawPointer END IF '----------------------------------- IF Hover > 0 THEN IF Lbutton = -1 AND Range(Hover, 5) = 1 AND Bpress = 0 AND Olbutton = 0 THEN PUT (OXmouse, OYmouse), ClearPointer, PSET box Range(Hover, 1), Range(Hover, 2), Range(Hover, 3), Range(Hover, 4), 1 GET (XMouse, YMouse)-(XMouse + 26, YMouse + 20), ClearPointer DrawPointer END IF END IF Olbutton = Lbutton END SUB SUB CheckRange (Hover) Hover = 0 FOR x = 1 TO NoButtons IF Range(x, 5) > 0 THEN IF XMouse >= Range(x, 1) AND XMouse <= Range(x, 3) AND YMouse >= Range(x, 2) AND YMouse <= Range(x, 4) THEN Hover = x: EXIT FOR END IF NEXT x END SUB SUB DrawMenu (Menu) PUT (OXmouse, OYmouse), ClearPointer, PSET SELECT CASE Menu CASE 1 box 245, 110, 400, 129, -1 box 245, 130, 400, 220, -1 FOR x = 1 TO NoButtons IF Range(x, 5) = 2 THEN box Range(x, 1), Range(x, 2), Range(x, 3), Range(x, 4), -1 END IF NEXT x DRAW "BM 362,124 C11 BU6 BR R2 U L2 E R2 H R5 F NL2 F NL2 D NL2 G L3 F L3 D R3 BD2 L3 D R3" DRAW "BM 382,124 C11 NR2 E NR2 E NR2 E NR2 E NR2 E NR2 E NR2 E NR2 E NR2 E NR2 BL7 NL2 F NL2 F NL2 F NL2 F NL2 F NL2 F NL2 F NL2 F NL2 F NL2" LOCATE 9, 34: PRINT "Menu" LOCATE 11, 34: PRINT "Pong One Player" LOCATE 13, 34: PRINT "Pong Two Player" LOCATE 15, 34: PRINT "View High Scores" CASE 2 box 172, 76, 472, 259, -1 box 172, 260, 472, 285, -1 FOR x = 1 TO NoButtons IF Range(x, 5) = 2 THEN box Range(x, 1), Range(x, 2), Range(x, 3), Range(x, 4), -1 END IF NEXT x DRAW "BM235,258 C12 NU181 BR164 U181 BF27 NR45 L253" LOCATE 7, 24: PRINT "PLACE": LOCATE 7, 32: PRINT "NAME": LOCATE 7, 52: PRINT "SCORE" LOCATE 9, 25: PRINT "1st": LOCATE 10, 25: PRINT "2nd": LOCATE 11, 25: PRINT "3rd": LOCATE 12, 25: PRINT "4th": LOCATE 13, 25: PRINT "5th": LOCATE 14, 25: PRINT "6th": LOCATE 15, 25: PRINT "7th": LOCATE 16, 25: PRINT "8th": LOCATE 17, 25: PRINT "9th": LOCATE 18, 25: PRINT "10th": LOCATE 20, 25: PRINT "Back To Menu" LOCATE 20, 46: PRINT "Clear Scores" 'COLOR 10, 4 LOCATE 9, 32: PRINT N$(1): LOCATE 9, 51: PRINT S(1) LOCATE 10, 32: PRINT N$(2): LOCATE 10, 51: PRINT S(2) LOCATE 11, 32: PRINT N$(3): LOCATE 11, 51: PRINT S(3) LOCATE 12, 32: PRINT N$(4): LOCATE 12, 51: PRINT S(4) LOCATE 13, 32: PRINT N$(5): LOCATE 13, 51: PRINT S(5) LOCATE 14, 32: PRINT N$(6): LOCATE 14, 51: PRINT S(6) LOCATE 15, 32: PRINT N$(7): LOCATE 15, 51: PRINT S(7) LOCATE 16, 32: PRINT N$(8): LOCATE 16, 51: PRINT S(8) LOCATE 17, 32: PRINT N$(9): LOCATE 17, 51: PRINT S(9) LOCATE 18, 32: PRINT N$(10): LOCATE 18, 51: PRINT S(10) CASE 3 box 245, 124, 400, 143, -1 box 245, 144, 400, 205, -1 FOR x = 1 TO NoButtons IF Range(x, 5) = 2 THEN box Range(x, 1), Range(x, 2), Range(x, 3), Range(x, 4), -1 END IF NEXT x DRAW "BM 382,138 C11 NR2 E NR2 E NR2 E NR2 E NR2 E NR2 E NR2 E NR2 E NR2 E NR2 BL7 NL2 F NL2 F NL2 F NL2 F NL2 F NL2 F NL2 F NL2 F NL2 F NL2" LOCATE 10, 33: PRINT "Paused..." LOCATE 12, 37: PRINT "Continue" LOCATE 14, 33: PRINT "Back To Main Menu" CASE 4 box 120, 37, 520, 62, -1 box 120, 63, 520, 260, -1 box 120, 261, 520, 285, -1 FOR x = 1 TO NoButtons IF Range(x, 5) = 2 THEN box Range(x, 1), Range(x, 2), Range(x, 3), Range(x, 4), -1 END IF NEXT x LOCATE 4, 35: PRINT "Instructions" LOCATE 6, 19: PRINT "When playing one player pong you play against" LOCATE 7, 19: PRINT "the computer. Each time you hit the ball back" LOCATE 8, 19: PRINT "you get 1 point. As soon as you miss the ball" LOCATE 9, 19: PRINT "it is game over. In two player pong you score" LOCATE 10, 19: PRINT "points if the opponant mises the ball.Whoever" LOCATE 11, 19: PRINT "reaches a score of 10 first wins." LOCATE 13, 19: PRINT "Controlls:" LOCATE 14, 19: PRINT "Up arrowkey ------------------ Up (Player 1)" LOCATE 15, 19: PRINT "Down arrowkey ---------------- Down(Player 1)" LOCATE 16, 19: PRINT "A ---------------------------- Up (Player 2)" LOCATE 17, 19: PRINT "\, Z or X -------------------- Down(Player 2)" LOCATE 18, 19: PRINT "Rt mouse button or Escape ---- Pause" LOCATE 20, 35: PRINT "Back To Menu" END SELECT GET (XMouse, YMouse)-(XMouse + 26, YMouse + 20), ClearPointer DrawPointer END SUB SUB DrawPointer coord$ = STR$(XMouse) + "," + STR$(YMouse) DRAW "BM" + coord$ + "C10 FR2 DR2 G NR4 F NR6 F NR7 F NR9 F R10 F NL7 NR2 F NL3 R4 D NL R2 BL4" DRAW "C2 L11 H NR6 H NR2 BF3 BD" DRAW "C10 ND H ND7 H ND10 H D3 BD" DRAW "C2 ND5 L ND3 U5 H ND7 H ND6 H ND5 H ND4 H ND3 H ND2 L" END SUB SUB DrawScreen (scrn) LINE (0, 0)-(640, 350), 4, BF LINE (10, 30)-(630, 342), 6, BF DRAW "BM 11,342 C12 R619 U312 C8 L620 D312" LOCATE 1, 39: PRINT "PONG!" SELECT CASE scrn CASE 1 DRAW "BM 623,341 C9 NU310 BR C1 NU310 R NU310" DRAW "BM 15,341 C9 NU310 BR C1 NU310 R NU310" DRAW "C14 BM628,163 NL8 H8 L5 D62 R5 E8 L8 U46 BL P14,14" DRAW "C14 BM12,163 NR8 E8 R5 D62 L5 H8 R8 U46 BR P14,14" LOCATE 2, 65: PRINT "SCORE: 0" CIRCLE (40, 185), 11, 10: PAINT (40, 185), 10, 10 CIRCLE (49, 185), 6, 14, 1.57, 4.71 CIRCLE (49, 185), 7, 14, 1.57, 4.71 CIRCLE (31, 185), 6, 14, 4.71, 1.57 CIRCLE (31, 185), 7, 14, 4.71, 1.57 GET (29, 177)-(51, 193), Ball CASE 2: DRAW "BM 623,341 C9 NU310 BR C1 NU310 R NU310" DRAW "BM 15,341 C9 NU310 BR C1 NU310 R NU310" DRAW "C14 BM628,163 NL8 H8 L5 D62 R5 E8 L8 U46 BL P14,14" DRAW "C14 BM12,163 NR8 E8 R5 D62 L5 H8 R8 U46 BR P14,14" LOCATE 2, 3: PRINT "SCORE: 0" LOCATE 2, 65: PRINT "SCORE: 0" CIRCLE (40, 185), 11, 10: PAINT (40, 185), 10, 10 CIRCLE (49, 185), 6, 14, 1.57, 4.71 CIRCLE (49, 185), 7, 14, 1.57, 4.71 CIRCLE (31, 185), 6, 14, 4.71, 1.57 CIRCLE (31, 185), 7, 14, 4.71, 1.57 GET (29, 177)-(51, 193), Ball END SELECT END SUB SUB ExtractButtons (strng$) FOR count = 1 TO NoButtons FOR countt = 1 TO 5 Range(count, countt) = 0 NEXT countt NEXT count Y = 1 x = 1 FOR count = 1 TO LEN(strng$) IF MID$(strng$, count, 1) = "," OR MID$(strng$, count, 1) = ":" THEN IF Y = 5 THEN x = x + 1: Y = 1 ELSE Y = Y + 1 END IF IF MID$(strng$, count, 1) >= CHR$(48) AND MID$(strng$, count, 1) <= CHR$(57) THEN Range(x, Y) = Range(x, Y) * 10 + VAL(MID$(strng$, count, 1)) END IF IF MID$(strng$, count, 1) = "R" THEN Range(x, 5) = 2 IF MID$(strng$, count, 1) = "F" THEN Range(x, 5) = 1 NEXT count END SUB SUB GetScores OPEN "SCORES.DAT" FOR RANDOM AS #1 IF LOF(1) = 0 THEN CALL ResetScores ELSE GET #1, 1, data$ LET dat$ = "" FOR count = 1 TO LEN(data$) LET dat$ = dat$ + CHR$(ASC(MID$(data$, count, 1)) + 30) NEXT count countt = 1 FOR count = 1 TO LEN(dat$) byte$ = MID$(dat$, count, 1) IF byte$ = CHR$(31) THEN IF nam = 0 THEN N$(countt) = rec$: nam = 1 ELSE S(countt) = VAL(rec$): nam = 0: countt = countt + 1 rec$ = "" ELSE rec$ = rec$ + byte$ END IF NEXT count END IF CLOSE #1 END SUB SUB MouseDriver (ax%, Bx%, cx%, dx%) DEF SEG = VARSEG(MOUSE$) MOUSE% = SADD(MOUSE$) CALL Absolute(ax%, Bx%, cx%, dx%, MOUSE%) END SUB FUNCTION MouseInit% ax% = 0 MouseDriver ax%, 0, 0, 0 MouseInit% = ax% END FUNCTION SUB MouseMenu (Menu, Selection, Buttons$) Selection = 0 CALL ExtractButtons(Buttons$) SELECT CASE Menu CASE 1: MousePut 320, 155 CASE 2: MousePut 240, 275 CASE 3: MousePut 320, 165 CASE 4: MousePut 320, 275 END SELECT MouseRange 0, 0, 613, 329 OXmouse = XMouse OYmouse = YMouse GET (XMouse, YMouse)-(XMouse + 26, YMouse + 20), ClearPointer DrawMenu (Menu) DO MouseStatus Lbutton, Rbutton, XMouse, YMouse MovePointer CheckButtons z, zz, zzz, Selection LOOP UNTIL Selection > 0 OR INKEY$ = CHR$(27) IF Selection = 0 THEN Selection = 1 END SUB SUB MousePut (PUTX%, PUTY%) ax% = 4 cx% = PUTX% dx% = PUTY% MouseDriver ax%, 0, cx%, dx% END SUB SUB MouseRange (x1%, y1%, x2%, y2%) ax% = 7 cx% = x1% dx% = x2% MouseDriver ax%, 0, cx%, dx% ax% = 8 cx% = y1% dx% = y2% MouseDriver ax%, 0, cx%, dx% END SUB SUB MouseStatus (Lbutton, Rbutton, XMouse, YMouse) ax% = 3 MouseDriver ax%, Bx%, cx%, dx% Lbutton = ((Bx% AND 1) <> 0) Rbutton = ((Bx% AND 2) <> 0) XMouse = cx% YMouse = dx% END SUB SUB MoveBall (x, Y, MX, MY) x = x + MX: Y = Y + MY PUT (x - 11, Y - 8), Ball, PSET IF MX > 0 THEN LINE (x - 12, Y - 8)-(x - 12 - MX, Y + 8), 6, BF IF MX < 0 THEN LINE (x + 12, Y - 8)-(x + 12 - MX, Y + 8), 6, BF IF MY > 0 THEN LINE (x - 11, Y - 9)-(x + 11, Y - 9 - MY), 6, BF IF MY < 0 THEN LINE (x - 11, Y + 9)-(x + 11, Y + 9 - MY), 6, BF END SUB SUB MovePointer IF OXmouse <> XMouse OR OYmouse <> YMouse THEN PUT (OXmouse, OYmouse), ClearPointer, PSET OXmouse = XMouse: OYmouse = YMouse GET (XMouse, YMouse)-(XMouse + 26, YMouse + 20), ClearPointer DrawPointer END IF END SUB SUB NewScore (SCORE) FOR count = 10 TO 1 STEP -1 IF SCORE > S(count) THEN place = count NEXT count SELECT CASE place CASE 1: place$ = " 1st" CASE 2: place$ = " 2nd" CASE 3: place$ = " 3rd" CASE IS >= 4: place$ = STR$(place) + "th" END SELECT box 170, 150, 470, 188, -1 LOCATE 12, 24: PRINT "Congratulations you came"; place$; " place." LOCATE 13, 24: PRINT "Enter your name:" DO character$ = INPUT$(1) IF character$ = CHR$(8) AND LEN(NAME$) > 0 THEN NAME$ = LEFT$(NAME$, LEN(NAME$) - 1) LOCATE 13, 41: PRINT " " END IF IF character$ = CHR$(13) THEN length = 0: FOR count = 1 TO LEN(NAME$) IF ASC(MID$(NAME$, count, 1)) >= 33 AND ASC(MID$(NAME$, count, 1)) < 126 THEN length = 1 NEXT count IF length = 1 THEN EXIT DO ELSE NAME$ = "" END IF IF ASC(character$) >= 32 AND ASC(character$) < 126 AND LEN(NAME$) < 18 THEN NAME$ = NAME$ + character$ END IF LOCATE 13, 41: PRINT NAME$ LOOP SELECT CASE SCORE CASE IS > S(1): CALL NewScoreC(2): N$(1) = NAME$: S(1) = SCORE CASE S(2) + 1 TO S(1): CALL NewScoreC(3): N$(2) = NAME$: S(2) = SCORE CASE S(3) + 1 TO S(2): CALL NewScoreC(4): N$(3) = NAME$: S(3) = SCORE CASE S(4) + 1 TO S(3): CALL NewScoreC(5): N$(4) = NAME$: S(4) = SCORE CASE S(5) + 1 TO S(4): CALL NewScoreC(6): N$(5) = NAME$: S(5) = SCORE CASE S(6) + 1 TO S(5): CALL NewScoreC(7): N$(6) = NAME$: S(6) = SCORE CASE S(7) + 1 TO S(6): CALL NewScoreC(8): N$(7) = NAME$: S(7) = SCORE CASE S(8) + 1 TO S(7): CALL NewScoreC(9): N$(8) = NAME$: S(8) = SCORE CASE S(9) + 1 TO S(8): CALL NewScoreC(10): N$(9) = NAME$: S(9) = SCORE CASE S(10) + 1 TO S(9): N$(10) = NAME$: S(10) = SCORE END SELECT dat$ = "" FOR count = 1 TO 10 dat$ = dat$ + N$(count) + CHR$(31) + STR$(S(count)) + CHR$(31) NEXT count data$ = "" FOR count = 1 TO LEN(dat$) LET data$ = data$ + CHR$(ASC(MID$(dat$, count, 1)) - 30) NEXT count OPEN "SCORES.DAT" FOR RANDOM AS #1 PUT #1, 1, data$ CLOSE #1 LINE (170, 150)-(470, 188), 6, BF END SUB SUB NewScoreC (NUMBER) FOR count = 10 TO NUMBER STEP -1 N$(count) = N$(count - 1) S(count) = S(count - 1) NEXT count END SUB SUB OnePlay CALL DrawScreen(1) Pos1 = 124 Pos2 = 124 x = 40 Y = 185 MX = SPEED MY = 0 GET (615, 124)-(628, 217), Bat1D GET (615, 155)-(628, 248), Bat1U GET (12, 124)-(25, 217), Bat2D GET (12, 155)-(25, 248), Bat2U DO MouseStatus Lbutton, Rbutton, XMouse, YMouse SELECT CASE INKEY$ CASE CHR$(0) + "H": IF Pos1 > 0 THEN Pos1 = Pos1 - 31: PUT (615, Pos1 + 31), Bat1U, PSET CASE CHR$(0) + "P": IF Pos1 < 248 THEN Pos1 = Pos1 + 31: PUT (615, Pos1), Bat1D, PSET CASE CHR$(27): Rbutton = -1 END SELECT IF Y < Pos2 + 46 AND Pos2 > 0 THEN Pos2 = Pos2 - 31: PUT (12, Pos2 + 31), Bat2U, PSET IF Y > Pos2 + 78 AND Pos2 < 248 THEN Pos2 = Pos2 + 31: PUT (12, Pos2), Bat2D, PSET IF Rbutton = -1 THEN GET (245, 124)-(400, 205), back DO CALL MouseMenu(3, sel, "378,126,397,141,R:252,150,393,172,F:252,177,393,200,F") SELECT CASE sel CASE 1: END CASE 3 IF SCORE > S(10) THEN PUT (OXmouse, OYmouse), ClearPointer, PSET PUT (245, 124), back, PSET LINE (x - 11, Y - 8)-(x + 11, Y + 8), 6, BF CALL NewScore(SCORE) END IF PUT (OXmouse, OYmouse), ClearPointer, PSET LINE (x - 11, Y - 8)-(x + 11, Y + 8), 6, BF EXIT SUB END SELECT LOOP UNTIL sel = 2 PUT (OXmouse, OYmouse), ClearPointer, PSET PUT (245, 124), back, PSET END IF IF x > 601 - ((MX ^ 2) ^ .5) AND x < 602 AND Y > Pos1 + 21 AND Y < Pos1 + 103 AND MX > 0 THEN MX = -MX: MX = MX * 1.01: MY = ((INT(RND * 21) - 10) / 50) * MX SCORE = SCORE + 1 LOCATE 2, 71: PRINT SCORE END IF IF x < 38 + ((MX ^ 2) ^ .5) AND MX < 0 THEN MX = -MX: MX = MX * 1.01: MY = ((INT(RND * 21) - 10) / 50) * MX IF x >= 602 THEN LINE (x - 11, Y - 8)-(x + 11, Y + 8), 6, BF IF SCORE > S(10) THEN CALL NewScore(SCORE) EXIT SUB END IF IF Y > 332 AND MY > 0 THEN MY = -MY IF Y < 40 AND MY < 0 THEN MY = -MY CALL MoveBall(x, Y, MX, MY) LOOP END SUB SUB ResetScores FOR count = 1 TO 10 N$(count) = "": S(count) = 0 NEXT count dat$ = "" FOR count = 1 TO 10 dat$ = dat$ + N$(count) + CHR$(31) + STR$(S(count)) + CHR$(31) NEXT count data$ = "" FOR count = 1 TO LEN(dat$) LET data$ = data$ + CHR$(ASC(MID$(dat$, count, 1)) - 30) NEXT count PUT #1, 1, data$ END SUB SUB TwoPlay CALL DrawScreen(2) Pos1 = 124 Pos2 = 124 x = 40 Y = 185 MX = SPEED MY = 0 Score1 = 0 Score2 = 0 GET (615, 124)-(628, 217), Bat1D GET (615, 155)-(628, 248), Bat1U GET (12, 124)-(25, 217), Bat2D GET (12, 155)-(25, 248), Bat2U DO MouseStatus Lbutton, Rbutton, XMouse, YMouse SELECT CASE INKEY$ CASE CHR$(0) + "H": IF Pos1 > 0 THEN Pos1 = Pos1 - 31: PUT (615, Pos1 + 31), Bat1U, PSET CASE CHR$(0) + "P": IF Pos1 < 248 THEN Pos1 = Pos1 + 31: PUT (615, Pos1), Bat1D, PSET CASE "A", "a": IF Pos2 > 0 THEN Pos2 = Pos2 - 31: PUT (12, Pos2 + 31), Bat2U, PSET CASE "Z", "z", "Ý", "\", "X", "x": IF Pos2 < 248 THEN Pos2 = Pos2 + 31: PUT (12, Pos2), Bat2D, PSET CASE CHR$(27): Rbutton = -1 END SELECT IF Rbutton = -1 THEN GET (245, 124)-(400, 205), back DO CALL MouseMenu(3, sel, "378,126,397,141,R:252,150,393,172,F:252,177,393,200,F") SELECT CASE sel CASE 1: END CASE 3: LINE (x - 11, Y - 8)-(x + 11, Y + 8), 6, BF PUT (OXmouse, OYmouse), ClearPointer, PSET IF Score1 > Score2 THEN LOCATE 1, 3: PRINT "LOSER": LOCATE 1, 65: PRINT "WINNER" IF Score2 > Score1 THEN LOCATE 1, 3: PRINT "WINNER": LOCATE 1, 65: PRINT "LOSER" IF Score1 = Score2 THEN LOCATE 1, 3: PRINT "DRAW": LOCATE 1, 65: PRINT "DRAW" EXIT SUB END SELECT LOOP UNTIL sel = 2 PUT (OXmouse, OYmouse), ClearPointer, PSET PUT (245, 124), back, PSET END IF IF x > 601 - ((MX ^ 2) ^ .5) AND x < 602 AND Y > Pos1 + 21 AND Y < Pos1 + 103 AND MX > 0 THEN MX = -MX: MX = MX * 1.01: MY = ((INT(RND * 21) - 10) / 50) * MX IF x > 37 AND x < 38 + ((MX ^ 2) ^ .5) AND Y > Pos2 + 21 AND Y < Pos2 + 103 AND MX < 0 THEN MX = -MX: MX = MX * 1.01: MY = ((INT(RND * 21) - 10) / 50) * MX IF x >= 602 THEN LINE (x - 11, Y - 8)-(x + 11, Y + 8), 6, BF x = 40 Y = Pos2 + 62 MY = 0 MX = MX * .95 Score2 = Score2 + 1 LOCATE 2, 9: PRINT Score2 IF Score2 = 10 THEN LOCATE 1, 3: PRINT "WINNER" LOCATE 1, 65: PRINT "LOSER" EXIT SUB END IF END IF IF x <= 37 THEN LINE (x - 11, Y - 8)-(x + 11, Y + 8), 6, BF x = 600 Y = Pos1 + 62 MY = 0 MX = MX * .95 Score1 = Score1 + 1 LOCATE 2, 71: PRINT Score1 IF Score1 = 10 THEN LOCATE 1, 3: PRINT "LOSER" LOCATE 1, 65: PRINT "WINNER" EXIT SUB END IF END IF IF Y > 332 AND MY > 0 THEN MY = -MY IF Y < 40 AND MY < 0 THEN MY = -MY CALL MoveBall(x, Y, MX, MY) LOOP END SUB