100  DIM A[9,9],B[9,9],C[9,9],S[31,2],Y[9,9]
110  PRINT
120  PRINT "=== GOMOKU 8KW ==="
130  PRINT "SPECIFY MOVE AS YX"
140  PRINT "GAME (1=NORMAL) ";
150  INPUT A9
210  LET D1=D6=1
250  LET D1=-1
260  FOR W8=1 TO 31
261  FOR W9=1 TO 2
262  LET S[W8,W9]=0
263  NEXT W9
264  NEXT W8
280  FOR W8=1 TO 9
281  FOR W9=1 TO 9
282  LET Y[W8,W9]=0
283  NEXT W9
284  NEXT W8
290  LET Q9=G3=0
320  LET S[1,1]=S[1,2]=1
360  LET S[2,1]=S[7,2]=3
380  LET S[3,1]=S[13,2]=11
400  LET S[4,1]=S[19,2]=43
420  LET S[5,1]=S[25,2]=168421.
440  LET S[6,1]=S[31,2]=3.36842E+06
510  FOR J4=1 TO 9
520  FOR I4=1 TO 9
530  LET B[J4,I4]=0
540  NEXT I4
550  NEXT J4
580  GOSUB 2550
590  LET Z5=Z6=0
600  LET F3=0
610  LET D1=D1*(-1)
620  IF D1=1 THEN 700
630  LET J4=I4=5
660  PRINT TAB(16);"I MOVE TO";J4*10+I4
670  LET B[I4,J4]=1
680  GOSUB 2550
690  GOSUB 1450
700  IF F3=-1 THEN 1190
720  PRINT "YOUR MOVE ";
730  GOSUB 2440
740  IF I3>9 OR I3<1 OR J3>9 OR J3<1 THEN 700
760  LET B[I3,J3]=6
780  GOSUB 1450
790  IF F3=1 THEN 1410
800  LET Y4=C4=0
820  FOR I4=1 TO 9
830  FOR J4=1 TO 9
840  IF Y[I4,J4] <= Y4 THEN 880
850  LET Y4=Y[I4,J4]
860  LET I5=I4
870  LET J5=J4
880  IF C[I4,J4] <= C4 THEN 920
890  LET C4=C[I4,J4]
900  LET I6=I4
910  LET J6=J4
920  NEXT J4
930  NEXT I4
940  IF Y4 >= 16800 THEN 1150
950  LET C4=0
960  FOR M8=1 TO 9
970  FOR M9=1 TO 9
980  LET C[M8,M9]=C[M8,M9]+A9*Y[M8,M9]
990  IF C[M8,M9] <= C4 THEN 1030
1000  LET C4=C[M8,M9]
1010  LET N8=M8
1020  LET N9=M9
1030  NEXT M9
1040  NEXT M8
1050  IF C4=0 THEN 1120
1060  LET I4=N8
1070  LET J4=N9
1100  GOTO 660
1120  PRINT "DRAW"
1130  STOP
1150  LET I4=I5
1160  LET J4=J5
1170  GOTO 660
1190  PRINT "I WIN"
1390  STOP
1410  PRINT "YOU WIN"
1420  STOP
1450  FOR J4=1 TO 9
1460  FOR I4=1 TO 9
1470  LET C[J4,I4]=Y[J4,I4]=0
1490  NEXT I4
1500  NEXT J4
1510  FOR J4=1 TO 9
1520  FOR I4=1 TO 5
1530  LET K4=I4+4
1540  LET I9=I8=0
1560  FOR M4=I4 TO K4
1570  LET I8=I8+B[J4,M4]
1580  LET I9=I9+B[M4,J4]
1590  NEXT M4
1600  IF I8=5 OR I9=5 THEN 1620
1610  GOTO 1650
1620  LET F3=-1
1640  RETURN
1650  IF I8=30 OR I9=30 THEN 1670
1660  GOTO 1690
1670  LET F3=1
1680  GOTO 1640
1690  LET I8=I8+1
1700  LET I9=I9+1
1710  FOR M4=I4 TO K4
1720  IF B[J4,M4]=0 THEN 1740
1730  GOTO 1760
1740  LET C[J4,M4]=C[J4,M4]+S[I8,2]
1750  LET Y[J4,M4]=Y[J4,M4]+S[I8,1]
1760  IF B[M4,J4]=0 THEN 1780
1770  GOTO 1800
1780  LET C[M4,J4]=C[M4,J4]+S[I9,2]
1790  LET Y[M4,J4]=Y[M4,J4]+S[I9,1]
1800  NEXT M4
1810  NEXT I4
1820  NEXT J4
1840  FOR J4=1 TO 5
1850  FOR I4=1 TO 5
1860  LET I8=I9=0
1880  FOR M4=1 TO 5
1890  LET K4=J4+M4-1
1900  LET L4=I4+M4-1
1910  LET K5=10-K4
1920  LET I8=I8+B[K4,L4]
1930  LET I9=I9+B[K5,L4]
1940  NEXT M4
1950  IF I8=5 OR I9=5 THEN 1620
1960  IF I8=30 OR I9=30 THEN 1670
1970  LET I8=I8+1
1980  LET I9=I9+1
1990  FOR M4=1 TO 5
2000  LET K4=J4+M4-1
2010  LET L4=I4+M4-1
2020  LET K5=10-K4
2030  IF B[K4,L4]=0 THEN 2050
2040  GOTO 2070
2050  LET C[K4,L4]=C[K4,L4]+S[I8,2]
2060  LET Y[K4,L4]=Y[K4,L4]+S[I8,1]
2070  IF B[K5,L4]=0 THEN 2090
2080  GOTO 2110
2090  LET C[K5,L4]=C[K5,L4]+S[I9,2]
2100  LET Y[K5,L4]=Y[K5,L4]+S[I9,1]
2110  NEXT M4
2120  NEXT I4
2130  NEXT J4
2140  GOTO 1640
2440  INPUT Q9
2450  IF Q9<100 THEN 2500
2460  LET J3=INT(Q9/100)
2470  LET I3=INT(Q9/10)-J3*10
2490  RETURN
2500  LET J3=INT(Q9/10)
2510  LET I3=Q9-J3*10
2540  RETURN
2550  PRINT
2580  PRINT " 1  2  3  4  5  6  7  8  9"
2630  FOR I=1 TO 9
2710  FOR J=1 TO 9
2720  IF B[J,I]=1 THEN 2770
2730  IF B[J,I]=6 THEN 2790
2750  PRINT " . ";
2760  GOTO 2820
2770  PRINT " X ";
2780  GOTO 2820
2790  PRINT " O ";
2820  NEXT J
2830  PRINT I
2840  NEXT I
2850  RETURN
9999  END

