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