home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / cpmug / cpmug013.ark / CHECKERS.BAS < prev    next >
Encoding:
BASIC Source File  |  1984-04-29  |  5.4 KB  |  228 lines

  1. 10  PRINT "I CAN PLAY CHECKERS WITH YOU. I AM X."
  2. 20  PRINT "AND YOU ARE O. THE COMPUTER WILL GO FIRST,-NOTE:  SQUARES"
  3. 30  PRINT "ARE IN THE FORM-(X,Y) AND SQ. 1,1 IS THE BOTTOM LEFT!"
  4. 40  PRINT "DO NOT ATTEMPT A DOUBLE JUMP ON YOUR PIECE MIGHT JUST "
  5. 50  PRINT "DISAPPEAR(SAME FOR A TRIPLE!)"
  6. 60  PRINT "    WAIT FOR THE COMP. TO MOVE!!!!!"
  7. 70  LET G=-1
  8. 75  LET L=-1
  9. 80  DIM R(50),M(50)
  10. 85  REM        ODD(X)
  11. 90  DEF FND(X)=X-2*INT(X/2)
  12. 100  DIM S(10,10)
  13. 110  DATA  1, 0, 1, 0, 0, 0,-1, 0, 0, 1, 0, 0, 0,-1, 0,-1, 15
  14. 120  FOR X=1 TO 8
  15. 130    FOR Y=1 TO 8
  16. 140      READ J
  17. 150      IF J=15 THEN  180 
  18. 160      LET S(X,Y)=J
  19. 170      GOTO  200 
  20. 180      RESTORE
  21. 190      READ S(X,Y)
  22. 200    NEXT Y
  23. 210  NEXT X
  24. 220  REM    
  25. 225  LET L=1
  26. 230  REM 
  27. 240  FOR X2=1 TO 8
  28. 250    FOR Y2=1 TO 8
  29. 255      LET S9=S(X2,Y2)
  30. 260      IF S9>= 0 THEN  380 
  31. 310      IF S9=-2 THEN  340 
  32. 320      GOSUB  430 
  33. 330      GOTO  380 
  34. 340      GOSUB  650 
  35. 380    NEXT Y2
  36. 390  NEXT X2
  37. 393  IF L=1 THEN  400 
  38. 396  RETURN 
  39. 400  PRINT 
  40. 410  GOSUB  1140 
  41. 420  GOTO  220 
  42. 430  REM 
  43. 435  LET U=X2-1
  44. 450  IF U<1 THEN  540 
  45. 460  REM 
  46. 470  LET V=Y2-1
  47. 480  IF V<1 THEN  625 
  48. 485  IF S(U,V)<> 0 THEN  500 
  49. 490  GOSUB  910 
  50. 500  IF S(U,V)<= 0 THEN  540 
  51. 505  LET U=X2-2
  52. 507  IF U<1 THEN  540 
  53. 510  LET V=V-1
  54. 520  IF V<1 THEN  540 
  55. 525  IF S(U,V)<> 0 THEN  540 
  56. 530  GOSUB  910 
  57. 540  REM 
  58. 550  LET U=X2+1
  59. 560  IF U>8 THEN  630 
  60. 570  REM 
  61. 580  LET V=Y2-1
  62. 583  IF V<1 THEN  630 
  63. 587  IF S(U,V)<> 0 THEN  600 
  64. 590  GOSUB  910 
  65. 600  IF S(U,V)<= 0 THEN  630 
  66. 605  LET U=X2+2
  67. 607  IF U>8 THEN  630 
  68. 610  LET V=V-1
  69. 615  IF V<1 THEN  630 
  70. 617  IF S(U,V)<> 0 THEN  630 
  71. 620  GOSUB  910 
  72. 625  REM   WHERE DID I GO ??
  73. 630  RETURN 
  74. 650  REM    KING MOVES
  75. 660  FOR A=-1 TO 1 STEP 2
  76. 670    FOR B=-1 TO 1 STEP 2
  77. 680      LET U=X2+A
  78. 690      LET V=Y2+B
  79. 700      IF U<1 THEN  870 
  80. 710      IF U>8 THEN  870 
  81. 720      IF V<1 THEN  870 
  82. 730      IF V>8 THEN  870 
  83. 740      IF S(U,V)<> 0 THEN  770 
  84. 750      GOSUB  910 
  85. 760      GOTO  870 
  86. 770      IF S(U,V)=G THEN  870 
  87. 780      IF S(U,V)=2*G THEN  870 
  88. 790      LET U=U+A
  89. 810      IF U<1 THEN  870 
  90. 820      IF U>8 THEN  870 
  91. 830      IF V<1 THEN  870 
  92. 840      IF V>8 THEN  870 
  93. 850      IF S(U,V)<> 0 THEN  870 
  94. 860      GOSUB  910 
  95. 870    NEXT B
  96. 880  NEXT A
  97. 890  RETURN 
  98. 900  REM 
  99. 910  REM        EVAL. SECTION
  100. 920  LET P=P+1
  101. 940  IF V<>1 THEN  960 
  102. 950  LET Q=Q+2
  103. 960  IF V<>8 THEN  980 
  104. 970  LET Q=Q-2
  105. 980  REM    
  106. 990  IF U<>1 THEN  1010 
  107. 1000  LET Q=Q+1
  108. 1010  IF U<>8 THEN  1030 
  109. 1020  LET Q=Q+1
  110. 1030  FOR C=-1 TO 1 STEP 2
  111. 1033    IF U+C<1 THEN  1060 
  112. 1037    IF U+C>8 THEN  1060 
  113. 1040    IF S(U+C,V+G)<1 THEN  1060 
  114. 1050    LET Q=Q-1
  115. 1060    REM 
  116. 1062    IF U-C>8 THEN  1100 
  117. 1063    IF U-C<1 THEN  1100 
  118. 1064    IF S(U-C,V-G)<1 THEN  1080 
  119. 1070    LET Q=Q+5
  120. 1080    REM 
  121. 1090    REM   
  122. 1100  NEXT C
  123. 1110  LET R(P)=Q
  124. 1112  LET M(P)=X2*10+Y2+V/10+U/100
  125. 1120  LET Q= 0
  126. 1130  RETURN 
  127. 1140  IF P= 0 THEN  1880 
  128. 1150  LET J1=-10
  129. 1155  LET J2=1
  130. 1160  FOR F=1 TO P
  131. 1170    IF R(F)<=J1 THEN  1180 
  132. 1172    LET J1=R(F)
  133. 1174    LET J2=F
  134. 1180  NEXT F
  135. 1200  LET X2= INT (M(J2)/10)
  136. 1210  LET Y2= INT (M(J2)-X2*10)
  137. 1220  LET V= INT ((M(J2)- INT (M(J2)))*10)
  138. 1230  LET U= INT ((M(J2)-X2*10-Y2-V/10)*100+.5)
  139. 1235  PRINT "I MOVE FROM ";X2;Y2,"TO ";U;V
  140. 1240  LET F= 0
  141. 1245  LET P2=P
  142. 1250  LET P= 0
  143. 1260  LET K= 0
  144. 1270  IF V<>1 THEN  1300 
  145. 1280  LET S(U,V)=2*G
  146. 1290  GOTO  1310 
  147. 1300  LET S(U,V)=S(X2,Y2)
  148. 1310  LET S(X2,Y2)= 0
  149. 1320  IF  ABS (X2-U)<>2 THEN  1340 
  150. 1330  LET S((X2+U)/2,(Y2+V)/2)= 0
  151. 1340  GOTO  1370 
  152. 1345  PRINT "BOARD";
  153. 1350  INPUT D
  154. 1360  IF D= 0 THEN  1390 
  155. 1370  GOSUB  1410 
  156. 1375  IF F9=0 THEN PRINT "GEE - I WIN, THANKS FOR THE GAME" : STOP
  157. 1390  GOSUB  1580 
  158. 1400  RETURN 
  159. 1410  PRINT 
  160. 1415  F9=0                 REM  COUNT PLAYER'S PIECES
  161. 1420  FOR Y=8 TO 1 STEP -1
  162. 1425    PRINT " ";Y;
  163. 1430    FOR X=1 TO 8
  164. 1435      LET X9=S(X,Y)
  165. 1438      IF FND(X)=FND(Y) THEN 1450
  166. 1442      PRINT "  ";
  167. 1448      GOTO 1550
  168. 1450      IF S(X,Y)<> 0 THEN  1470 
  169. 1460      PRINT ". ";
  170. 1465      GOTO  1550 
  171. 1470      IF  ABS (X9)=2 THEN  1510 
  172. 1475      IF X9=-1 THEN  1500 
  173. 1480      PRINT "O ";
  174. 1485      F9=1
  175. 1490      GOTO  1550 
  176. 1500      PRINT "X ";
  177. 1505      GOTO  1550 
  178. 1510      IF S(X,Y)<>-2 THEN  1530 
  179. 1520      PRINT "X*";
  180. 1525      GOTO  1550 
  181. 1530      REM 
  182. 1540      PRINT "O*";
  183. 1545      F9=1
  184. 1550    NEXT X
  185. 1560    PRINT 
  186. 1570  NEXT Y
  187. 1573  PRINT "   1.2.3.4.5.6.7.8."
  188. 1575  RETURN 
  189. 1580  PRINT 
  190. 1590  PRINT "FROM";
  191. 1600  INPUT E,H
  192. 1610  LET X=E
  193. 1620  LET Y=H
  194. 1630  IF S(X,Y)> 0 THEN  1670 
  195. 1640  PRINT "THERE IS NO ONE OCCUPING THAT SPACE"
  196. 1650  PRINT 
  197. 1660  GOTO  1590 
  198. 1670  PRINT ,"TO  ";
  199. 1680  INPUT A,B
  200. 1690  LET X=A
  201. 1700  LET Y=B
  202. 1710  IF S(X,Y)= 0 THEN  1742 
  203. 1720  PRINT "THAT SPACE IS ALREADY OCCUPIED"
  204. 1730  PRINT 
  205. 1740  GOTO  1590
  206. 1742  IF ABS(E-A)=ABS(H-B) THEN 1746
  207. 1744    PRINT "ILLEGAL MOVE" : GOTO 1590
  208. 1746  IF ABS(E-A)>2 OR (ABS(E-A)=2  AND  S((E+A)/2,(H+B)/2)=0) THEN 1744
  209. 1750  LET S(A,B)=S(E,H)
  210. 1770  LET S(E,H)= 0
  211. 1780  LET T=(4.5-(3.5*G))
  212. 1790  IF  ABS (E-A)<>2 THEN  1810 
  213. 1800  LET S((E+A)/2,(H+B)/2)= 0
  214. 1810  IF B<>T THEN  1830 
  215. 1820  LET S(A,B)=-2*G
  216. 1830  REM 
  217. 1850  RETURN 
  218. 1880  PRINT "    VERY GOOD, YOU WIN!"
  219. 1890  PRINT 
  220. 1900  PRINT 
  221. 1920  END 
  222. 2000  FOR F=1 TO P2
  223. 2010    PRINT R(F);M(F),
  224. 2015  NEXT F
  225. 2020  STOP 
  226. 3000  GOSUB  1410 
  227. 3010  GOTO  1580 
  228.