100  REM OTHELL FOR TSB - WTN 9/06 PT MOD 9/10
101  PRINT "=== OTHELL ===  ADAPTED FOR 8KW"
102  PRINT "ENTER RANDOM SEED NUMBER ";
103  INPUT X
104  FOR Y=1 TO X
105  LET Z=RND(0)
106  NEXT Y
110  PRINT "COMPUTER IS X, YOU ARE O"
120  PRINT "ENTER MOVES AS YX (11-88)"
130  PRINT "ENTER 0 TO PASS"
150  DIM A[10,10],B[10,10]
220  GOSUB 1000
240  GOSUB 2000
250  GOSUB 3000
280  IF M1=0 THEN 300
290  GOSUB 2000
295  IF E=0 THEN 500
297  IF C=0 THEN 500
300  GOSUB 4000
330  IF M2=0 THEN 350
340  GOSUB 2000
345  IF E=0 THEN 500
347  IF H=0 THEN 500
350  IF M1=0 AND M2=0 THEN 500
380  GOTO 250
500  IF H>C THEN 550
520  IF C>H THEN 570
530  PRINT "IT'S A TIE"
540  GOTO 600
550  PRINT "YOU WON BY";H-C
560  GOTO 600
570  PRINT "I WON BY";C-H
600  STOP
1000  REM INITIALIZE
1010  FOR X=1 TO 10
1011  FOR Y=1 TO 10
1012  LET A[X,Y]=B[X,Y]=0
1013  NEXT Y
1014  NEXT X
1020  FOR Y=2 TO 9
1030  FOR X=2 TO 9
1040  LET A[X,Y]=1
1050  NEXT X
1060  NEXT Y
1080  LET A[5,5]=A[6,6]=2
1100  LET A[5,6]=A[6,5]=3
1160  DATA 300,0,100,90,90,100,0,300
1170  DATA 0,10,70,50,50,70,10,0
1180  DATA 100,60,20,30,30,20,60,100
1190  DATA 90,50,30,30,30,30,50,90
1200  DATA 90,50,30,30,30,30,50,90
1210  DATA 100,60,20,30,30,20,60,100
1220  DATA 0,10,70,50,50,70,10,0
1230  DATA 300,0,100,90,90,100,0,300
1235  LET B1=10
1240  FOR Y=2 TO 9
1250  FOR X=2 TO 9
1260  READ B[X,Y]
1270  NEXT X
1280  NEXT Y
1290  RETURN
2000  REM DISPLAY
2005  LET H=C=E=0
2006  PRINT
2007  PRINT "   1 2 3 4 5 6 7 8"
2010  FOR Y=2 TO 9
2015  GOSUB 9000
2020  FOR X=2 TO 9
2030  LET Z=A[X,Y]
2040  PRINT " ";
2050  IF Z#2 THEN 2070
2060  LET C=C+1
2062  PRINT "X";
2070  IF Z#3 THEN 2090
2080  LET H=H+1
2082  PRINT "O";
2090  IF Z#1 THEN 2097
2095  LET E=E+1
2096  PRINT " ";
2097  NEXT X
2100  GOSUB 9000
2105  PRINT
2110  NEXT Y
2115  PRINT "   1 2 3 4 5 6 7 8"
2116  PRINT
2120  PRINT "YOU:";H;" ME:";C
2190  RETURN
3000  REM GET MOVE
3010  PRINT "MOVE ";
3020  INPUT M1
3022  IF M1>10 THEN 3030
3024  RETURN
3030  LET Y=INT(M1/10)
3040  LET X=INT(M1-Y*10)
3050  IF X<1 OR X>8 OR Y<1 OR Y>8 THEN 3010
3060  LET X=X+1
3070  LET Y=Y+1
3080  IF A[X,Y]#1 THEN 3010
3095  LET P1=2
3096  LET P2=3
3100  GOSUB 6000
3120  IF G=0 THEN 3010
3130  GOSUB 7000
3190  RETURN
4000  REM COMPUTER MOVE
4100  LET X3=Y3=G3=0
4104  REM LOOKING FOR HUMAN PIECES
4105  LET P1=3
4106  LET P2=2
4300  FOR X=2 TO 9
4310  FOR Y=2 TO 9
4320  GOSUB 6000
4340  GOSUB 4800
4350  NEXT Y
4360  NEXT X
4390  LET M2=0
4400  IF G3#0 THEN 4420
4410  RETURN
4420  LET X=X3
4430  LET Y=Y3
4440  LET M2=(Y-1)*10+(X-1)
4460  PRINT "MY MOVE IS";M2
4470  GOSUB 7000
4480  RETURN
4800  REM CHECK IF BETTER
4805  IF G=0 THEN 4820
4810  LET G2=G*B1+B[X,Y]
4812  IF G2>G3 THEN 4830
4814  IF G2=G3 AND RND(1)<.5 THEN 4830
4820  RETURN
4830  LET X3=X
4840  LET Y3=Y
4850  LET G3=G2
4860  RETURN
5000  REM SCAN/FLIP PIECES
5040  LET G1=0
5050  IF A[X,Y]=1 THEN 5100
5080  RETURN
5100  LET X2=X
5110  LET Y2=Y
5120  IF D1=2 THEN 5200
5132  IF D1=3 THEN 5250
5133  IF D1=4 THEN 5300
5134  IF D1=5 THEN 5350
5136  IF D1=6 THEN 5400
5137  IF D1=7 THEN 5450
5138  IF D1=8 THEN 5500
5150  LET X2=X2+1
5160  GOTO 5550
5200  LET X2=X2+1
5210  LET Y2=Y2-1
5220  GOTO 5550
5250  LET Y2=Y2-1
5260  GOTO 5550
5300  LET X2=X2-1
5310  LET Y2=Y2-1
5320  GOTO 5550
5350  LET X2=X2-1
5360  GOTO 5550
5400  LET X2=X2-1
5410  LET Y2=Y2+1
5420  GOTO 5550
5450  LET Y2=Y2+1
5460  GOTO 5550
5500  LET X2=X2+1
5510  LET Y2=Y2+1
5550  IF A[X2,Y2]>1 THEN 5600
5560  LET G1=0
5570  RETURN
5600  IF A[X2,Y2]=P1 THEN 5700
5620  RETURN
5700  LET G1=G1+1
5710  IF C1=0 THEN 5120
5720  LET A[X2,Y2]=P2
5730  GOTO 5120
6000  REM CHECK FOR GAIN
6020  LET C1=0
6050  LET G=0
6060  FOR D1=1 TO 8
6070  GOSUB 5000
6080  LET G=G+G1
6090  NEXT D1
6100  RETURN
7000  REM FLIP ALL PIECES
7030  FOR D1=1 TO 8
7040  LET C1=0
7050  GOSUB 5000
7060  IF G1=0 THEN 7100
7070  LET C1=1
7080  GOSUB 5000
7100  NEXT D1
7110  LET A[X,Y]=P2
7120  RETURN
8999  REM Y-1 NUMBER PRINT
9000  IF Y=3 THEN 9090
9010  IF Y=4 THEN 9110
9020  IF Y=5 THEN 9130
9030  IF Y=6 THEN 9150
9040  IF Y=7 THEN 9170
9050  IF Y=8 THEN 9190
9060  IF Y=9 THEN 9210
9070  PRINT " 1";
9080  RETURN
9090  PRINT " 2";
9100  RETURN
9110  PRINT " 3";
9120  RETURN
9130  PRINT " 4";
9140  RETURN
9150  PRINT " 5";
9160  RETURN
9170  PRINT " 6";
9180  RETURN
9190  PRINT " 7";
9200  RETURN
9210  PRINT " 8";
9220  RETURN
9999  END

