10 " "LOCK :CLEAR :USING :WAIT 0:CLS :CURSOR 7:PRINT "Tic-Tac-Toe"
100 CLEAR :GRAPH :SORGN :ROTATE 0:CSIZE 1
110 LINE (0,-72)-(216,-72):LINE (216,-144)-(0,-144):LINE (72,-216)-(72,0)
120 LINE (144,0)-(144,-216)
130 K=0:FOR Y=-154TO -10STEP 72:FOR X=5TO 149STEP 72:GLCURSOR (X,Y):K=K+1:LPRINT STR$ K:NEXT X:NEXT Y
140 GLCURSOR (0,-300)
145 PAUSE " Copr. 1982 Tandy Corp."
150 FOR Z=1TO 9:@(Z)=0:NEXT Z
160 A$="":INPUT "Do you want first move? ";A$:IF ASC A$=78THEN 300
170 IF ASC A$<>89THEN 160
200 GLCURSOR (0,-300):WAIT 0:CLS :PRINT "Your move";
210 Z=VAL INKEY$ :IF Z=0THEN 210
220 IF @(Z)<>0CLS :WAIT 60:PRINT "Square";Z;" is used!":BEEP 3:GOTO 200
230 PRINT Z:M$="X":P=2:GOSUB 2000:IF WLET W$="YOU":GOTO 3000
300 GLCURSOR (0,-300):PRINT "My turn...":FOR S=1TO 2:GOSUB 1000:IF ZLET S=2:NEXT S:GOTO 400
310 NEXT S
317 IF (AAND I)=2LET Z=(3*(C=0))+7*(G=0):Z=Z-7*(Z>7):IF ZTHEN 400
318 IF (CAND G)=2LET Z=(A=0)+9*(I=0):Z=Z-9*(Z>9):IF ZTHEN 400
320 T=0:RESTORE :FOR S=1TO 9:READ Z:IF @(Z)<=0LET S=9:T=1
330 NEXT S:IF T=0THEN 2400
340 DATA 7,3,9,1,5,6,4,2,8
400 PRINT "I take position";Z:M$="O":P=1:GOSUB 2000:IF W=0THEN 200
410 W$=" I":GOTO 3000
1000 FOR Z=1TO 9:IF @(Z)<>0THEN 1910
1010 GOTO 1000+100*Z
1100 IF (B=SAND C=S)OR (D=SAND G=S)OR (E=SAND I=S)THEN 1950
1110 GOTO 1910
1200 IF (A=SAND C=S)OR (E=SAND H=S)THEN 1950
1210 GOTO 1910
1300 IF (A=SAND B=S)OR (F=SAND I=S)OR (E=SAND G=S)THEN 1950
1310 GOTO 1910
1400 IF (A=SAND G=S)OR (E=SAND F=S)THEN 1950
1410 GOTO 1910
1500 IF (D=SAND F=S)OR (B=SAND H=S)OR (A=SAND H=S)OR (C=SAND G=S)THEN 1950
1510 GOTO 1910
1600 IF (D=SAND E=S)OR (C=SAND I=S)THEN 1950
1610 GOTO 1910
1700 IF (A=SAND D=S)OR (H=SAND I=S)OR (C=SAND E=S)THEN 1950
1710 GOTO 1910
1800 IF (G=SAND I=S)OR (B=SAND E=S)THEN 1950
1810 GOTO 1910
1900 IF (G=SAND H=S)OR (C=SAND F=S)OR (A=SAND E=S)THEN 1950
1910 NEXT Z:Z=0:RETURN 
1950 Y=Z:Z=9:NEXT Z:Z=Y:RETURN 
2000 U=U+1:@(Z)=P:R=4-INT ((Z+2)/3)-1:CO=3*((Z-1)/3-INT ((Z-1)/3))
2010 CSIZE 6:X=23+72*CO:Y=-72*R-57:FOR Y=YTO Y-2STEP -2:GLCURSOR (X,Y):LPRINT M$:NEXT Y
2100 W=0:FOR X=1TO 7STEP 3:IF @(X)AND @(X+1)AND @(X+2)LET W=1
2110 NEXT X
2200 FOR X=1TO 3:IF @(X)AND @(X+3)AND @(X+6)LET W=1
2210 NEXT X
2300 IF AAND EAND ILET W=1
2310 IF CAND EAND GLET W=1
2320 IF W=1OR U<9RETURN 
2400 GLCURSOR (50,-300):CSIZE 6:LPRINT "DRAW":GOTO 3010
3000 GLCURSOR (20,-300):CSIZE 4:LPRINT W$;" WIN!"
3010 GLCURSOR (0,-400)
3020 INPUT "Another game? ";G$:IF ASC G$=89THEN 100
3030 IF ASC G$<>78THEN 3020
9999 UNLOCK :END
