Listing of file='OTHELLO' on disk='vmedia/games-droz01.wvd.zip'
# Sector 352, program filename = 'OTHELLO'
0010 REM % OTHELLO
: REM ADAPTED FROM J. HARMON'S 'OTHELLO4'
: REM 4/27/79 B. PATTERSON
0015 REM % SETUP
0020 DIM T$(8,8)1, X$1, Y$1, Z$1, E$32, C(8), Q$(8,8)1,P$(2)1,P(2),Q$1,M$40
0021 C(1), C(8), C(3), C(6) = 2
: C(4), C(5) = 1
: C(2), C(7) = 0
0025 P$(1)="\8B"
: P$(2)="o"
: P=1
: O=2
: P(1),P(2)=2
: T$()=" "
: X$ = P$(1)
: Y$ = P$(2)
: T$(4,4), T$(5,5) = P$(1)
: T$(4,5), T$(5,4) = P$(2)
0040 PRINT HEX(03);TAB(29); "OTHELLO"
0050 PRINT AT(2,0);
: Q$="Y"
: LINPUT "Solitaire?"Q$
: ON POS("YyNnC"=Q$) GOTO 800,800,800,800,800
: GOTO 50
0800 REM %DISPLAY
: PRINT HEX(06);
: GOSUB 4000
: PRINT AT(1,74);
: PRINTUSING "## #'s",P(1),P$(1);
: PRINT AT(2,74);
: PRINTUSING "## #'s",P(2),P$(2);
0810 REM %CHECK FOR END OF GAME
: IF P(1)+P(2)<64 THEN 900
0820 PRINT AT(21,0);
: STOP "GAME'S OVER"
: GOTO 10
0900 REM %GET MOVE
: M$=P$(P) & "'s turn"
0910 PRINT AT(20,40*(P-1));STR(M$);AT(20,40*(O-1),40);P$(O);"'s move"
: IF P=1 THEN GOSUB '41
: ELSE GOSUB '42
0920 PRINT AT(21,40*(P-1),40);R;",";C;
1000 REM %MOVE VALIDATION
: IF R=0 THEN 2605
: IF R>=1 AND R<=8 AND C>=1 AND C<=8 THEN 1010
: M$="invalid move"
: GOTO 910
1010 IF T$(R,C)=" " THEN 2000
: M$="position occupied"
: GOTO 910
2000 REM %MOVE
: GOSUB 3010
2500 IF T>0 THEN 2600
: M$="no capture made"
: GOTO 910
2600 REM %UPDATE NO. OF PIECES
: P(P)=P(P)+T+1
: P(O)=P(O)-T
2605 REM %NEXT PLAYER'S TURN
: O=P
: P=MOD(O,2)+1
: GOTO 800
3000 REM %MAKE MOVE
: REM ENTRY--
: REM R=row
: REM C=column
: REM P=player
: REM O=oppenent
: REM RETURN--
: REM T=no. of pieces captured
3010 T=0
: A = -1
: B = 0
: GOSUB 3030
: B = 1
: GOSUB 3030
: A = 0
: GOSUB 3030
: A = 1
: GOSUB 3030
: B = 0
: GOSUB 3030
: B = -1
: GOSUB 3030
: A = 0
: GOSUB 3030
: A = -1
: GOSUB 3030
: RETURN
3030 I = A + R
: J = B + C
: IF I < 1 OR I > 8 OR J < 1 OR J > 8 OR T$(I,J) <> P$(O) THEN RETURN
3040 I = I + A
: IF I < 1 OR I > 8 THEN RETURN
: J = J + B
: IF J < 1 OR J > 8 THEN RETURN
: IF T$(I,J) = P$(O) THEN 3040
: IF T$(I,J) <> P$(P) THEN RETURN
3050 I = I - A
: J = J - B
: T$(I,J) = P$(P)
: T=T+1
: IF I <> R OR J <> C THEN 3050
: T=T-1
: T$(R,C) = P$(P)
: RETURN
4000 REM %DISPLAY SUBROUTINE
: PRINT HEX(0120)
: FOR I = 8 TO 1 STEP -1
: PRINTUSING 4010
: PRINTUSING 4020 , I, T$(I,1), T$(I,2), T$(I,3), T$(I,4), T$(I,5), T$(I,6)
, T$(I,7), T$(I,8)
: NEXT I
: PRINTUSING 4010
: PRINTUSING 4030
: RETURN
4010 % \86-----\86-----\86-----\86-----\86-----\86-----\86-----\86-----
\86
4020 % # \86 # \86 # \86 # \86 # \86 # \86 # \86 # \86 #
\86
4030 % 1 2 3 4 5 6 7 8
5000 REM %MOVE SUBROUTINES
: REM ENTRY--
: REM T$()=board
: REM Pieces on board are P$(1) or P$(2) OR blank
: REM M$=message (\8B'S turn, o's turn, invalid move, no capture made, p
osition occupied)
5010 REM RETURN--
: REM R=row
: REM C=column
5100 REM %player 1's move
5110 DEFFN'41
: ON POS("YyNnC"=Q$) GOSUB 5900,5900,5900,5900,6000
: RETURN
5500 REM %player 2's move
5510 DEFFN'42
: ON POS("YyNnC"=Q$) GOSUB 6000,6000,5900,5900,6000
: RETURN
5900 REM %GET MOVE FROM KEYBOARD
: PRINT AT(21,40*(P-1),40);
: R,C=0
: INPUT R,C
: ERRORGOTO 5900
5910 RETURN
5999 REM %J. HARMON COMPUTER STATEGY FROM 'OTHELLO4'
6000 Q$()=T$()
: L = 0
: FOR M = 1 TO 8
: FOR N = 1 TO 8
: IF T$(M,N)<>" " THEN 6030
: R = M
: C = N
: GOSUB 3010
: IF T=0 THEN 6030
: Y = 0
: FOR I = 1 TO 8
: FOR J = 1 TO 8
: IF T$(I,J) = P$(2) THEN Y = Y + C(I) + C(J) + 1
: NEXT J
: NEXT I
6010 REM
6020 IF Y < L THEN 6030
: IF Y > L THEN 6040
: IF RND(1) < .5 THEN 6040
6030 T$()=Q$()
: NEXT N,M
: IF L = 0 THEN 6050
: R = X1
: C = Y1
: RETURN
6040 L = Y
: X1 = M
: Y1 = N
: GOTO 6030
6050 R,C=0
: RETURN
8000 REM %VARIABLES
: REM P$(I)=player I's piece (eg, 'o')
: REM P(I)=no. of player I's pieces
: REM P=current player (1 or 2)
: REM O=current opponent (1 or 2)
9000 %SCRATCH T"OTHELLO": SAVE T()"OTHELLO"
9411 DEFFN'16 HEX(8B)
9999 SELECT LIST 215
: LIST "OTHELLO"D
: LIST "OTHELLO"V
: LIST "OTHELLO"#
: LIST '
: SELECT LIST 005