PROGRAM:REVERSSTART 01 '******************************* 02 '*REVERSI GAME by -ws- 10.06.20* 03 '*Rev. 1.1 Part1 --- LOAD TO P6* 04 '******************************* 05 COL 0,7:CLS :BOX 0,0,45,59,15 06 COL 10,0:POS 2,19:? " REVERSI " 07 BOX 6,7,40,33,8 08 A=10:B=9:C=8:D=10:E=14:F=0 09 FOR I=1 TO 8 10 COL 0,7:POS I*2+2,1:? I 11 POS 2,4:? "A BC DE FG H" 12 FOR J=1 TO 8:FBOX A,B,C,D,E 13 DA 50+F,A:DA 120+F,B 14 DA 190+F,C:DA 260+F,D 15 DA 330+F,14 16 F=F+1:B=B+3:D=D+3:NEXT 17 A=A+4:C=C+4:B=9:D=10:NEXT 18 DA 610,"ABCDEFGH12345678" 19 DA 357,15:DA 358,8 20 DA 365,8:DA 366,15 21 GOS 51:GOS 25:GOS 51:GOS 57 22 IF K=1:GO 1 23 GOS 63 24 'OPTIONS ----------------------- 25 FBOX 8,35,33,57,0:COL 14,0 26 POS 5,18:? "YOU START?" 27 POS 6,18:? "Y/N":GOS ~L+19 28 IF I=0:G=0:POS 6,23:? "YES" 29 IF I=1:G=1:POS 6,23:? "CB2" 30 POS 8,18:? "YOU WHITE?" 31 POS 9,18:? "Y/N":GOS ~L+15 32 IF I=0:DA 1,15:DA 2,8' CB2=BLACK 33 IF I=0:POS 9,23:? "YES" 34 IF I=1:DA 1,8:DA 2,15' CB2=WHITE 35 IF I=1:POS 9,22:? "BLACK" 36 POS 11,18:? "LOW LEVEL?" 37 POS 12,18:? "Y/N":GOS ~L+9 38 IF I=0:O=0:POS 12,23:? "LOW" 39 IF I=1:O=1:POS 12,22:? "HIGH" 40 CALL 8,60 41 POS 14,18:? "AUTO-MOVE?" 42 POS 15,18:? "Y/N":GOS ~L+4 43 IF I=0:T=0:POS 15,23:? "YES" 44 IF I=1:T=1:POS 15,22:? "ENTER" 45 RET 46 K=KEY(0)' ---------------- QUERY 47 IF K=121:I=0:WAIT 3:RET ' YES 48 IF K=110:I=1:WAIT 3:RET ' NO 49 IF K=237:END 50 GO ~L-4 51 'UPDATE GAMEBOARD -------------- 52 FOR I=0 TO 63 53 A=AR(50+I):B=AR(120+I) 54 C=AR(190+I):D=AR(260+I) 55 E=AR(330+I):FBOX A,B,C,D,E:NEXT 56 RET 57 'TOGGLE PLAYER ---------------- 58 IF G=1:CALL 8,5:GO ~L+2' CB2 59 P=0:GOS 79:GOS 63:CALL 7,5' USER 60 GOS 51:CALL 7,30 61 IF K=1:RET ' NEW GAME 62 GO ~L-4 63 'NAVIGATION -------------------- 64 COL 15,9 65 POS 21,5:? " YOUR MOVE " 66 K=KEY(0) 67 IF K=226:P=P-1:GOS 82' LEFT 68 IF K=227:P=P+1:GOS 82' RIGHT 69 IF K=228:P=P-8:GOS 82' UP 70 IF K=229:P=P+8:GOS 82' DOWN 71 IF K=237:END ' CANCEL 72 IF K=234:CALL 7,12:RET 'CALLBACK 73 GO ~L-7 74 'DISPLAY CURSOR POSITION ------- 75 V=P:GOS 89 76 COL AR(2),AR(1) 77 POS 21,3:? %AR(610+S) 78 POS 21,4:? %AR(618+R):RET 79 'REPLACE CURSOR ---------------- 80 A=AR(50):B=AR(120):C=AR(190) 81 D=AR(260):FBOX A,B,C+2,D,10:RET 82 'SET CURSOR -------------------- 83 IF P<0:P=0 84 IF P>63:P=63 85 GOS 74:GOS 51 86 A=AR(50+P):B=AR(120+P) 87 C=AR(190+P):D=AR(260+P) 88 FBOX A,B,C+2,D,10:WAIT 2:RET 89 'CALCULATE POSITION ------------ 90 R=V/8:FOR K=0 TO 7 91 IF V/8=K:S=V-K*8 92 NEXT :RET # PROGRAM:REVERSPART2 01 '******************************* 02 '*REVERSI GAME by -ws- 10.06.20* 03 '*Rev. 1.1 Part2 --- LOAD TO P7* 04 '******************************* 05 G=1:DA 3,AR(1):DA 4,AR(2)' USER 06 'FREE USER POSITIONS ----------- 07 IF F<>14:GO 16 08 FOR I=0 TO 63 ' SAVE 09 DA 400+I,AR(330+I):NEXT ' COLOR 10 CALL 7,44:GO 21 11 12 'CALL BACK IF FAIL ------------- 13 F=AR(330+P):DA 330+P,AR(1) 14 FBOX A,B,C,D,AR(330+P):RET 15 16 'ILLEGAL MOVE ------------------ 17 COL 0,10:POS 21,5 18 ? " ILLEGAL ":DA 330+P,F 19 FBOX A,B,C,D,F:WAIT 10:RET 20 21 'IMPOSSIBLE MOVE --------------- 22 J=0:FOR I=0 TO 63 23 IF AR(330+I)<>AR(400+I):J=1 24 NEXT :IF J=0:GO ~L+2 25 DA 6,0:RET 26 DA 5,1:COL 0,10:POS 21,5 27 ? " NO MOVE ":DA 330+P,F 28 FBOX A,B,C,D,F:WAIT 10:RET 29 30 'COUNT PIECES ------------------ 31 N=0:M=0:FOR I=0 TO 63 32 IF AR(330+I)=AR(1):N=N+1 33 IF AR(330+I)=AR(2):M=M+1 34 COL AR(2),AR(1) 35 POS 18,23:? " " 36 POS 18,19:? " YOU";N 37 COL AR(1),AR(2) 38 POS 19,23:? " " 39 POS 19,19:? " CB2";M 40 NEXT 41 IF (N+M>16)&(O=1):CALL 8,70 42 CALL 8,40 43 RET 44 'LIMITS OF ENVIRONMENT --------- 45 N=R:M=S:FOR Y=1 TO 8:R=N:S=M:H=0 46 IF Y=1:IF S>5:GO ~L+2 47 IF Y=1:IF AR(330+P+1)=AR(4):H=1 48 IF Y=2:IF S<2:GO ~L+2 49 IF Y=2:IF AR(330+P-1)=AR(4):H=-1 50 IF Y=3:IF R>5:GO ~L+2 51 IF Y=3:IF AR(330+P+8)=AR(4):H=8 52 IF Y=4:IF R<2:GO ~L+2 53 IF Y=4:IF AR(330+P-8)=AR(4):H=-8 54 IF Y=5:IF (S<2)#(R>5):GO ~L+2 55 IF Y=5:IF AR(330+P+7)=AR(4):H=7 56 IF Y=6:IF (S>5)#(R<2):GO ~L+2 57 IF Y=6:IF AR(330+P-7)=AR(4):H=-7 58 IF Y=7:IF (S>5)#(R>5):GO ~L+2 59 IF Y=7:IF AR(330+P+9)=AR(4):H=9 60 IF Y=8:IF (S<2)#(R<2):GO ~L+2 61 IF Y=8:IF AR(330+P-9)=AR(4):H=-9 62 IF H=0:GO 91 63 64 'MAX. PIECES ------------------- 65 J=H:Z=0:FOR I=1 TO 7 66 IF (AR(330+P+J)=AR(3))&(Z=0):Z=I 67 IF AR(330+P+J+H)=14:GO 80 68 69 'LIMITS OF FIELD --------------- 70 V=P+J:CALL 6,89 71 IF (H=1)&(S=7):GO 80 72 IF (H=-1)&(S=0):GO 80 73 IF (H=8)&(R=7):GO 80 74 IF (H=-8)&(R=0):GO 80 75 IF (H=7)&((R=7)#(S=0)):GO 80 76 IF (H=-7)&((R=0)#(S=7)):GO 80 77 IF (H=9)&((R=7)#(S=7)):GO 80 78 IF (H=-9)&((R=0)#(S=0)):GO 80 79 J=J+H 80 NEXT 81 82 'ROTATE DELIMITED PIECES ------- 83 IF Z=0:GO ~L+8 84 IF X=0:DA 330+P,AR(3) 85 IF X=1:Q=AR(1340+P) 86 J=H:FOR I=1 TO Z 87 IF X=0:DA 330+P+J,AR(3) 88 IF X=1:Q=Q+AR(1340+P+J) 89 IF X=1:DA 400+P,P:DA 470+P,Q 90 J=J+H:NEXT 91 NEXT :Q=0:Z=0:RET # PROGRAM:REVERSPART3 01 '******************************* 02 '*REVERSI GAME by -ws- 10.06.20* 03 '*Rev. 1.1 Part3 --- LOAD TO P8* 04 '******************************* 05 G=0:DA 3,AR(2):DA 4,AR(1)' CB2 06 'CLEAR ANALYSIS ARRAY ---------- 07 FOR I=0 TO 63 08 DA 400+I,0:DA 470+I,0:NEXT 09 COL 15,9 10 POS 21,5:? " CB2 MOVE " 11 CALL 8,13:CALL 8,18:RET 12 13 'SUCCESSFUL CB2 POSITIONS ------ 14 FOR P=0 TO 63:V=P:CALL 6,89 15 IF AR(330+P)=14:X=1:CALL 7,44 16 NEXT :RET 17 18 'BEST NUMBER OF PIECES --------- 19 FOR I=0 TO 63:U=AR(470+I) 20 IF U>Z:Z=U:P=I 21 NEXT :V=P:CALL 6,89:CALL 8,29 22 IF T=0:X=0:CALL 7,44:RET 23 K=KEY(0) 24 IF K=234:X=0:CALL 7,44:GO ~L+2 25 GO ~L-2 26 COL 0,7:POS 21,19:? " " 27 RET 28 29 'DISPLAY CB2 POSITION ---------- 30 COL 0,10 31 IF R=8:POS 21,5:? "NO CB2 MOVE" 32 IF R=8:DA 6,1 33 COL AR(4),AR(3) 34 POS 21,16:? %AR(610+S) 35 POS 21,17:? %AR(618+R) 36 IF T=1:POS 21,19:? "ENTER CB2" 37 IF R>0:DA 5,0 38 WAIT 5:G=0:RET 39 40 'GAME OVER --------------------- 41 IF (AR(5)=1)&(AR(6)=1):GO ~L+3 42 IF (N+M=64)#(N=0)#(M=0):GO ~L+2 43 RET 44 IF MN:NO 253:GO ~L+4 46 IF M=N:NO 252:GO ~L+5 47 DATA 1,192," YOU WON",0 48 GO ~L+4 49 DATA 1,160," YOU LOST",0 50 GO ~L+2 51 DATA 1,224," UNDECIDED",0 52 ALERT 1 53 DATA 1,159," NEW GAME?",0 54 ASK K,1 55 IF K=0:CLS :END 56 RET 57 58 'DISK-SQUARE FACTORS ----------- 59 'Can be edited for optimization! 60 'LOW-LEVEL --------------------- 61 DA 1340,2,2,2,2,2,2,2,2 62 DA 1348,2,-2,-2,-2,-2,-2,-2,2 63 DA 1356,2,-2,1,1,1,1,-2,2 64 DA 1364,2,-2,1,1,1,1,-2,2 65 DA 1372,2,-2,1,1,1,1,-2,2 66 DA 1380,2,-2,1,1,1,1,-2,2 67 DA 1388,2,-2,-2,-2,-2,-2,-2,2 68 DA 1396,2,2,2,2,2,2,2,2 69 RET 70 'HIGH-LEVEL -------------------- 71 DA 1340,25,5,12,10,10,12,5,25 72 DA 1348,5,0,4,3,3,4,0,5 73 DA 1356,12,4,1,1,1,1,4,12 74 DA 1364,10,3,1,0,0,1,3,10 75 DA 1372,10,3,1,0,0,1,3,10 76 DA 1380,12,4,1,1,1,1,4,12 77 DA 1388,5,0,4,3,3,4,0,5 78 DA 1396,25,5,12,10,10,12,5,25 79 RET #