10 ' SET UP RANDOM 20 CLS 30 PRINT@40*2+11,"NAUGHTS & CROSSES" 40 PRINT@40*4+18,"BY" 50 PRINT@40*6+15,"BOB JACK" 60 X1=VAL(RIGHT$(TIME$,2)) 70 X2=VAL(MID$(TIME$,4,2)) 80 X4=(X2*20)+X1 90 FOR I=1 TO X4 100 DUMMY=RND(1) 110 NEXT I 120 ' MAIN LOOP 130 CLS 140 GOSUB 1750 150 IF RND(1)>.5 THEN 170 160 GOSUB 230 170 GOSUB 400 180 GOTO 160 190 ' 200 ' - - - LOGIC - - - 210 ' 220 ' GET PLAYER MOVE 230 V=4 240 PRINT@40*V+3,"WHAT IS YOUR MOVE? "; 250 AW$=INPUT$(1) 260 A=VAL(AW$) 270 IF A<1 OR A>9 THEN 250 280 IF M(A)<>0 THEN 250 290 GOSUB 1570 300 ' PROCESS MOVE 310 M(A)=1 320 MV=MV+1 330 GOSUB 880 340 GOSUB 2100 350 GOSUB 740 360 IF H=1 THEN 1010 370 IF MV=9 THEN 1290 380 RETURN 390 ' GET COMPUTER MOVE 400 V=4 410 PRINT@40*V," I'M THINKING"; 420 ' CHECK FOR WIN MOVE 430 FOR CM=1 TO 9 440 IF M(CM)<> 0 THEN 480 450 M(CM)=2:GOSUB 740 460 M(CM)=0 470 IF H=1 THEN 610 480 NEXT CM 490 ' CHECK FOR BLOCK MOVE 500 FOR CM=1 TO 9 510 IF M(CM)<>0 THEN 550 520 M(CM)=1:GOSUB 740 530 M(CM)=0 540 IF H=1 THEN 610 550 NEXT CM 560 ' ELSE GET BLOCK MOVE 570 CM=INT(RND(1)*9)+1 580 IF CM<1 OR CM>9 THEN 570 590 IF M(CM)<>0 THEN 570 600 ' PROCESS COMPUTER MOVE 610 GOSUB 1570 620 PRINT@40*V+3,"MY MOVE IS";CM 630 A=CM 640 M(A)=2 650 MV=MV+1 660 GOSUB 880 670 GOSUB 2190 680 GOSUB 740 690 IF H=1 THEN 1150 700 IF MV=9 THEN 1290 710 GOSUB 1570 720 RETURN 730 ' CHECK FOR WIN 740 IF M(5)=0 THEN 790 750 IF M(1)=M(5) AND M(5)=M(9) THEN 860 760 IF M(2)=M(5) AND M(5)=M(8) THEN 860 770 IF M(3)=M(5) AND M(5)=M(7) THEN 860 780 IF M(4)=M(5) AND M(5)=M(6) THEN 860 790 IF M(1)=0 THEN 820 800 IF M(1)=M(2) AND M(2)=M(3) THEN 860 810 IF M(1)=M(4) AND M(4)=M(7) THEN 860 820 IF M(9)=0 THEN 850 830 IF M(7)=M(8) AND M(8)=M(9) THEN 860 840 IF M(3)=M(6) AND M(6)=M(9) THEN 860 850 H=0:RETURN 860 H=1:RETURN 870 ' FIND SCREEN POSITION 880 IF A=9 THEN X1=S+44:Y1=10:RETURN 890 IF A=7 THEN X1=S:Y1=10:RETURN 900 IF A=8 THEN X1=S+22:Y1=10:RETURN 910 IF A=6 THEN X1=S+44:Y1=32:RETURN 920 IF A=5 THEN X1=S+22:Y1=32:RETURN 930 IF A=4 THEN X1=S:Y1=32:RETURN 940 IF A=3 THEN X1=S+44:Y1=54:RETURN 950 IF A=2 THEN X1=S+22:Y1=54:RETURN 960 IF A=1 THEN X1=S:Y1=54:RETURN 970 ' 980 ' DISPLAY 990 ' 1000 ' PLAYER WINS 1010 CLS 1020 SW=0 1030 FOR X=1 TO 7 1040 IF SW=0 THEN SW=1:CALL 17001:GOTO 1060 1050 IF SW=1 THEN SW=0:CALL 17006 1060 PRINT@40*3+11,STRING$(17," ") 1070 PRINT@40*4+11," YOU'RE A WINNER " 1080 PRINT@40*5+11,STRING$(17," ") 1090 GOSUB 1600 1100 NEXT X 1110 CALL 17006 1120 G1=G1+1 1130 GOTO 1420 1140 ' COMPUTER WINS 1150 CLS 1160 SW=0 1170 FOR X=1 TO 7 1180 IF SW=0 THEN SW=1:CALL 17001:GOTO 1200 1190 IF SW=1 THEN SW=0:CALL 17006 1200 PRINT@40*3+16,STRING$(7," ") 1210 PRINT@40*4+16," I WIN " 1220 PRINT@40*5+16,STRING$(7," ") 1230 GOSUB 1600 1240 NEXT X 1250 CALL 17006 1260 G3=G3+1 1270 GOTO 1420 1280 ' TIE 1290 CLS 1300 SW=0 1310 FOR X=1 TO 7 1320 IF SW=0 THEN SW=1:CALL 17001:GOTO 1340 1330 IF SW=1 THEN SW=0:CALL 17006 1340 PRINT@40*3+13,STRING$(12," ") 1350 PRINT@40*4+13," IT'S A TIE " 1360 PRINT@40*5+13,STRING$(12," ") 1370 GOSUB 1600 1380 NEXT X 1390 CALL 17006 1400 G2=G2+1 1410 ' RESET VARIABLES 1420 FOR X=1 TO 9 1430 M(X)=0 1440 NEXT X 1450 MV=0 1460 ' GAME END 1470 CLS 1480 PRINT@40*1+1,"YOU HAVE WON";G1 1490 PRINT@40*4+12,"THERE ARE";G2;"TIES" 1500 PRINT@40*7+25,"I HAVE WON"G3; 1510 FOR X=1 TO 7 1520 GOSUB 1650 1530 GOSUB 1700 1540 NEXT X 1550 GOTO 130 1560 ' CLEAR LINE 1570 PRINT@40*V,STRING$(25," ") 1580 RETURN 1590 ' SOUND 1600 FOR Y=1000 TO 2000 STEP 100 1610 SOUND Y,1 1620 NEXT Y 1630 RETURN 1640 ' SOUND 1650 FOR Y=1000 TO 2000 STEP 250 1660 SOUND Y,4 1670 NEXT Y 1680 RETURN 1690 ' SOUND 1700 FOR Y=2000 TO 1000 STEP -50 1710 SOUND Y,1 1720 NEXT Y 1730 RETURN 1740 ' DRAW CROSS HATCH 1750 S=160 1760 LINE (S+11,0)-(S+11,63) 1770 LINE (S+33,0)-(S+33,63) 1780 LINE (S-11,21)-(S+55,21) 1790 LINE (S-11,43)-(S+55,43) 1800 S1=INT(S/6):S2=40:S3=160:S4=280 1810 PRINT@S1+S2,"7"; 1820 PRINT@S1+S2+4,"8"; 1830 PRINT@S1+S2+8,"9"; 1840 PRINT@S1+S3,"4"; 1850 PRINT@S1+S3+4,"5"; 1860 PRINT@S1+S3+8,"6"; 1870 PRINT@S1+S4,"1"; 1880 PRINT@S1+S4+4,"2"; 1890 PRINT@S1+S4+8,"3"; 1900 PRINT@0,""; 1910 RETURN 1920 ' DRAW CROSSES 1930 LINE (X1-7,Y1-7)-(X1+7,Y1+7) 1940 LINE (X1-7,Y1+7)-(X1+7,Y1-7) 1950 RETURN 1960 ' DRAW NAUGHTS 1970 LINE (X1-2,Y1-7)-(X1+2,Y1-7) 1980 LINE -(X1+4,Y1-5) 1990 LINE -(X1+4,Y1+5) 2000 LINE -(X1+2,Y1+7) 2010 LINE -(X1-2,Y1+7) 2020 LINE -(X1-4,Y1+5) 2030 LINE -(X1-4,Y1-5) 2040 LINE -(X1-2,Y1-7) 2050 RETURN 2060 ' CLEAR SPOT 2070 LINE (X1-7,Y1-7)-(X1+7,Y1+8),0,BF 2080 RETURN 2090 ' FLICKER CROSSES 2100 FOR F=1 TO 7 2110 GOSUB 1930 2120 SOUND 700,1 2130 GOSUB 2070 2140 SOUND 700,1 2150 NEXT F 2160 GOSUB 1930 2170 RETURN 2180 ' FLICKER NAUGHTS 2190 FOR F=1 TO 7 2200 GOSUB 1970 2210 SOUND 2700,1 2220 GOSUB 2070 2230 SOUND 2700,1 2240 NEXT F 2250 GOSUB 1970 2260 RETURN