home *** CD-ROM | disk | FTP | other *** search
- REM THIS PROGRAM WAS WRITTEN BY MITCH J. BOGDANOWICZ 8/19/77
- REM COPYRIGHT 1977 MITCHELL J. BOGDANOWICZ JR.
- REM THE MEMORY MERCHANTS INC.
- REM 1350 BUFFALO ROAD
- REM SUITE 11
- REM ROCHESTER, NEW YORK 14624
- REM 716-328-5585
- DIM BOARD(12,12),LENGTH(64),MY(64),MX(64),SY(64),SX(64),RI(64),SI(64)
- DIM LN(64),MOVE(64),SAFE.MOVE(64),DANGER.MOVE(64),NO.DANGER(64)
- 1002 INPUT "IS THIS A NEW GAME OR OLD "; NEW.OR.OLD$
- PRINT
- RANDOMIZE
- INPUT "ENTER A FILE NAME FOR THIS GAME "; NAME$
- FILE.NAME$=LEFT$(NAME$,8)
- PRINT
- IF NEW.OR.OLD$="OLD" THEN GOTO 1345
- PRINT "THIS IS THE GAME OF OTHELLO":COUNTER=4 :EG=0 :EH=0
- PRINT : PRINT
- 1011 INPUT "DO YOU WANT THE RULES? (Y OR N) "; A$
- IF LEFT$(A$,1)="Y" THEN GOSUB 1240:GOTO 1016
- IF LEFT$(A$,1)<>"N" THEN GOTO 1011
-
-
- 1013 PRINT "THESE ARE YOUR CONTROL OPTIONS :" : GOSUB 1450
-
-
- REM SET UP BOARD
-
- 1016 FOR X=1 TO 8
- FOR Y=1 TO 8
- BOARD(Y,X)=0
- NEXT Y: NEXT X
- BOARD(4,4)=1:BOARD(5,5)=1:BOARD(4,5)=-1:BOARD(5,4)=-1
-
-
- REM SET DIFFICULTY
-
- 1022 PRINT "ENTER YOUR RANK (1 TO 9) - 9 IS MOST DIFFICULT.";:INPUT PLAYERS.RANK
- PRINT
- IF PLAYERS.RANK<1 OR PLAYERS.RANK>9 THEN GOTO 1022
- COUNTER=COUNTER+ABS(PLAYERS.RANK-5)
- IF PLAYERS.RANK=5 THEN GOTO 1043
- IF PLAYERS.RANK>5 THEN CH=RND ELSE GOTO 1028
- IF CH<=.750 THEN BOARD(1,8)=-1 ELSE GOSUB 1316
- 1028 IF PLAYERS.RANK>6 THEN CH=RND ELSE GOTO 1030
- IF CH<=.750 THEN BOARD(8,1)=-1 ELSE GOSUB 1316
- 1030 IF PLAYERS.RANK>7 THEN CH=RND ELSE GOTO 1032
- IF CH<=.750 THEN BOARD(8,8)=-1 ELSE GOSUB 1316
- 1032 IF PLAYERS.RANK>8 THEN CH=RND ELSE GOTO 1034
- IF CH<=.750 THEN BOARD(1,1)=-1 ELSE GOSUB 1316
- 1034 IF PLAYERS.RANK<5 THEN CH=RND ELSE GOTO 1036
- IF CH<=.750 THEN BOARD(1,1)=1 ELSE GOSUB 1321
- 1036 IF PLAYERS.RANK<4 THEN CH=RND ELSE GOTO 1038
- IF CH<=.750 THEN BOARD(8,8)=1 ELSE GOSUB 1321
- 1038 IF PLAYERS.RANK<3 THEN CH=RND ELSE GOTO 1040
- IF CH<=.750 THEN BOARD(1,8)=1 ELSE GOSUB 1321
- 1040 IF PLAYERS.RANK<2 THEN CH=RND ELSE GOTO 1042
- IF CH<=.750 THEN BOARD(8,1)=1 ELSE GOSUB 1321
-
-
- 1042 REM PRINT STARTING BOARD AND START GAME
-
- 1043 GOSUB 1046
- GOTO 1055
-
-
- REM DISPLAY BOARD
-
- 1046 FOR Y=1 TO 8
- FOR X=1 TO 8
- IF BOARD(Y,X)=1 THEN PRINT "X ";
- IF BOARD(Y,X)=-1 THEN PRINT "O ";
- IF BOARD(Y,X)=0 THEN PRINT "+ ";
- IF X=8 THEN PRINT
- NEXT X:NEXT Y: PRINT
- RETURN
-
-
- 1055 PRINT
- INPUT "YOU ARE 'X', DO YOU WANT TO GO FIRST"; A$
- PRINT
- IF LEFT$(A$,1)="N" THEN 1069
-
-
- REM INPUT MOVE
-
- 1059 PRINT "YOUR MOVE";
- INPUT Y,X
- IF (Y=0) AND (X=0) THEN GOTO 1232 REM SAVE DATA
- IF (Y=0) AND (X=1) THEN GOTO 1270 REM FORFEIT MOVE
- IF (Y=0) AND (X=2) THEN GOTO 1117 REM EXCHANGE BOARD W/CONT.
- IF (Y=0) AND (X=3) THEN GOTO 1118 REM EXCHANGE BOARD
- IF (Y=0) AND (X=4) THEN EH=1 : GOTO 1217
- IF (Y=0) AND (X=5) THEN GOSUB 1325
- IF (Y=0) AND (X=6) THEN GOTO 1065 REM AUTO MODE
- IF (Y=0) AND (X=7) THEN GOSUB 1100 REM SET UP BOARD YOURSELF
- IF (Y=0) AND (X=8) THEN GOSUB 1110 REM MOVE A PIECE
- IF (Y=0) AND (X=9) THEN GOSUB 1112 REM DELETE A PIECE
- IF (Y=0) AND (X=10) THEN GOSUB 1450 REM PRINT OPTIONS
- IF (Y=0) AND (X>10) THEN GOSUB 1450 : GOTO 1059
- IF (Y<0) OR (X<0) OR (Y>10) OR (X>10) THEN GOTO 1059
- IF Y=0 THEN GOSUB 1046 : GOTO 1059
- PRINT : COUNTER=COUNTER+1: GOSUB 1199
- IF BOARD(Y,X)<>0 THEN PRINT "INVALID MOVE, TRY AGAIN!":COUNTER=COUNTER-1: GOTO 1059
- BOARD(Y,X)=1 : GOSUB 1186 : GOSUB 1046
- IF COUNTER>=64 THEN GOTO 1217
- GOTO 1069
-
-
- 1065 REM AUTO
-
- AUTO$="AUTO"
- FIRST.TIME=0
- GOTO 1069
-
-
- 1069 REM FIND ALL POSSIBLE MOVES FOR BLACK
-
- IF INP(1) = 27 THEN AUTO$="MANUAL" : GOTO 1059 REM AN ESCAPE STOPS AUTO
- 1070 Q=0
- FOR Y=1 TO 8
- FOR X=1 TO 8
- IF BOARD(Y,X)=-1 THEN GOSUB 1087
- NEXT X :NEXT Y
- IF Q=0 THEN 1217
- Q2=0
- FOR Q1=1 TO Q
- Q3=LENGTH(Q1)
- IF Q3>Q2 THEN Q2=Q3
- NEXT Q1: Q0=Q2:SD=0
- 1081 K=0: MM=0: NN=0:N1=0
- FOR Q1=1 TO Q
- IF Q2=LENGTH(Q1) THEN K=K+1
-
-
- REM TAKE A CORNER IF POSSIBLE
-
- IF ((MY(Q1)=1) OR (MY(Q1)=8))AND((MX(Q1)=1)OR(MX(Q1)=8))THEN Q2=LENGTH(Q1): GOTO 1172
- NEXT Q1:GOTO 1119
-
-
- 1087 REM CHECK IN ALL DIRECTIONS FOR A WHITE STRING TO FLIP
-
- FOR R=Y-1 TO Y+1
- FOR S=X-1 TO X+1
- IF (R=0) OR (S=0) THEN 1092
- IF BOARD(R,S)=1 THEN GOSUB 1095
- 1092 NEXT S: NEXT R
- RETURN
-
-
-
-
- REM FIND DIRECTION AND LENGTH OF WHITE STRING
-
- 1095 R1=R-Y : S1=S-X
- C=1
- R2=R+R1 :S2=S+S1
- 1098 IF (R2=0) OR (S2=0) THEN RETURN
- IF BOARD(R2,S2)=1 THEN C=C+1 :R2=R2+R1 :S2=S2+S1 :GOTO 1098
- IF BOARD(R2,S2)=-1 THEN RETURN
- IF (R2>8) OR (R2<1) OR (S2>8) OR (S2<1) THEN RETURN
- C=C+1
- Q=Q+1:SAFE.MOVE(Q)=0 :DANGER.MOVE(Q)=0
- MY(Q)=C*R1+Y : LENGTH(Q)=C-1 : SY(Q)=Y : SX(Q)=X
- MX(Q)=C*S1+X
-
-
- REM RECOGNIZE DANGER ZONES
-
- IF (MX(Q)=1)OR(MX(Q)=8)OR(MY(Q)=1)OR(MY(Q)=8) THEN GOSUB 1306
- IF (MX(Q)=2) AND (MY(Q)>=2) AND (MY(Q)<=7) THEN DANGER.MOVE(Q)=1
- IF (MX(Q)=7) AND (MY(Q)>=2) AND (MY(Q)<=7) THEN DANGER.MOVE(Q)=1
- IF (MY(Q)=2) AND (MX(Q)>=2) AND (MX(Q)<=7) THEN DANGER.MOVE(Q)=1
- IF (MY(Q)=7) AND (MX(Q)>=2) AND (MX(Q)<=7) THEN DANGER.MOVE(Q)=1
- IF BOARD(1,1)=-1 AND MX(Q)=2 AND MY(Q)=2 THEN DANGER.MOVE(Q)=0
- IF BOARD(1,8)=-1 AND MX(Q)=7 AND MY(Q)=2 THEN DANGER.MOVE(Q)=0
- IF BOARD(8,1)=-1 AND MX(Q)=2 AND MY(Q)=7 THEN DANGER.MOVE(Q)=0
- IF BOARD(8,8)=-1 AND MX(Q)=7 AND MY(Q)=7 THEN DANGER.MOVE(Q)=0
- RI(Q)=R1 : SI(Q)=S1
- RETURN
-
-
- 1100 PRINT "ENTER THE PIECE (X,O OR +)"
- PRINT "ENTER R TO RETURN"; : INPUT P$
- IF P$="R" THEN Y=0 : RETURN
- INPUT "COORDINATES(Y,X): ";Y,X
- IF P$="X" THEN BOARD(Y,X)=-1
- IF P$="O" THEN BOARD(Y,X)= 1
- IF P$="+" THEN BOARD(Y,X)= 0
- GOTO 1100
-
-
- 1110 PRINT "MOVE A PIECE(X OR O)"
- INPUT "FROM ";Y,X
- IF Y=0 THEN RETURN
- INPUT " TO ";Y1,X1
- TEMP.=BOARD(Y,X)
- BOARD(Y,X)=0
- BOARD(Y1,X1)=TEMP.
- GOTO 1110
-
- 1112 INPUT "DELETE THE PIECE (Y,X): ";Y,X
- IF Y=0 THEN RETURN
- BOARD (Y,X)=0
- GOTO 1112
-
-
- 1117 REM EXCHANGE BOARD RETAINING CONTINUITY
-
- GOSUB 1400 REM EXCHANGE PIECES
- PRINT
- GOSUB 1046 REM PRINT BOARD
- PRINT
- GOTO 1069 REM BLACK MOVES WHAT WOULD HAVE BEEN WHITE
-
-
- 1118 REM EXCHANGE BOARD
-
- GOSUB 1400
- PRINT
- GOSUB 1046
- PRINT
- GOTO 1059
-
-
- REM LOOK FOR A MULTIPLE STRING MOVE
-
- 1119 F=0
- FOR Q8=1 TO Q
- FOR Q9=1 TO Q
- IF (MY(Q8)=MY(Q9)) AND (Q8<>Q9) AND (MX(Q8)=MX(Q9)) THEN GOSUB 1144
- NEXT Q9: NEXT Q8 :H=0
-
-
- REM IF NO MULTIPLE MOVES, GO SELECT A STRAIGHT MOVE
-
- IF F=0 THEN 1149
-
-
- REM EVALUATE MULTIPLE MOVES
-
- FOR G=1 TO F
- IF LN(G)>H THEN J=G :H=LN(G)
- NEXT G
- IF LN(J)<=Q2 THEN 1149
- P=0 : FOR G=1 TO F
- IF LN(G)=LN(J) THEN P=P+1
- NEXT G
- P8=P : FOR PP=1 TO 3
- P1=INT(RND *P8)+1 :P=0
- FOR G=1 TO F
- IF LN(J)=LN(G) THEN GOSUB 1302
- IF P=P1 AND LN(J)=LN(G) THEN Q2=LENGTH(MOVE(G)) :Q1=MOVE(G) :GOTO 1172
- IF DANGER.MOVE(MOVE(G))=0 THEN LET NN=1
- NEXT G
- IF NN<>1 THEN GOTO 1149
- NEXT PP : GOTO 1149
-
-
- REM GET LENGTH ETC. OF MULTIPLE STRING MOVE
-
- 1144 F=F+1
- LN(F)=LENGTH(Q8)+LENGTH(Q9)-1 : MOVE(F)=Q9
- IF LENGTH(Q8)>LENGTH(Q9) THEN MOVE(F)=Q8
- RETURN
-
-
-
-
- REM SELECT A MOVE
-
- 1149 K8=K: FOR QQ=1 TO 5
- K1=INT(RND*K8)+1
- K=0
- FOR Q1=1 TO Q
- IF Q2=LENGTH(Q1) THEN GOSUB 1237
- IF K=K1 AND Q2=LENGTH(Q1) THEN GOTO 1172
- IF DANGER.MOVE(Q1)=0 THEN LET MM=1 : N1=N1+1 : NO.DANGER(N1)=Q1
- NEXT Q1
- IF MM<>1 THEN GOTO 1164
- NEXT QQ
- FOR N2=1 TO N1
- IF Q2=LENGTH(NO.DANGER(N2)) THEN Q1=NO.DANGER(N1): GOTO 1172
- NEXT N2
- Q2=Q2-1
- IF Q2 >0 THEN GOTO 1081
- 1164 IF DD=1 THEN GOTO 1184
- Q2=Q0 :FOR Q6=1 TO Q : DANGER.MOVE(Q6)=0
- IF BOARD(1,1)<>-1 AND MY(Q6)=2 AND MX(Q6)=2 THEN DANGER.MOVE(Q6)=1
- IF BOARD(1,8)<>-1 AND MY(Q6)=2 AND MX(Q6)=7 THEN DANGER.MOVE(Q6)=1
- IF BOARD(8,1)<>-1 AND MY(Q6)=7 AND MX(Q6)=2 THEN DANGER.MOVE(Q6)=1
- IF BOARD(8,8)<>-1 AND MY(Q6)=7 AND MX(Q6)=7 THEN DANGER.MOVE(Q6)=1
- NEXT Q6 : DD=1 : GOTO 1081
-
-
- REM FLIP A STRING
-
- 1172 FOR Q4=1 TO Q2+1 : DD=0
- BOARD(SY(Q1)+RI(Q1)*Q4,SX(Q1)+SI(Q1)*Q4)=-1
- NEXT Q4
-
-
- REM LOOK FOR MULTIPLE MOVES
-
- FOR Q6=1 TO Q
- IF (MY(Q1)=MY(Q6)) AND (Q1<>Q6) AND (MX(Q1)=MX(Q6)) THEN GOSUB 1181
- NEXT Q6 :PRINT:PRINT"MY MOVE ";MY(Q1);",";MX(Q1):EG=0:EH=0:COUNTER=COUNTER+1
- PRINT
- IF AUTO$="AUTO" AND FIRST.TIME=1 THEN GOSUB 1400
- GOSUB 1046
- IF AUTO$="AUTO" AND FIRST.TIME=0 THEN GOSUB 1400 :\
- FIRST.TIME=1 : GOTO 1069
- IF AUTO$="AUTO" THEN FIRST.TIME=0 : GOTO 1069
- GOTO 1059
-
-
- REM FLIP REMAINDER OF MULTIPLE MOVE
-
- 1181 FOR Q4=1 TO LENGTH(Q6) +1
- BOARD(SY(Q6)+RI(Q6)*Q4,SX(Q6)+SI(Q6)*Q4)=-1
- NEXT Q4 :RETURN
- 1184 Q2=Q0 : FOR Q6=1 TO Q : DANGER.MOVE(Q6)=0 : NEXT Q6 : GOTO 1081
-
-
- REM FLIP ALL DISCS FOR WHITE'S MOVE
-
- 1186 FOR Q5=Y-1 TO Y+1
- FOR Q6=X-1 TO X+1
- IF BOARD(Q5,Q6)=-1 THEN GOSUB 1190
- NEXT Q6 :NEXT Q5 : RETURN
- 1190 R1=Q5-Y :S1=Q6-X :R2=R1+Q5 :S2=S1+Q6
- 1191 IF BOARD(R2,S2)=-1 THEN GOSUB 1198 :GOTO 1191
- IF BOARD(R2,S2)=0 THEN RETURN
- IF (R2>8) OR (R2<1) OR (S2>8) OR (S2<1) THEN RETURN
- R2=R1+Q5 : S2=S1+Q6
- IF BOARD(R2-R1,S2-S1)=-1 THEN BOARD(R2-R1,S2-S1)=1
- 1196 IF BOARD(R2,S2)=-1 THEN BOARD(R2,S2)=1 :GOSUB 1198 :GOTO 1196
- RETURN
-
-
- 1198 R2=R2+R1 : S2=S2+S1 : RETURN
-
-
- 1199 REM CHECK FOR A LEGAL MOVE BY WHITE
-
- IF BOARD(Y,X)<>0 THEN RETURN
- VM=0
- FOR R=Y-1 TO Y+1
- FOR S=X-1 TO X+1
- IF (R=0) OR (S=0) THEN 1206
- IF BOARD(R,S)=-1 THEN GOSUB 1210
- 1206 NEXT S :NEXT R
- IF VM>0 THEN RETURN
- PRINT "YOU CAN'T FLIP ANY OF YOUR OPPONENT'S PIECES WITH THAT MOVE"
- Y=11 :X=11 :BOARD(Y,X)=2 : RETURN
- 1210 R1=R-Y : S1=S-X : R2=R : S2=S
- 1211 IF (R2=0) OR (S2=0) THEN RETURN
- R2=R2+R1 : S2=S2+S1
- IF BOARD(R2,S2)=-1 THEN 1211
- IF BOARD(R2,S2)=0 THEN RETURN
- IF (R2>8) OR (R2<1) OR (S2>8) OR (S2<1) THEN RETURN
- VM=1 : RETURN
-
-
- 1217 REM END OF GAME TALLY AND 'NO MOVE' SITUATIONS
-
- W=0 :B=0
- FOR Y=1 TO 8
- FOR X=1 TO 8
- Z=BOARD(Y,X)
- IF Z=0 AND EH=1 THEN GOTO 1224
- IF AUTO$="AUTO" AND Z=0 THEN EG=1 : GOSUB 1400 : GOTO 1069
- IF Z=0 THEN PRINT "I HAVE NO MOVES AVAILABLE, PLEASE GO AGAIN.":PRINT:EG=1:GOTO 1059
- 1224 IF Z=1 THEN W=W+1
- IF Z=-1 THEN B=B+1
- NEXT X :NEXT Y
- PRINT
- PRINT "THE GAME IS OVER, I HAVE CAPTURED ";B;"DISCS AND YOU HAVE ";W;"DISCS"
- IF W=B THEN PRINT "TIE GAME------YOU LUCKED OUT":GOTO 1232
- IF W>B THEN PRINT "YOU WIN BY ";W-B;"DISCS":GOTO 1232
- PRINT "I WIN BY ";B-W;"DISCS"
- 1232 PRINT "DO YOU WANT TO SAVE THE DATA?(YES OR NO)";: INPUT SAVE$
- IF SAVE$="YES" THEN GOSUB 1322
- 1234 PRINT "WOULD YOU LIKE TO PLAY AGAIN? (YES OR NO OR RESUME)"
- INPUT A$
- IF A$="RESUME" THEN GOSUB 1046 : GOTO 1059
- IF A$="YES" THEN GOTO 1002
- IF A$="NO" THEN STOP
- GOTO 1234
- 1237 IF DANGER.MOVE(Q1)=0 THEN K=K+1 ELSE RETURN
- IF SAFE.MOVE(Q1)>0 THEN K=K1
- RETURN
-
-
- 1240 PRINT " RULES "
- PRINT : PRINT "YOU HAVE WHITE(X) DISCS AND THE COMPUTER HAS BLACK(O)"
- PRINT "A MOVE CONSISTS OF OUTFLANKING YOUR OPPONENT'S DISC(S), THEN "
- PRINT "FLIPPING THE OUTFLANKED DISC(S) OVER TO YOUR COLOR."
- PRINT " TO OUTFLANK MEANS TO PLACE A DISC SO THAT YOUR "
- PRINT "OPPONENT'S ROW(OR ROWS) OF DISC(S) IS BORDERED AT EACH END BY A"
- PRINT "DISC OF YOUR COLOR."
- PRINT "IF A PLAYER CANNOT OUTFLANK AND FLIP AT LEAST ONE OPPOSING DISC, THE"
- PRINT "TURN IS FORFEITED AND THE OPPONENT MOVES AGAIN. TO FORFEIT A TURN,"
- PRINT "ANSWER -1,-1 TO 'YOUR MOVE?'."
- PRINT "A DISC MAY OUTFLANK ANY NUMBER OF DISCS IN ONE OR MORE ROWS. A ROW"
- PRINT "IS DEFINED AS ONE OR MORE DISCS IN A CONTINUOUS STRAIGHT LINE."
- PRINT "A DISC MAY OUTFLANK IN ANY DIRECTION: HORIZONTALLY, VERTICALLY OR "
- PRINT "DIAGONALLY. A DISC MAY OUTFLANK IN ANY NUMBER OF DIRECTIONS AT THE"
- PRINT "SAME TIME . A DISC MAY ONLY BE OUTFLANKED AS A DIRECT RESULT OF A MOVE"
- PRINT "AND MUST FALL IN THE DIRECT LINE OF THE DISC PLACED."
- PRINT "WHEN IT IS NO LONGER POSSIBLE FOR EITHER PLAYER TO MOVE,"
- PRINT " THE GAME IS OVER"
- PRINT "DISCS ARE COUNTED AND THE PLAYER WITH THE MOST DISCS IS THE WINNER."
- PRINT "TO ABORT A GAME ANSWER 0,0 TO 'YOUR MOVE?'"
- PRINT "TO TALLY-UP AND QUIT TYPE 99,99 TO 'YOUR MOVE'"
- PRINT:PRINT
- INPUT "DO YOU WANT A SAMPLE BOARD, (Y OR N)"; S$
- IF LEFT$(S$,1)<>"Y" THEN RETURN
- PRINT "THIS IS THE BOARD AND HOW THE SPACES ARE NUMBERED":PRINT:FOR Y=1 TO 8:FOR X=1 TO 8
- PRINT Y;",";X;" ";
- IF X=8 THEN PRINT : PRINT
- NEXT X : NEXT Y : PRINT : RETURN
-
-
- REM CHECK FOR ALL OF WHITE'S POSSIBLE MOVES
-
- 1270 Q=0: FOR Y=1 TO 8
- FOR X=1 TO 8
- IF BOARD(Y,X)=1 THEN GOSUB 1286
- NEXT X:NEXT Y
- IF Q=0 AND EG=1 THEN EH=1: GOTO 1217
- IF Q=0 THEN EG=1: GOTO 1070
- PRINT "I'M SORRY, YOU MAY NOT FORFEIT THIS MOVE"
- PRINT "YOU HAVE THESE LEGAL MOVES AVAILABLE:":PRINT
- FOR Q9=1 TO Q
- FOR QI=1 TO Q
- IF MX(Q9)=MX(QI) AND MY(Q9)=MY(QI) AND Q9<>QI THEN MX(QI)=0:MY(QI)=0
- NEXT QI : NEXT Q9
- FOR Q9=1 TO Q
- IF MX(Q9)=0 AND MY(Q9)=0 THEN GOTO 1285
- PRINT MY(Q9);",";MX(Q9),
- 1285 NEXT Q9 : PRINT : GOTO 1059
- 1286 FOR R=Y-1 TO Y+1
- FOR S=X-1 TO X+1
- IF (R=0) OR (S=0) THEN 1291
- IF (R=9) OR(S=9) THEN 1291
- IF BOARD(R,S)=-1 THEN GOSUB 1292
- 1291 NEXT S: NEXT R: RETURN
- 1292 R1=R-Y: S1=S-X:C=1
- R2=R+R1 :S2=S+S1
- 1294 IF (R2=0) OR (S2=0) THEN RETURN
- IF BOARD(R2,S2)=-1 THEN R2=R2+R1:C=C+1:S2=S2+S1:GOTO 1294
- IF BOARD(R2,S2)=1 THEN RETURN
- IF (R2>8) OR (R2<1) OR (S2>8) OR (S2<1) THEN RETURN
- C=C+1 :Q=Q+1
- MY(Q)=C*R1+Y
- MX(Q)=C*S1+X
- RETURN
-
-
- 1302 IF DANGER.MOVE(MOVE(G))=0 THEN P=P+1 ELSE RETURN
- IF SAFE.MOVE(MOVE(G))>0 THEN P=P1
- RETURN
-
-
-
-
- REM AVOID DANGER ZONES
-
- 1306 IF (MY(Q)=1) AND (MX(Q)=2) AND (BOARD(1,1)<>-1) THEN DANGER.MOVE(Q)=1
- IF (MY(Q)=2) AND (MX(Q)=1) AND (BOARD(1,1)<>-1) THEN DANGER.MOVE(Q)=1
- IF (MY(Q)=1) AND (MX(Q)=7) AND (BOARD(1,8)<>-1) THEN DANGER.MOVE(Q)=1
- IF (MY(Q)=2) AND (MX(Q)=8) AND (BOARD(1,8)<>-1) THEN DANGER.MOVE(Q)=1
- IF (MY(Q)=7) AND (MX(Q)=1) AND (BOARD(8,1)<>-1) THEN DANGER.MOVE(Q)=1
- IF (MY(Q)=8) AND (MX(Q)=2) AND (BOARD(8,1)<>-1) THEN DANGER.MOVE(Q)=1
- IF (MY(Q)=8) AND (MX(Q)=7) AND (BOARD(8,8)<>-1) THEN DANGER.MOVE(Q)=1
- IF (MY(Q)=7) AND (MX(Q)=8) AND (BOARD(8,8)<>-1) THEN DANGER.MOVE(Q)=1
- SAFE.MOVE(Q)=1 : RETURN
-
-
- REM RANDOMLY PLACE A BLACK (" O ") PIECE (HANDICAP)
-
- 1316 X=INT(RND*8)+1
- Y=INT(RND*8)+1
- IF BOARD(Y,X)<>0 THEN GOTO 1316
- BOARD(Y,X)=-1 : RETURN
-
-
- REM RANDOMLY PLACE A WHITE (" X ") PIECE (HANDICAP)
-
- 1321 X=INT(RND*8)+1
- Y=INT(RND*8)+1
- IF BOARD(Y,X)<>0 THEN GOTO 1321
- BOARD(Y,X)=1 : RETURN
-
-
- 1322 PRINT " THE PRESENT FILE IS NAMED ";FILE.NAME$
- PRINT " IF YOU WANT TO CHANGE IT, INPUT A DIFFERENT NAME"
- PRINT "OTHERWISE ENTER A '*' ";
- INPUT NAME$
- IF NAME$="*" THEN GOTO 1325
- FILE.NAME$=LEFT$(NAME$,8)
- GOTO 1325
-
-
- 1325 REM SAVE ALL DATA FOR A FUTURE FINISH
-
- FILE FILE.NAME$
- FOR SAVE = 1 TO 64
- PRINT # 1;\
- LENGTH(SAVE),MY(SAVE),MX(SAVE),\
- SY(SAVE),SX(SAVE),RI(SAVE),\
- SI(SAVE),LN(SAVE),MOVE(SAVE),\
- SAFE.MOVE(SAVE),DANGER.MOVE(SAVE),NO.DANGER(SAVE)
- NEXT SAVE
- FOR SAVE.A = 1 TO 12
- FOR SAVE.B = 1 TO 12
- PRINT # 1; BOARD(SAVE.A,SAVE.B)
- NEXT SAVE.B
- NEXT SAVE.A
- PRINT # 1; COUNTER,EG,EH,PLAYERS.RANK,\
- Q,Q0,Q2,Q3,\
- K,K1,K8,MM,\
- NN,N1,R,S,\
- R1,S1,C,R2,\
- S2,F,H,P,\
- P8,DD,VM,NAME$
- CLOSE 1
- RETURN
-
-
-
-
- 1345 REM READ IN DATA
-
-
-
- FILE FILE.NAME$
-
- FOR LOAD = 1 TO 64
- READ # 1;\
- LENGTH(LOAD),MY(LOAD),MX(LOAD),\
- SY(LOAD),SX(LOAD),RI(LOAD),\
- SI(LOAD),LN(LOAD),MOVE(LOAD),\
- SAFE.MOVE(LOAD),DANGER.MOVE(LOAD),NO.DANGER(LOAD)
- NEXT LOAD
- FOR LOAD.A = 1 TO 12
- FOR LOAD.B = 1 TO 12
- READ # 1; BOARD(LOAD.A,LOAD.B)
- NEXT LOAD.B
- NEXT LOAD.A
- READ # 1; COUNTER,EG,EH,PLAYERS.RANK,\
- Q,Q0,Q2,Q3,\
- K,K1,K8,MM,\
- NN,N1,R,S,\
- R1,S1,C,R2,\
- S2,F,H,P,\
- P8,DD,VM,NAME$
- CLOSE 1
- GOSUB 1046 : GOTO 1059
- 1400 FOR X = 1 TO 8
- FOR Y = 1 TO 8
- BOARD(Y,X)=- BOARD(Y,X)
- NEXT Y
- NEXT X
- RETURN
-
-
- 1450 REM OPTIONS ON Y,X RESPONSE OF 0,#
-
- PRINT
- PRINT "COMMAND 0,0 = SAVE DATA"
- PRINT "COMMAND 0,1 = FORFEIT MOVE"
- PRINT "COMMAND 0,2 = EXCHANGE BOARD"
- PRINT "COMMAND 0,3 = EXCHANGE PIECES"
- PRINT "COMMAND 0,4 = END GAME + TALLY"
- PRINT "COMMAND 0,5 = SAVE DATA ON CURRENT FILE"
- PRINT "COMMAND 0,6 = AUTO MODE"
- PRINT "COMMAND 0,7 = SET UP BOARD YOURSELF"
- PRINT "COMMAND 0,8 = MOVE A PIECE"
- PRINT "COMMAND 0,9 = DELETE A PIECE"
- PRINT "COMMAND 0,10 = PRINT OPTIONS"
- PRINT
- PRINT
- RETURN
-
-
- END
-
-
-
-