image of READY prompt

Wang2200.org

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