100 PRINT "&K": CURSOR 4,1 110 PRINT " THE BOARD:" 120 PRINT " 1 2 3";TAB(20);"X0X0X0X0X0X0X0X0X0X0X0X" 130 PRINT " 4 5 6";TAB(20);"0X0 T I C T A C 0X0" 140 PRINT " 7 8 9";TAB(20);"X0X0X0X0X0X0X0X0X0X0X0X" 150 PRINT 160 IF Z0=1 THEN 270 170 PRINT " WHEN THE MACHINE ASKS FOR YOUR MOVE," 180 PRINT " RESPOND WITH THE NUMBER" 190 PRINT " WHICH CORRESPONDS TO THE INTENDED SQUARE." 200 PRINT 210 DIM B(3,3) 220 GOTO 270 230 PRINT " DO YOU WISH TO SEE THE BOARD--(1=YES,0=NO)"; 240 INPUT (1,0)Z0 250 PRINT 260 IF Z0=1 THEN 100 270 FOR I=1 TO 3 280 FOR J=1 TO 3 290 LET B(I,J)=0 300 NEXT J 310 NEXT I 320 LET P=1 330 PRINT " SHOULD I GO FIRST (1-YES, 0-NO)"; 340 LET P9=-9 350 INPUT (1,0)F 360 PRINT 370 LET N9=1 380 IF F=0 THEN 410 390 PRINT " I PLAY X, YOU PLAY O" 400 GOTO 550 410 PRINT " YOU PLAY X, I PLAY O" 420 LET P9=P 430 PRINT " YOUR MOVE ---=>"; 460 GOSUB 1640 470 GOSUB 1930 480 GOSUB 2830 490 GOSUB 1980 500 IF M<>0 THEN 750 510 GOSUB 2830 520 GOSUB 1980 530 GOSUB 2830 540 IF M<>0 THEN 750 550 LET M=5 560 IF B(2,2)=0 THEN 750 570 IF N9=2 THEN 820 580 LET M=1 590 IF B(1,1)=0 THEN 750 600 LET M=3 610 IF B(1,3)=0 THEN 750 620 LET M=7 630 IF B(3,1)=0 THEN 750 640 LET M=9 650 IF B(3,3)=0 THEN 750 660 LET M=2 670 IF B(1,2)=0 THEN 750 680 LET M=4 690 IF B(2,1)=0 THEN 750 700 LET M=6 710 IF B(2,3)=0 THEN 750 720 LET M=8 730 IF B(3,2)=0 THEN 750 740 STOP 750 LET N9=N9+1 760 GOSUB 1650 770 PRINT " I MOVE ";M 780 GOSUB 1770 790 GOSUB 1930 800 GOSUB 2830 810 GOTO 430 820 GOSUB 1290 830 IF N8=0 THEN 750 840 GOTO 580 850 IF B(1,1)<>P THEN 920 860 IF B(1,2)<>P THEN 880 870 IF B(1,3)=P THEN 1160 880 IF B(2,1)<>P THEN 900 890 IF B(3,1)=P THEN 1160 900 IF B(2,2)<>P THEN 920 910 IF B(3,3)=P THEN 1160 920 IF B(1,2)<>P THEN 950 930 IF B(2,2)<>P THEN 950 940 IF B(3,2)=P THEN 1160 950 IF B(1,3)<>P THEN 1000 960 IF B(2,2)<>P THEN 980 970 IF B(3,1)=P THEN 1160 980 IF B(2,3)<>P THEN 1000 990 IF B(3,3)=P THEN 1160 1000 IF B(2,1)<>P THEN 1030 1010 IF B(2,2)<>P THEN 1030 1020 IF B(2,3)=P THEN 1160 1030 IF B(3,1)<>P THEN 1060 1040 IF B(3,2)<>P THEN 1060 1050 IF B(3,3)=P THEN 1160 1060 FOR I=1 TO 3 1070 FOR J=1 TO 3 1080 IF B(I,J)<>0 THEN 1110 1090 LET L9=0 1100 RETURN 1110 NEXT J 1120 NEXT I 1130 PRINT 1140 PRINT " ***** DRAW *****" 1150 GOTO 1220 1160 IF P=2 THEN 1200 1170 PRINT 1180 PRINT " ***** X WINS *****" 1190 GOTO 1220 1200 PRINT 1210 PRINT " ***** O WINS *****" 1220 PRINT 1230 PRINT 1240 PRINT 1250 PRINT " NEW GAME" 1260 PRINT 1270 LET L9=1 1280 RETURN 1290 IF B(1,1)=P9 THEN 1380 1300 IF B(1,3)=P9 THEN 1350 1310 IF B(3,1)=P9 THEN 1550 1320 IF B(3,3)<>P9 THEN 1580 1330 LET N8=1 1340 RETURN 1350 IF B(3,1)=P9 THEN 1380 1360 GOTO 1330 1370 IF B(3,3)<>P9 THEN 1300 1380 LET M=4 1390 IF B(2,1)=0 THEN 1610 1400 LET M=6 1410 IF B(2,3)=0 THEN 1610 1420 LET M=2 1430 IF B(1,2)=0 THEN 1610 1440 LET M=8 1450 IF B(3,2)=0 THEN 1610 1460 LET M=1 1470 IF B(1,1)=0 THEN 1610 1480 LET M=3 1490 IF B(1,3)=0 THEN 1610 1500 LET M=7 1510 IF B(3,1)=0 THEN 1610 1520 LET M=9 1530 IF B(3,3)=0 THEN 1610 1540 STOP 1550 LET M=3 1560 IF B(1,3)=0 THEN 1610 1570 GOTO 1380 1580 LET M=1 1590 IF B(1,1)=0 THEN 1610 1600 GOTO 1380 1610 LET N8=0 1620 RETURN 1630 REM===== SUBROUTINE TO INPUT MOVES 1640 INPUT (1,0)M: PRINT 1650 IF M>9 THEN 1670 1660 IF M>0 THEN 1690 1670 PRINT " MOVE NOT ON BOARD. MOVE AGAIN: " 1680 GOTO 1640 1690 LET M1=INT((M-.9)/3)+1 1700 LET M2=(M-3*(M1-1)-1)+1 1710 IF B(M1,M2)=0 THEN 1740 1720 PRINT " SQUARE ALREADY TAKEN. MOVE AGAIN: "; 1730 GOTO 1640 1740 LET B(M1,M2)=P 1750 RETURN 1760 REM===== SUBROUTINE TO PRINT OUT T-T-T BOARD 1770 FOR I=1 TO 3 1780 PRINT 1790 FOR J=1 TO 3 1800 IF B(I,J)<>0 THEN 1830 1810 PRINT " - "; 1820 GOTO 1870 1830 IF B(I,J)<>1 THEN 1860 1840 PRINT " X "; 1850 GOTO 1870 1860 PRINT " O "; 1870 NEXT J 1880 NEXT I 1890 PRINT 1900 PRINT 1910 RETURN 1920 REM===== SUBROUTINE TO DETECT THAT PLAYER P HAS WON 1930 GOSUB 850 1940 IF L9=1 THEN 230 1950 RETURN 1960 REM===== SUBROUTINE TO DETERMINE WINNING MOVES 1970 REM===== AND FORCED BLOCKS 1980 LET I9=0 1990 IF B(1,1)<>P THEN 2110 2000 IF B(1,2)<>P THEN 2020 2010 IF B(1,3)=0 THEN 2610 2020 IF B(1,3)<>P THEN 2040 2030 IF B(1,2)=0 THEN 2590 2040 IF B(2,2)<>P THEN 2060 2050 IF B(3,3)=0 THEN 2730 2060 IF B(3,3)<>P THEN 2070 2070 IF B(2,1)<>P THEN 2090 2080 IF B(3,1)=0 THEN 2690 2090 IF B(3,1)<>P THEN 2110 2100 IF B(2,1)=0 THEN 2630 2110 IF B(1,2)<>P THEN 2200 2120 IF B(1,1)<>P THEN 2140 2130 IF B(1,3)=0 THEN 2610 2140 IF B(1,3)<>P THEN 2160 2150 IF B(1,1)=0 THEN 2570 2160 IF B(2,2)<>P THEN 2180 2170 IF B(3,2)=0 THEN 2710 2180 IF B(3,2)<>P THEN 2200 2190 IF B(2,2)=0 THEN 2650 2200 IF B(1,3)<>P THEN 2290 2210 IF B(2,2)<>P THEN 2230 2220 IF B(3,1)=0 THEN 2690 2230 IF B(3,1)<>P THEN 2250 2240 IF B(2,2)=0 THEN 2650 2250 IF B(2,3)<>P THEN 2270 2260 IF B(3,3)=0 THEN 2730 2270 IF B(3,3)<>P THEN 2290 2280 IF B(2,3)=0 THEN 2670 2290 IF B(2,1)<>P THEN 2360 2300 IF B(3,1)<>P THEN 2320 2310 IF B(1,1)=0 THEN 2570 2320 IF B(2,2)<>P THEN 2340 2330 IF B(2,3)=0 THEN 2670 2340 IF B(2,3)<>P THEN 2360 2350 IF B(2,2)=0 THEN 2650 2360 IF B(2,2)<>P THEN 2450 2370 IF B(3,3)<>P THEN 2390 2380 IF B(1,1)=0 THEN 2570 2390 IF B(3,1)<>P THEN 2410 2400 RETURN 2410 IF B(3,2)<>P THEN 2430 2420 IF B(1,2)=0 THEN 2590 2430 IF B(2,3)<>P THEN 2450 2440 IF B(2,1)=0 THEN 2630 2450 IF B(2,3)<>P THEN 2750 2460 IF B(3,3)<>P THEN 2480 2470 IF B(1,3)=0 THEN 2610 2480 IF B(3,1)<>P THEN 2530 2490 IF B(3,2)<>P THEN 2510 2500 IF B(3,3)=0 THEN 2730 2510 IF B(3,3)<>P THEN 2530 2520 IF B(3,2)=0 THEN 2710 2530 IF B(3,2)<>P THEN 2550 2540 IF B(3,1)=0 THEN 2770 2550 LET M=0 2560 RETURN 2570 LET M=1 2580 RETURN 2590 LET M=2 2610 LET M=3 2620 RETURN 2630 LET M=4 2640 RETURN 2650 LET M=5 2660 RETURN 2670 LET M=6 2680 RETURN 2690 LET M=7 2700 RETURN 2710 LET M=8 2720 RETURN 2730 LET M=9 2740 RETURN 2750 LET I9=1 2760 GOTO 2480 2770 IF I9=0 THEN 2690 2780 IF N9=1 THEN 2690 2790 IF B(2,1)=0 THEN 2630 2800 IF B(2,3)=0 THEN 2670 2810 GOTO 2550 2820 REM===== SUBROUTINE TO FLIP-FLOP PLAYER P 2830 REM===== TIC SUBROUTINE 2840 IF P=1 THEN 2870 2850 LET P=1 2860 RETURN 2870 LET P=2 2880 RETURN 2890 END