132 lines
5 KiB
QBasic
132 lines
5 KiB
QBasic
1 REM--CHECKERS?--
|
|
2 REM-MEM.SIZE:8183-
|
|
3 T1=300:A=53448
|
|
5 FORC=1TO24:PRINT:NEXT:GOSUB10000:GOSUB20000
|
|
7 FORC=8184TO8191:READD:POKEC,D:NEXT:POKE11,248:POKE12,31
|
|
8 DATA32,0,253,141,255,31,96,0
|
|
10 FORC=A+640TOA+665:POKEC,32:NEXT:POKEA+640,63
|
|
11 M=USR(M):M=PEEK(8191)-48:IFM=9ANDG8=0THENG8=1:GOTO34
|
|
12 G8=1:IFM<1ORM>8THEN10
|
|
13 IFM=9ANDG9=1THENG9=0:GOTO34
|
|
14 IFM=9OR(M<>X1ANDG9=1)THEN10
|
|
15 POKEA+642,M+48:POKEA+643,44:X=M:M=USR(M):M=PEEK(8191)-48
|
|
16 IF(M<>Y1ANDG9=1)ORM<1ORM>8THEN10
|
|
17 POKEA+644,M+48
|
|
18 Y=M:M=USR(M):M=PEEK(8191)-48
|
|
19 IF(G9=1ANDABS(X-M)<>2)ORM<1ORM>8THEN10
|
|
20 POKEA+646,M+48:POKEA+647,44:X1=M:M=USR(M):M=PEEK(8191)-48
|
|
23 IFM<1ORM>8THEN10
|
|
25 POKEA+648,M+48:Y1=M:IFABS(X-X1)<>ABS(Y-Y1)THEN10
|
|
26 IFABS(X-X1)>2ORX>8ORY>8ORX1>8ORY1>8THEN10
|
|
27 IFP(X,Y)<1ORP(X1,Y1)<>0THEN10
|
|
28 IFP(X,Y)=1ANDY1<YTHEN10
|
|
29 IFABS(X-X1)=2ANDP((X+X1)/2,(Y+Y1)/2)>-1THEN10
|
|
30 P(X1,Y1)=P(X,Y):P(X,Y)=0:IFABS(X-X1)=2THENP((X+X1)/2,(Y+Y1)/2)=0
|
|
31 IFY1=8THENP(X1,Y1)=2
|
|
32 IFABS(X-X1)=2THENGOSUB20000:G9=1:GOTO10
|
|
33 GOSUB20000
|
|
34 FORC=A+640TOA+665:POKEC,32:NEXT
|
|
35 REM-MAIN PROGRAM-
|
|
230 G=-1:R=-99:FORY=1TO8:FORX=1TO8
|
|
231 IFP(X,Y)>-1THEN350
|
|
300 W=8:M=P(X,Y)
|
|
310 IFM=-1THENFORA1=-1TO1STEP2:B1=G:GOSUB650:NEXTA1
|
|
330 IFM=-2THENFORA1=-1TO1STEP2:FORB1=1TO-1STEP-2:GOSUB650:NEXTB1,A1
|
|
350 L6=0:L7=0:L8=0:L9=0:NEXTX,Y:GOTO1140
|
|
650 U=X+A1:V=Y+B1:IFU<1ORU>8ORV<1ORV>8THEN870
|
|
660 FORC1=-1TO1STEP2:FORD1=-1TO1STEP2
|
|
670 IFX+C1<1ORX+C1>8ORY+D1<1ORY+D1>8THEN700
|
|
673 IFX+C1*2<1ORX+C1*2>8ORY+D1*2<1ORY+D1*2>8THEN700
|
|
675 IFP(X+C1,Y+D1)>-1THEN700
|
|
680 IFP(X+C1*2,Y+D1*2)<>2ANDY+D1>YTHEN700
|
|
682 IFX-C1<1ORX-C1>8ORY-D1<1ORY-D1>8THEN685
|
|
683 IFP(X+C1,Y+D1)>0ANDP(X-C1,Y-D1)=0THENL9=1
|
|
685 IFP(X+C1*2,Y+D1*2)<1THEN700
|
|
690 Q=Q-4:GOTO740
|
|
700 NEXTD1,C1
|
|
740 IFP(U,V)=0THENGOSUB910:GOTO870
|
|
770 IFP(U,V)<0THEN870
|
|
790 U=U+A1:V=V+B1:IFU<1ORV<1ORU>8ORV>8THEN870
|
|
850 IFP(U,V)=0THENGOSUB910
|
|
870 RETURN
|
|
910 REM
|
|
920 IFABS(Y-V)=2THENQ=Q+4
|
|
930 IFL8=0ANDP(X,Y)=-1THENQ=Q+(2-Y/2)
|
|
1000 IFP(X,Y)=-2THENQ=Q-1
|
|
1030 IFP(X,Y)=-1THENFORC1=-1TO1STEP2:FORD1=-1TO-1:GOTO1033
|
|
1031 IFP(X,Y)=-2THENFORC1=-1TO1STEP2:FORD1=-1TO1STEP2:GOTO1033
|
|
1032 GOTO1081
|
|
1033 IFU+C1<1ORU+C1>8ORV+D1<1ORV+D1>8THEN1080
|
|
1034 IFU+C1*2<1ORU+C1*2>8ORV+D1*2<1ORV+D1*2>8THEN1040
|
|
1035 IFP(U+C1,V+D1)<0ANDP(U+C1*2,V+D1*2)>0THENQ=Q+4
|
|
1036 IFU-C1<1ORU-C1>8ORV-D1<1ORV-D1>8THEN1080
|
|
1037 IFP(U+C1,V+D1)>0ANDP(U-C1,V-D1)<>0ANDP(U+C1*2,V+D1*2)=0THENQ=Q+2
|
|
1040 IFU-C1<1ORU-C1>8ORV-D1<1ORV-D1>8THEN1080
|
|
1042 IFV+D1>VANDP(U+C1,V+D1)<2THEN1050
|
|
1045 IFP(U+C1,V+D1)>0AND(P(U-C1,V-D1)=0OR(X=U-C1ANDY=V-D1))THEN5000
|
|
1047 IFL9=1THENQ=Q+1:L7=1
|
|
1050 IFP(U+C1,V+D1)<>0ANDP(U-C1,V-D1)<>0ANDY<>8ANDP(X,Y)=-1THENQ=Q+1
|
|
1080 NEXTD1,C1
|
|
1081 IFL6=0THENQ=Q+4
|
|
1082 IFQ>RTHENR=Q:R1=X:R2=Y:R3=U:R4=V
|
|
1090 IFQ=RANDINT(RND(X)*10)+1<4THENR1=X:R2=Y:R3=U:R4=V
|
|
1100 Q=0:RETURN
|
|
1140 IFR=-99THEN1880
|
|
1230 R=-99:GOSUB2000
|
|
1240 IFR4=1THENP(R3,R4)=-2:GOTO1310
|
|
1250 P(R3,R4)=P(R1,R2)
|
|
1310 P(R1,R2)=0:IFABS(R1-R3)<>2THEN1420
|
|
1330 P((R1+R3)/2,(R2+R4)/2)=0
|
|
1340 X=R3:Y=R4:IFP(X,Y)=-1THENB1=-2:FORA1=-2TO2STEP4:GOSUB1370
|
|
1350 IFP(X,Y)=-2THENFORA1=-2TO2STEP4:FORB1=-2TO2STEP4:GOSUB1370:NEXTB1
|
|
1360 NEXTA1:IFR<>-99THENR=-99:GOTO1240
|
|
1365 GOTO1420
|
|
1370 U=X+A1:V=Y+B1:IFU<1ORU>8ORV<1ORV>8THEN1400
|
|
1380 IFP(U,V)=0ANDP(X+A1/2,Y+B1/2)>0THENGOSUB910
|
|
1400 RETURN
|
|
1420 FORT=1TO1400:NEXT:GOSUB20000:GOTO10
|
|
1880 PRINT:PRINT" I CONCEDE...":END
|
|
2000 REM-COMMENTS-
|
|
2010 POKEA+640,73:POKEA+642,65:POKEA+643,77
|
|
2015 IFABS(R1-R3)=2THEN2050
|
|
2017 POKEA+645,77:POKEA+646,79
|
|
2020 POKEA+647,86:POKEA+648,73:POKEA+649,78:POKEA+650,71:POKEA+651,46
|
|
2030 POKEA+652,46:POKEA+653,46:RETURN
|
|
2050 POKEA+645,74:POKEA+646,85:POKEA+647,77:POKEA+648,80:POKEA+649,73
|
|
2060 POKEA+650,78:POKEA+651,71:POKEA+652,46:POKEA+653,46:POKEA+654,46
|
|
2070 RETURN
|
|
4000 POKEB1,187:POKEB1+1,187:POKEB1+32,187:POKEB1+33,187:RETURN
|
|
5000 Q=Q-4:IFP(X,Y)=-2THENQ=Q-2
|
|
5002 L6=1
|
|
5003 IF(ABS(Y-V)=2ORABS(X-U)=2)ANDRND(X)*100<40THENQ=Q-1
|
|
5004 IFL9=1ANDL7=1THENQ=Q-1:L7=0
|
|
5005 GOTO1080
|
|
9999 END
|
|
10000 REM-CHESSBOARD-
|
|
10005 FORB=ATOA+15:POKEB,154:POKEB+544,155:NEXT
|
|
10010 FORB=B+32TOA+544STEP32:POKEB,156:POKEB-17,157:NEXT
|
|
10015 POKEA-1,165:POKEA+16,167:POKEA+560,168:POKEA+543,166
|
|
10017 GOTO10047:REM-THIS FOR ALTERNATE BOARD-
|
|
10020 FORB=A+33TOA+45STEP2:POKEB,143:POKEB+481,136:NEXT
|
|
10025 FORB=B+64TOA+512STEP64:POKEB,135:POKEB-47,128:NEXT
|
|
10040 FORB=A+66TOA+452STEP64:FORB1=BTOB+12STEP2:POKEB1,209:NEXTB1,B
|
|
10045 FORB=A+97TOA+481STEP64:FORB1=BTOB+12STEP2:POKEB1,207:NEXTB1,B
|
|
10047 REM-CHEC. INIT.--
|
|
10050 DIMP(8,8):FORX=1TO8:FORY=1TO3:IF(X+Y)/2=INT((X+Y)/2)THENP(X,Y)=1
|
|
10055 IF(X+Y+5)/2=INT((X+Y+5)/2)THENP(X,Y+5)=-1
|
|
10060 NEXTY,X:P(1,7)=-1
|
|
10065 X=57:FORB=A+62TOA+510STEP64:X=X-1:POKEB,X:NEXT
|
|
10070 FORB=A+576TOA+590STEP2:POKEB,X:X=X+1:NEXT
|
|
10075 RETURN
|
|
20000 REM--PIECES--
|
|
20005 Y=9:FORB=A+32TOA+480STEP64:X=0:Y=Y-1:FORB1=BTOB+14STEP2:X=X+1
|
|
20010 E3=168:M=P(X,Y):T=(X+Y)/2:IFM<0THENPOKEB1,88
|
|
20011 REM INSTRUCTIONS INVOLVING "T" ACCOUNT FOR FILLED BLOCKS
|
|
20012 IFT<>INT(T)THENGOSUB4000
|
|
20015 IFM>0THENPOKEB1,79
|
|
20017 IFT=INT(T)THENPOKEB1+1,32:POKEB1+32,32
|
|
20020 IFABS(M)=2THENE3=107
|
|
20040 IFM=0ANDT=INT(T)THENPOKEB1,32:POKEB1+33,32:GOTO20100
|
|
20050 IFT<>INT(T)THEN20100
|
|
20099 POKEB1+33,E3
|
|
20100 NEXTB1,B:RETURN
|