'===========================================================================
' Subject: TIC-TAC-TOE                        Date: 12-09-95 (09:44)       
'  Author: Fred Maudelbaum                    Code: QB, QBasic, PDS        
'  Origin: comp.lang.basic.misc             Packet: GAMES.ABC
'===========================================================================
10 REM TIC-TAC-TOE
20 DIM B$(9), V(9)
30 LET V(1)=8: LET V(2)=1: LET V(3)=6
40 LET V(4)=3: LET V(5)=5: LET V(6)=7
50 LET V(7)=4: LET V(8)=9: LET V(9)=2
60 PRINT "WELCOME TO TIC-TAC-TOE"
70 PRINT "YOU ARE 'X'.  PRESS <CTRL+BREAK> TO STOP": GOTO 110
90 REM NEW GAME
100 PRINT "": PRINT "TRY AGAIN": PRINT ""
110 LET F=0: FOR I=1 TO 9: LET B$(I)=" ": NEXT I
120 REM PRINT BOARD
130 PRINT "        COLUMNS"
140 PRINT "       1   2   3"
150 PRINT "ROW 1  ";B$(1);" | ";B$(2);" | ";B$(3)
160 PRINT "       --+---+--"
170 PRINT "    2  ";B$(4);" | ";B$(5);" | ";B$(6)
180 PRINT "       --+---+--"
190 PRINT "    3  ";B$(7);" | ";B$(8);" | ";B$(9)
200 PRINT "": IF F<9 THEN GOTO 220
210 PRINT "I WIN!!": GOTO 90
220 IF F<5 THEN GOTO 250
235 PRINT "TIE GAME": GOTO 90
250 REM GET MOVE
260 PRINT "ENTER ROW & COLUMN OF YOUR MOVE": INPUT I,J
270 IF I<1 OR I>3 OR J<1 OR J>3 THEN GOTO 250
280 LET K=I+I+I+J-3: IF B$(K)=" " THEN GOTO 300
290 PRINT "THAT BOX HAS A '";B$(K);"' IN IT.": GOTO 250
300 LET B$(K)="X": LET F=F+1: IF F=5 THEN GOTO 120
310 IF F<2 THEN GOTO 450
320 REM MAGIC
330 LET P=0: FOR I=1 TO 8: 
335    FOR J=I+1 TO 9
340      IF B$(I)=" " OR B$(I)<>B$(J) THEN GOTO 400
350      LET K=V(I)+V(J)-5: IF K<1 OR K>9 THEN GOTO 400
360      LET K=V(K): IF B$(K)<>" " THEN GOTO 400
370      IF B$(I)="X" THEN GOTO 390
380      LET B$(K)="O": LET F=9: GOTO 120
390      LET P=K
400    NEXT J: 
402 NEXT I: IF P=0 THEN GOTO 450
410 LET B$(P)="O": GOTO 120
450 REM CHOOSE AN UNFORCED MOVE
460 IF B$(5)<>" " THEN GOTO 480
470 LET B$(5)="O": GOTO 120
480 LET P=1: IF B$(5)="X" THEN GOTO 500
490 LET P=2
500 FOR I=P TO 9 STEP 2
510 IF B$(I)<>" " THEN GOTO 530
520 LET B$(I)="O": GOTO 120
530 NEXT I
540 FOR I=7+P TO 1 STEP -2
550 IF B$(I)<>" " THEN GOTO 570
560 LET B$(I)="O": GOTO 120
570 NEXT I
580 END
