home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpmug / cpmug026.ark / CHESS.ASC < prev    next >
Text File  |  1984-04-29  |  12KB  |  497 lines

  1. 100 REM--CHESS BY RANDY MILLER, JAN, 1976
  2. 110 DEFINT A-Z:DEFSNG E:DEFSNG M:DEFSNG P
  3. 120 DIM PS(70,3),MV(35,2),V(32)
  4. 130 DIM B(8,8),TM(8,8)
  5. 140 DEF FNL(X)=X\10
  6. 150 DEF FNM(X)=X MOD(10)
  7. 160 TM(1,1)=0
  8. 170 FOR X=1 TO 32
  9. 180 READ V(X)
  10. 190 NEXT
  11. 200 FOR Y=1 TO 8
  12. 210 FOR X=1 TO 8
  13. 220 READ B(X,Y)
  14. 230 NEXT X:NEXT Y
  15. 240 DATA -2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,-2,-2,-1
  16. 250 DATA 8,12,19,21,-8,-12,-19,-21
  17. 260 DATA 1,9,10,11,-1,-9,-10,-11
  18. 270 DATA 4,2,3,6,5,3,2,4,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0
  19. 280 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1
  20. 290 DATA -1,-1,-1,-1,-4,-2,-3,-6,-5,-3,-2,-4
  21. 300 CB=3:CW=3
  22. 310 PRINT:PRINT:PRINT:PRINT TAB(10);"**** CHESS ****"
  23. 320 INPUT "DO YOU WANT TO BE WHITE OR BLACK";C$
  24. 330 IF LEFT$(C$,1)="B" THEN 370
  25. 340 B(4,1)=5:B(4,8)=-5
  26. 350 B(5,1)=6:B(5,8)=-6
  27. 360 GOTO 380
  28. 370 PRINT "THANK YOU, THAT MEANS I GET TO GO FIRST":PRINT
  29. 380 FOR Y=1 TO 8
  30. 390 FOR X=1 TO 8
  31. 400 TM(X,Y)=B(X,Y)
  32. 410 NEXT X:NEXT Y
  33. 420 IF LEFT$(C$,1)<>"B" THEN 840
  34. 430 NB=1
  35. 440 REM -- COMPILE LIST OF POSSIBLE MOVES --
  36. 450 FOR X=1 TO 8
  37. 460 FOR Y=1 TO 8
  38. 470 IF SGN(B(X,Y))<>1 THEN 550
  39. 480 GOSUB 1870
  40. 490 FOR D=1 TO N
  41. 500 IF MV(D,1)=0 THEN 540
  42. 510 PS(NB,1)=MV(D,1)
  43. 520 PS(NB,2)=MV(D,2)
  44. 530 NB=NB+1
  45. 540 NEXT D
  46. 550 NEXT Y
  47. 560 NEXT X
  48. 570 PRINT:PRINT "NUMBER OF POSSIBLE MOVES FOR COMPUTER";NB-1:PRINT
  49. 580 IF NB>1 THEN PRINT "FROM TO  BOARD VALUE":GOTO 620
  50. 590 PRINT "I DON'T BELIEVE IT! - YOU WON!!!"
  51. 600 END
  52. 610 REM -- EVALUATE EACH POSSIBLE MOVE --
  53. 620 FOR D=1 TO NB-1
  54. 630 D1=FNL(PS(D,1))
  55. 640 D2=FNM(PS(D,1))
  56. 650 D3=FNL(PS(D,2))
  57. 660 D4=FNM(PS(D,2))
  58. 670 D5=B(D3,D4)
  59. 680 TM(D3,D4)=TM(D1,D2)
  60. 690 TM(D1,D2)=0
  61. 700 GOSUB 1530
  62. 710 PS(D,3)=EV
  63. 720 TM(D1,D2)=TM(D3,D4)
  64. 730 TM(D3,D4)=D5
  65. 740 PRINT PS(D,1);PS(D,2);TAB(12);PS(D,3)
  66. 750 NEXT D
  67. 760 REM
  68. 770 MZ=PS(1,3):MX=1
  69. 780 IF NB=2 THEN 830
  70. 790 FOR D=2 TO NB-1
  71. 800 IF PS(D,3)<=MZ THEN 820
  72. 810 MX=D:MZ=PS(D,3)
  73. 820 NEXT D
  74. 830 GOSUB 1290
  75. 840 GOSUB 870
  76. 850 PRINT
  77. 860 GOTO 430
  78. 870 REM -- INPUT ROUTINE --
  79. 880 GOTO 910
  80. 890 INPUT "YOUR MOVE";M,N
  81. 900 IF M<>0 THEN 930
  82. 910 FOR P=1 TO 8:FOR P1=1 TO 8:PRINT B(P1,P);:NEXT P1:PRINT:NEXT P
  83. 920 GOTO 890
  84. 930 X1=FNL(M):Y1=FNM(M):X2=FNL(N):Y2=FNM(N)
  85. 940 IF X1>8 OR X1<1 OR Y1>8 OR Y1<1 THEN 970
  86. 950 IF X2>8 OR X2<1 OR Y2>8 OR Y2<1 THEN 970
  87. 960 IF SGN(B(X1,Y1))=-1 THEN 990
  88. 970 PRINT "YOU CAN'T DO THAT."
  89. 980 GOTO 890
  90. 990 REM
  91. 1000 FOR P=1 TO 8
  92. 1010 FOR P1=1 TO 8
  93. 1020 TM(P,P1)=B(P,P1)
  94. 1030 NEXT P1
  95. 1040 NEXT P
  96. 1050 GOSUB 3690
  97. 1060 IF LG=0 THEN 970
  98. 1070 TM(X2,Y2)=TM(X1,Y1)
  99. 1080 TM(X1,Y1)=0
  100. 1090 B(X2,Y2)=B(X1,Y1)
  101. 1100 B(X1,Y1)=0
  102. 1110 PRINT "ACCEPTED."
  103. 1120 IF Y2<>1 OR B(X2,Y2)<>-1 THEN 1180
  104. 1130 PRINT "TO PROMOTE YOUR PAWN TO A KNIGHT, TYPE 2; FOR A BISHOP,"
  105. 1140 PRINT "TYPE 3;  FOR A ROOK, TYPE 4; FOR A QUEEN, TYPE 5";
  106. 1150 INPUT P
  107. 1160 IF P>5 OR P<2 THEN 1130
  108. 1170 B(X2,Y2)=-P:TM(X2,Y2)=-P
  109. 1180 IF B(X2,Y2)<>-6 OR ABS(X1-X2)<>2 THEN 1240
  110. 1190 IF X1-X2=2 THEN 1250
  111. 1200 B(8,8)=0:TM(8,8)=0
  112. 1210 B(X2-1,8)=-4:TM(X2-1,8)=-4
  113. 1220 CB=(CB AND -3)
  114. 1230 PRINT "IT'S ABOUT TIME YOU CASTLED!":PRINT
  115. 1240 RETURN
  116. 1250 B(1,8)=0:TM(1,8)=0
  117. 1260 B(X2+1,8)=-4:TM(X2+1,8)=-4
  118. 1270 CB=(CB AND -3)
  119. 1280 GOTO 1230
  120. 1290 REM -- OUTPUT ROUTINE --
  121. 1300 IF PS(MX,3)<200 THEN 1350
  122. 1310 PRINT "HA - LET'S SEE YOU GET OUT OF THIS -"
  123. 1320 PRINT "I MOVE";PS(MX,1);"TO";PS(MX,2)
  124. 1330 PRINT "THANKS FOR THE GOOD GAME..."
  125. 1340 END
  126. 1350 ON INT(RND(1)*4)+1 GOTO 1360,1370,1380,1390
  127. 1360 PRINT "I RECKON I'LL MOVE ";:GOTO 1400
  128. 1370 PRINT "I GUESS I'LL TAKE";:GOTO 1400
  129. 1380 PRINT "MY MOVE IS";:GOTO 1400
  130. 1390 PRINT "I LIKE";
  131. 1400 PRINT PS(MX,1);"TO";PS(MX,2):PRINT
  132. 1410 D1=FNL(PS(MX,1))
  133. 1420 D2=FNM(PS(MX,1))
  134. 1430 D3=FNL(PS(MX,2))
  135. 1440 D4=FNM(PS(MX,2))
  136. 1450 B(D3,D4)=B(D1,D2)
  137. 1460 B(D1,D2)=0
  138. 1470 IF D4<>8 OR B(D3,D4)<>1 THEN 1500
  139. 1480 PRINT "I PROMOTE MY PAWN TO A QUEEN!"
  140. 1490 B(D3,D4)=5
  141. 1500 RETURN
  142. 1510 REM
  143. 1520 EV=RND(1):RETURN
  144. 1530 EV=RND(1)/2:US=0
  145. 1540 EV=EV+D4/7
  146. 1550 FOR PJ=1 TO 8
  147. 1560 IF TM(PJ,8)<>1 THEN 1590
  148. 1570 TM(PJ,8)=5
  149. 1580 GOTO 1610
  150. 1590 NEXT PJ
  151. 1600 IF SGN(D5)=-1 THEN EV=EV-D5
  152. 1610 FOR X=1 TO 8
  153. 1620 FOR Y=1 TO 8
  154. 1630 CX=TM(X,Y):CS=SGN(CX)
  155. 1640 IF CS<>-1 THEN 1750
  156. 1650 EV=EV+CX
  157. 1660 GOSUB 1840
  158. 1670 IF N=0 THEN 1750
  159. 1680 US=US+N:EV=EV-.166666
  160. 1690 FOR UX=1 TO N
  161. 1700 U1=MV(UX,1):U2=MV(UX,2)
  162. 1710 IF SGN(TM(FNL(U2),FNM(U2)))<>1 THEN 1740
  163. 1720 IF SGN(TM(FNL(U1),FNM(U1)))<>-1 THEN 1740
  164. 1730 EV=EV-2*TM(FNL(U2),FNM(U2))
  165. 1740 NEXT UX
  166. 1750 NEXT Y
  167. 1760 NEXT X
  168. 1770 IF US>0 THEN 1800
  169. 1780 EV=EV+1000
  170. 1790 GOTO 1810
  171. 1800 FOR X=3 TO 6:FOR Y=3 TO 6:EV=EV+TM(X,Y)/3:NEXTY:NEXTX
  172. 1810 IF PJ>8 THEN 1830
  173. 1820 TM(PJ,8)=1
  174. 1830 RETURN
  175. 1840 REM
  176. 1850 R=0
  177. 1860 GOTO 1880
  178. 1870 R=1
  179. 1880 MV(1,1)=0
  180. 1890 S1=SGN(TM(X,Y))
  181. 1900 AA=X*10+Y
  182. 1910 N=1
  183. 1920 ON ABS(TM(X,Y)) GOSUB 2330,2770,2880,3140,3400,3440
  184. 1930 IF N=1 THEN 1950
  185. 1940 IF R=1 THEN 1970
  186. 1950 N=N-1
  187. 1960 RETURN
  188. 1970 REM -- IF RESTRICTED --
  189. 1980 N1=N-1
  190. 1990 N=N1
  191. 2000 FOR K=1 TO N1
  192. 2010 C1=FNL(MV(K,1))
  193. 2020 C2=FNM(MV(K,1))
  194. 2030 C3=FNL(MV(K,2))
  195. 2040 C4=FNM(MV(K,2))
  196. 2050 IF ABS(TM(C3,C4))=6 THEN 2070
  197. 2060 IF SGN(TM(C3,C4))<>S1 THEN 2080
  198. 2070 MV(K,1)=0:MV(K,2)=0:GOTO 2290
  199. 2080 C5=TM(C3,C4)
  200. 2090 TM(C3,C4)=TM(C1,C2)
  201. 2100 TM(C1,C2)=0
  202. 2110 REM -- FIND KING --
  203. 2120 FOR Y2=1 TO 8
  204. 2130 FOR X2=1 TO 8
  205. 2140 IF TM(X2,Y2)=6*S1 THEN 2170
  206. 2150 NEXT X2
  207. 2160 NEXT Y2
  208. 2170 REM
  209. 2180 FOR Y1=1 TO 8
  210. 2190 FOR X1=1 TO 8
  211. 2200 IF SGN(TM(X1,Y1))<>-S1 THEN 2250
  212. 2210 IF TM(X1,Y1)<>-S1 THEN 2230
  213. 2220 IF X1=X2 AND ABS(Y2-Y1)>2 THEN 2250
  214. 2230 GOSUB 3660
  215. 2240 IF LG=1 THEN 2310
  216. 2250 NEXT X1
  217. 2260 NEXT Y1
  218. 2270 TM(C1,C2)=TM(C3,C4)
  219. 2280 TM(C3,C4)=C5
  220. 2290 NEXT K
  221. 2300 RETURN
  222. 2310 MV(K,1)=0:MV(K,2)=0
  223. 2320 GOTO 2250
  224. 2330 REM -- RAW PAWN MOVE --
  225. 2340 IF S1=-1 THEN 2560
  226. 2350 IF Y+1>8 THEN 2550
  227. 2360 IF TM(X,Y+1)<>0 THEN 2450
  228. 2370 MV(N,1)=AA
  229. 2380 MV(N,2)=X*10+Y+1
  230. 2390 N=N+1
  231. 2400 IF Y>2 THEN 2450
  232. 2410 IF TM(X,Y+2)<>0 THEN 2450
  233. 2420 MV(N,1)=AA
  234. 2430 MV(N,2)=X*10+Y+2
  235. 2440 N=N+1
  236. 2450 IF X=1 THEN 2500
  237. 2460 IF SGN(TM(X-1,Y+1))<>-S1 THEN 2500
  238. 2470 MV(N,1)=AA
  239. 2480 MV(N,2)=(X-1)*10+Y+1
  240. 2490 N=N+1
  241. 2500 IF X=8 THEN 2550
  242. 2510 IF SGN(TM(X+1,Y+1))<>-S1 THEN 2550
  243. 2520 MV(N,1)=AA
  244. 2530 MV(N,2)=(X+1)*10+Y+1
  245. 2540 N=N+1
  246. 2550 RETURN
  247. 2560 IF Y-1<1 THEN 2760
  248. 2570 IF TM(X,Y-1)<>0 THEN 2660
  249. 2580 MV(N,1)=AA
  250. 2590 MV(N,2)=X*10+Y-1
  251. 2600 N=N+1
  252. 2610 IF Y<7 THEN 2660
  253. 2620 IF TM(X,Y-2)<>0 THEN 2660
  254. 2630 MV(N,1)=AA
  255. 2640 MV(N,2)=X*10+Y-2
  256. 2650 N=N+1
  257. 2660 IF X=1 THEN 2710
  258. 2670 IF SGN(TM(X-1,Y-1))<>-S1 THEN 2710
  259. 2680 MV(N,1)=AA
  260. 2690 MV(N,2)=(X-1)*10+Y-1
  261. 2700 N=N+1
  262. 2710 IF X=8 THEN 2760
  263. 2720 IF SGN(TM(X+1,Y-1))<>-S1 THEN 2760
  264. 2730 MV(N,1)=AA
  265. 2740 MV(N,2)=(X+1)*10+Y-1
  266. 2750 N=N+1
  267. 2760 RETURN
  268. 2770 REM -- RAW KNIGHT MOVE --
  269. 2780 FOR C6=1 TO 15 STEP 2
  270. 2790 KL=V(C6):KM=V(C6+1)
  271. 2800 XT=X+KL
  272. 2810 YT=Y+KM
  273. 2820 IF XT>8 OR XT<1 OR YT>8 OR YT<1 THEN 2860
  274. 2830 MV(N,1)=AA
  275. 2840 MV(N,2)=XT*10+YT
  276. 2850 N=N+1
  277. 2860 NEXT C6
  278. 2870 RETURN
  279. 2880 REM -- RAW BISHOP MOVE --
  280. 2890 EL=(8-Y)*-(8-Y<=8-X)+(8-X)*-(8-X < 8-Y)
  281. 2900 IF EL=0 THEN 2930
  282. 2910 C6=11
  283. 2920 GOSUB 3060
  284. 2930 EL=(8-Y)*-(8-Y <= X-1)+(X-1)*-(X-1 < 8-Y)
  285. 2940 IF EL=0 THEN 2970
  286. 2950 C6=-9
  287. 2960 GOSUB 3060
  288. 2970 EL=(8-X)*-(8-X <= Y-1)+(Y-1)*-(Y-1 < 8-X)
  289. 2980 IF EL=0 THEN 3010
  290. 2990 C6=9
  291. 3000 GOSUB 3060
  292. 3010 EL=(Y-1)*-(Y-1 <= X-1)+(X-1)*-(X-1 < Y-1)
  293. 3020 IF EL=0 THEN 3050
  294. 3030 C6=-11
  295. 3040 GOSUB 3060
  296. 3050 RETURN
  297. 3060 FOR E=1 TO EL
  298. 3070 F=C6*E
  299. 3080 MV(N,1)=AA
  300. 3090 MV(N,2)=AA+F
  301. 3100 N=N+1
  302. 3110 IF TM(FNL(AA+F),FNM(AA+F))<>0 THEN 3130
  303. 3120 NEXT E
  304. 3130 RETURN
  305. 3140 REM -- RAW ROOK MOVE --
  306. 3150 EL=8-Y
  307. 3160 IF EL=0 THEN 3190
  308. 3170 C6=1
  309. 3180 GOSUB 3320
  310. 3190 EL=Y-1
  311. 3200 IF EL=0 THEN 3230
  312. 3210 C6=-1
  313. 3220 GOSUB 3320
  314. 3230 EL=8-X
  315. 3240 IF EL=0 THEN 3270
  316. 3250 C6=10
  317. 3260 GOSUB 3320
  318. 3270 EL=X-1
  319. 3280 IF EL=0 THEN 3310
  320. 3290 C6=-10
  321. 3300 GOSUB 3320
  322. 3310 RETURN
  323. 3320 FOR E=1 TO EL
  324. 3330 F=C6*E
  325. 3340 MV(N,1)=AA
  326. 3350 MV(N,2)=AA+F
  327. 3360 N=N+1
  328. 3370 IF TM(FNL(AA+F),FNM(AA+F))<>0 THEN 3390
  329. 3380 NEXT E
  330. 3390 RETURN
  331. 3400 REM -- RAW QUEEN MOVE --
  332. 3410 GOSUB 2880
  333. 3420 GOSUB 3140
  334. 3430 RETURN
  335. 3440 REM -- RAW KING MOVE --
  336. 3450 IF X=8 THEN 3510
  337. 3460 C6=10:GOSUB 3620
  338. 3470 IF Y=1 THEN 3500
  339. 3480 C6=9:GOSUB 3620
  340. 3490 IF Y=8 THEN 3520
  341. 3500 C6=11:GOSUB 3620
  342. 3510 IF X=1 THEN 3570
  343. 3520 C6=-10:GOSUB 3620
  344. 3530 IF Y=8 THEN 3570
  345. 3540 C6=-9:GOSUB 3620
  346. 3550 IF Y=1 THEN 3570
  347. 3560 C6=-11:GOSUB 3620
  348. 3570 IF Y=1 THEN 3590
  349. 3580 C6=-1:GOSUB 3620
  350. 3590 IF Y=8 THEN 3610
  351. 3600 C6=1:GOSUB 3620
  352. 3610 RETURN
  353. 3620 MV(N,1)=AA
  354. 3630 MV(N,2)=AA+C6
  355. 3640 N=N+1
  356. 3650 RETURN
  357. 3660 REM
  358. 3670 RR=0
  359. 3680 GOTO 3700
  360. 3690 RR=1
  361. 3700 IF TM(X1,Y1)<>0 THEN 3720
  362. 3710 LG=0:RETURN
  363. 3720 S=SGN(TM(X1,Y1))
  364. 3730 A=X1*10+Y1
  365. 3740 B=X2*10+Y2
  366. 3750 ON ABS(TM(X1,Y1)) GOSUB 4070,4270,4340,4510,4630,4680
  367. 3760 IF LG=0 THEN RETURN
  368. 3770 IF RR=1 THEN 3790
  369. 3780 LG=1:RETURN
  370. 3790 REM -- IF RESTRICTED --
  371. 3800 IF S=SGN(TM(X2,Y2)) THEN 3710
  372. 3810 T1=X1:T2=Y1:T3=X2:T4=Y2:T=TM(X2,Y2)
  373. 3820 TM(X2,Y2)=TM(X1,Y1):TM(X1,Y1)=0
  374. 3830 SV=S
  375. 3840 REM -- FIND KING --
  376. 3850 FOR Y2=1 TO 8
  377. 3860 FOR X2=1 TO 8
  378. 3870 IF TM(X2,Y2)=6*S THEN 3910
  379. 3880 NEXT X2
  380. 3890 NEXT Y2
  381. 3900 END
  382. 3910 REM
  383. 3920 FOR Y1=1 TO 8
  384. 3930 FOR X1=1 TO 8
  385. 3940 P=TM(X1,Y1):IF SGN(P)=S OR P=0 OR ABS(P)=6 THEN 3980
  386. 3950 GOSUB 3660
  387. 3960 S=SV
  388. 3970 IF LG=1 THEN 4050
  389. 3980 NEXT X1
  390. 3990 NEXT Y1
  391. 4000 LG=1
  392. 4010 TM(T1,T2)=TM(T3,T4)
  393. 4020 TM(T3,T4)=T
  394. 4030 X1=T1:Y1=T2:X2=T3:Y2=T4
  395. 4040 RETURN
  396. 4050 LG=0
  397. 4060 GOTO 4010
  398. 4070 REM -- RAW PAWN MOVE --
  399. 4080 IF SGN(Y2-Y1)=S THEN 4110
  400. 4090 LG=0:RETURN
  401. 4100 LG=1:RETURN
  402. 4110 IF S=-1 THEN 4190
  403. 4120 IF B-A=1 OR B-A=2 THEN 4160
  404. 4130 IF TM(X2,Y2)=0 THEN 4090
  405. 4140 IF B-A=-9 OR B-A=11 THEN 4100
  406. 4150 GOTO 4090
  407. 4160 IF Y2=2 THEN 4100
  408. 4170 IF B-A=1 THEN 4100
  409. 4180 GOTO 4090
  410. 4190 IF A-B=1 OR A-B=2 THEN 4230
  411. 4200 IF TM(X2,Y2)=0 THEN 4090
  412. 4210 IF A-B=-9 OR A-B=11 THEN 4100
  413. 4220 GOTO 4090
  414. 4230 IF Y2=7 THEN 4100
  415. 4240 IF A-B=1 THEN 4100
  416. 4250 IF Y1=7 AND A-B=2 THEN 4100
  417. 4260 GOTO 4090
  418. 4270 REM -- RAW KNIGHT MOVE --
  419. 4280 FOR P=17 TO 24
  420. 4290 P1=V(P)
  421. 4300 IF A+P1<>B THEN 4320
  422. 4310 LG=1:RETURN
  423. 4320 NEXT P
  424. 4330 LG=0:RETURN
  425. 4340 REM -- RAW BISHOP MOVE --
  426. 4350 IF Y2=Y1 OR X2=X1 THEN 4420
  427. 4360 SP=-9
  428. 4370 IF X2<X1 THEN 4470
  429. 4380 IF Y1<Y2 THEN 4430
  430. 4390 SP=9
  431. 4400 P=INT(ABS(A-B)/9)
  432. 4410 IF ABS(A-B)/9=P THEN 4490
  433. 4420 LG=0:RETURN
  434. 4430 SP=11
  435. 4440 P=INT(ABS(A-B)/11)
  436. 4450 IF ABS(A-B)/11<>P THEN 4420
  437. 4460 GOTO 4490
  438. 4470 IF Y1<Y2 THEN 4400
  439. 4480 SP=-11:GOTO 4440
  440. 4490 GOSUB 4950
  441. 4500 RETURN
  442. 4510 REM -- RAW ROOK MOVES --
  443. 4520 IF Y2=Y1 THEN 4590
  444. 4530 IF X1=X2 THEN 4550
  445. 4540 LG=0:RETURN
  446. 4550 P=ABS(B-A)
  447. 4560 SP=SGN(B-A)
  448. 4570 GOSUB 4950
  449. 4580 RETURN
  450. 4590 P=ABS(INT((B-A)/10))
  451. 4600 SP=SGN(B-A)*10
  452. 4610 GOSUB 4950
  453. 4620 RETURN
  454. 4630 REM -- RAW QUEEN MOVE --
  455. 4640 GOSUB 4340
  456. 4650 IF LG=1 THEN RETURN
  457. 4660 GOSUB 4510
  458. 4670 RETURN
  459. 4680 REM -- KING MOVE --
  460. 4690 IF ABS(A-B)<>20 THEN 4890
  461. 4700 IF A-B=20 THEN 4730
  462. 4710 IF CB<>1 AND CB<>3 THEN 4880
  463. 4720 GOTO 4740
  464. 4730 IF CB=0 OR CB=1 THEN 4880
  465. 4740 PS=SGN(A-B):FORP2=28+50*((PS=-1)*-1)TOA+10-20*((PS=-1)+1)STEP10*P
  466. 4750 IF TM(FNL(P2),FNM(P2))<>0 THEN 4880
  467. 4760 NEXT P2:T1=X1:T2=Y1:T3=X2:T4=Y2
  468. 4770 FOR P2=A TO 18+70*((PS=-1)*-1) STEP 10*-PS
  469. 4780 X2=FNL(P2):Y2=FNM(P2)
  470. 4790 FOR X1=1 TO 8
  471. 4800 FOR Y1=1 TO 8
  472. 4810 IF SGN(TM(X1,Y1))<>1 THEN 4840
  473. 4820 GOSUB 3690
  474. 4830 IF LG=1 THEN 4880
  475. 4840 NEXT Y1:NEXT X1:NEXT P2
  476. 4850 LG=1
  477. 4860 X1=T1:Y1=T2:X2=T3:Y2=T4
  478. 4870 RETURN
  479. 4880 LG=0:GOTO 4860
  480. 4890 FOR P=25 TO 32
  481. 4900 P1=V(P)
  482. 4910 IF B=A+P1 THEN 4940
  483. 4920 NEXT P
  484. 4930 LG=0:RETURN
  485. 4940 LG=1:RETURN
  486. 4950 REM
  487. 4960 LG=0
  488. 4970 IF P=0 THEN STOP
  489. 4980 IF P>1 THEN 5000
  490. 4990 LG=1:RETURN
  491. 5000 FOR P1=1 TO P-1
  492. 5010 P2=A+SP*P1
  493. 5020 IF TM(FNL(P2),FNM(P2))<>0 THEN RETURN
  494. 5030 NEXT P1
  495. 5040 LG=1:RETURN
  496. 5050 END
  497.