10 SCREEN 0, 0, 0: CLS : ON KEY(10) GOSUB 840: KEY(10) ON 20 DEFSTR Z: DIM A(9), B(9), C(24), D(7), E(18) 30 GOSUB 240: GOSUB 200 40 GOSUB 80 50 ON T(T) GOSUB 100, 280 70 IF W <> 1 THEN 50 ELSE GOSUB 770: GOTO 40 80 LOCATE 22, 26: COLOR 15, 0: PRINT "Do You Wish To Go First? ": COLOR 3, 0 90 GOSUB 120: IF Z = "Y" THEN 100 ELSE IF Z = "N" THEN 280 ELSE 90 100 LOCATE 22, 1: PRINT SPC(79); : COLOR 15, 0: LOCATE 22, 27: PRINT "Please Enter Square Number": COLOR 3, 0 110 GOSUB 120: IF Z > "0" AND Z <= "9" AND C(A(VAL(Z))) <= 0 THEN N = VAL(Z): T = 1: GOTO 130 ELSE LOCATE 23, 25: PRINT "Invalid Move. Please Try Again.": FOR A = 1 TO 2000: NEXT: LOCATE 23, 25: PRINT SPC(49); : GOTO 100 120 DEF SEG = &H40: POKE &H17, (PEEK(&H17) OR 96): Z = INKEY$: IF Z = "" THEN 120 ELSE RETURN 130 A = 6 * INT(4 - (N / 3)) - 2: B = 9 + B(N) * 14: C(A(N)) = T: ON T GOTO 180, 190 140 CLS : FOR A = 3 TO 19: LOCATE 1, 35: COLOR 15: PRINT "TIC TAC TOE": COLOR 3: LOCATE A, 19: PRINT "Û": LOCATE A, 32: PRINT "ÛÛ": LOCATE A, 46: PRINT "ÛÛ": LOCATE A, 60: PRINT "Û": NEXT 150 LOCATE 2, 19: PRINT STRING$(42, 219): LOCATE 8, 19: PRINT STRING$(42, 219): LOCATE 14, 19: PRINT STRING$(42, 219): LOCATE 20, 19: PRINT STRING$(42, 219) 160 B = 7: FOR A = 1 TO 3: LOCATE 6 * A - 1, 25: PRINT B: LOCATE 6 * A - 1, 39: PRINT B + 1: LOCATE 6 * A - 1, 53: PRINT B + 2: B = B - 3: NEXT 170 LOCATE 25, 24: COLOR 0, 7: PRINT " Strike To Leave This Game "; : COLOR 3, 0: RETURN 180 COLOR 12, 0: LOCATE A, B: PRINT "ÛÛ ÛÛ": LOCATE A + 1, B: PRINT " ÛÛÛÛ ": LOCATE A + 2, B: PRINT "ÛÛ ÛÛ": COLOR 3, 0: RETURN 190 COLOR 10, 0: LOCATE A, B: PRINT "²²²²²²": LOCATE A + 1, B: PRINT "²² ²²": LOCATE A + 2, B: PRINT "²²²²²²": COLOR 3, 0: RETURN 200 CLS : PRINT STRING$(80, 219): FOR A = 2 TO 22: LOCATE A, 1: PRINT "Û": LOCATE A, 80: PRINT "Û"; : NEXT: PRINT STRING$(80, 219); : LOCATE 4, 30: COLOR 15, 0: PRINT "T I C - T A C - T O E": LOCATE 8, 23: PRINT "Would You Like Instructions? "; : COLOR 3, 0 210 GOSUB 120: IF Z = "N" THEN 140 ELSE IF Z <> "Y" THEN 210 220 LOCATE 6, 21: PRINT "I will play you a game of TIC-TAC-TOE.": LOCATE 7, 21: PRINT "In this game I will always be ` O 'and": LOCATE 8, 21: PRINT "you will always be ` X '. You may tell": LOCATE 9, 21: PRINT "me if you would like to go first or" 230 LOCATE 10, 21: PRINT "second; however, it doesn't matter": LOCATE 11, 21: PRINT "because I can not be defeated !!!": LOCATE 14, 27: PRINT "GOOD LUCK. YOU'LL NEED IT !!": LOCATE 25, 28: COLOR 15: PRINT "Strike Any Key To Continue"; : COLOR 3: GOSUB 120: GOTO 140 240 FOR A = 1 TO 24: C(A) = 0: NEXT: FOR A = 1 TO 4: C(A - 1) = 3: C(A * 5) = 3: C(A * 5 - 1) = 3: C(A + 20) = 3: NEXT 250 FOR A = 0 TO 7: READ D(A): NEXT: FOR A = 6 TO 18: READ E(A): NEXT: FOR A = 1 TO 9: READ A(A): NEXT: T(1) = 2: T(2) = 1: FOR B = 1 TO 3: B(B) = B: B(B + 3) = B: B(B + 6) = B: NEXT: RETURN 260 DATA 1,6,5,4,-1,-6,-5,-4,7,8,9,0,0,4,5,6,0,0,1,2,3,16,17,18,11,12,13,6,7,8 270 REM * COMPUTER MOVE EVALUATION ROUTINE * 280 FOR A = 6 TO 18 290 IF C(A) <> 2 THEN 350 300 FOR B = 0 TO 7 310 IF A + 2 * D(B) < 6 OR A + 2 * D(B) > 18 THEN 340 320 IF C(A + D(B)) = 2 AND C(A + D(B) * 2) = 0 THEN N = A + D(B) * 2: W = 1: GOTO 460 330 IF C(A + D(B)) = 0 AND C(A + D(B) * 2) = 2 THEN N = A + D(B): W = 1: GOTO 460 340 NEXT 350 NEXT 360 FOR A = 6 TO 18 370 IF C(A) <> 1 THEN 430 380 FOR B = 0 TO 7 390 IF A + 2 * D(B) < 6 OR A + 2 * D(B) > 18 THEN 420 400 IF C(A + D(B)) = 1 AND C(A + D(B) * 2) = 0 THEN N = A + D(B) * 2: GOTO 460 410 IF C(A + D(B)) = 0 AND C(A + D(B) * 2) = 1 THEN N = A + D(B): GOTO 460 420 NEXT 430 NEXT 440 IF C(12) = 0 THEN N = 12: GOTO 460 450 GOTO 470 460 N = E(N): T = 2: GOTO 130 470 IF C(6) <> 1 THEN 520 480 IF C(13) <> 1 THEN 500 490 IF C(8) = 0 THEN N = 8: GOTO 460 500 IF C(17) <> 1 THEN 520 510 IF C(16) = 0 THEN N = 16: GOTO 460 520 IF C(8) <> 1 THEN 570 530 IF C(11) <> 1 THEN 550 540 IF C(6) = 0 THEN N = 6: GOTO 460 550 IF C(17) <> 1 THEN 570 560 IF C(18) = 0 THEN N = 18: GOTO 460 570 IF C(16) <> 1 THEN 620 580 IF C(7) <> 1 THEN 600 590 IF C(6) = 0 THEN N = 6: GOTO 460 600 IF C(13) <> 1 THEN 620 610 IF C(18) = 0 THEN N = 18: GOTO 460 620 IF C(18) <> 1 THEN 670 630 IF C(11) <> 1 THEN 650 ELSE IF C(6) = 2 THEN 660 640 IF C(16) = 0 THEN N = 16: GOTO 460 650 IF C(7) <> 1 THEN 670 ELSE IF C(6) = 2 THEN IF C(16) = 0 THEN N = 16: GOTO 460 660 IF C(8) = 0 THEN N = 8: GOTO 460 670 IF C(6) = 1 AND C(18) = 1 OR C(8) = 1 AND C(16) = 1 THEN M = 7: GOTO 730 680 IF C(17) = 1 AND C(13) = 1 AND C(18) = 0 THEN N = 18: GOTO 460 690 FOR A = 6 TO 18 STEP 2 700 IF C(A) = 0 THEN N = A: GOTO 460 710 NEXT 720 M = 6 730 FOR A = M TO 18 740 IF C(A) = 0 THEN N = A: GOTO 460 750 NEXT 760 RUN 770 LOCATE 22, 10: PRINT SPC(69); : LOCATE 22, 35: COLOR 31: IF W = 1 THEN PRINT "I Win !!!!"; : GOTO 830 ELSE LOCATE 22, 36: PRINT "Tie Game" 780 LOCATE 23, 23: COLOR 15: PRINT "Would You Like To Play Again? "; : COLOR 3 790 GOSUB 120: IF Z = "Y" THEN RESTORE: W = 0: GOSUB 140: GOTO 240 ELSE IF Z <> "N" THEN 790 830 FOR A = 1 TO 5: SOUND 500, 1: SOUND 100, 1: NEXT: GOTO 780 840 KEY(10) OFF: LOCATE 25, 22: COLOR 14, 0: PRINT "Do You Wish To Leave This Game? "; : COLOR 3, 0 860 LOCATE 25, 1: PRINT SPC(78); : COLOR 0, 7: LOCATE 25, 24: PRINT " Strike To Leave This Game "; : Z = "": COLOR 3, 0: KEY(10) ON: RETURN