home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib33a.dsk / JANUARY.1988 / CH.CHECKERS.bas next >
BASIC Source File  |  2023-02-26  |  11KB  |  186 lines

  1. 10  REM ************************
  2. 20  REM *                      *
  3. 30  REM * CH.CHECKERS          *
  4. 40  REM * BY BRUNO CROFT       *
  5. 50  REM * COPYRIGHT (C) 1988   *
  6. 60  REM * BY MICROSPARC, INC.  *
  7. 70  REM * CONCORD, MA  01742   *
  8. 80  REM ************************
  9. 90  GOTO 140
  10. 100 MA = 0: FOR I = 9 TO 6  STEP  -1: FOR J = 15 -I TO 9: IF  PEEK(16514 -I *11 -J) = 1  THEN MA = MA +1
  11. 110  NEXT J,I: RETURN : REM  PLAYER'S TRIANGLE
  12. 120 MA = 0: FOR I = 1 TO 4: FOR J = 1 TO 5 -I: IF  PEEK(16514 -I *11 -J) = 2  THEN MA = MA +1
  13. 130  NEXT J,I: RETURN : REM  APPLE'S TRIANGLE
  14. 140 D$ =  CHR$(4): ONERR  GOTO 1780
  15. 150  PRINT D$"VERIFY CHINESE.BIN": PRINT D$"VERIFY CHINESE.TABLES": POKE 216,0
  16. 160  IF  PEEK(104) < >96  THEN  POKE 103,1: POKE 104,96: POKE 24576,0: PRINT D$;"RUN CH.CHECKERS"
  17. 170 B$ =  CHR$(7): GOSUB 1120: PRINT D$;"BLOAD CHINESE.BIN": PRINT D$;"BLOAD CHINESE.TABLES": POKE 2,22: POKE 3,65:B = 0:W = 3:TIME = 70: SCALE= 1: ROT= 0
  18. 180  VTAB 22: PRINT "J)OYSTICK, K)EYBOARD OR <ESC> TO END": GET A$: IF A$ =  CHR$(27)  THEN  TEXT : HOME : END 
  19. 190  ON A$ < >"K"  AND A$ < >"J" GOTO 180: IF A$ = "K"  THEN KB = 1: REM  8 SPACES
  20. 200  VTAB 23: HTAB 6: PRINT " DO YOU WANT TO GO FIRST? ";: GET A$: IF A$ < >"Y"  AND A$ < >"N"  THEN  PRINT B$;: VTAB 22: GOTO 200
  21. 210  HOME : POKE  -16304,0: POKE  -16300,0: POKE  -16297,0: POKE  -16302,0: IF A$ = "Y"  THEN  GOSUB 1290: GOTO 590
  22. 220  GOSUB 1290: GOTO 380
  23. 230  CALL 2400: REM  APPLE'S MOVE
  24. 240  IF  PEEK(16406) = 0  THEN  POKE 16662,16: REM  PATCH FOR BACKJUMP
  25. 250 R = 118 - PEEK(770):R1 =  INT(R/11) +1:C = R - INT(R/11) *11 +1:R = 118 - PEEK(771):R2 =  INT(R/11) +1:C2 = R - INT(R/11) *11 +1
  26. 260 COUP = COUP +1: IF R2 = R1  AND C2 = C  THEN 280: REM  NO MOVE FOUND
  27. 270  POKE (16514 -R2 *11 -C2),2: POKE (16514 -R1 *11 -C),0: GOTO 290
  28. 280  POKE  -16301,0: FLASH : VTAB 22: HTAB 16: PRINT "** I WIN **"B$B$: NORMAL : VTAB 23: PRINT "PRESS <RETURN> TO CONTINUE";: GET CH$: PRINT CH$: RESTORE : HOME : GOTO 90
  29. 290  GOSUB 300: GOSUB 510: GOTO 590
  30. 300  REM  DRAW APPLE'S MOVE
  31. 310 XA = 140 +(R1 -C) *10:YA = 206 -(R1 +C) *11: FOR XX = 1 TO 5: IF XX = 1  THEN  POKE 7,30 +R1 *C: CALL 772
  32. 320  HCOLOR= W: DRAW 1 AT XA,YA: HCOLOR= B: DRAW 2 AT XA,YA: IF XX = 5  THEN 340
  33. 330  FOR ZZ = 1 TO TIME/2: NEXT : HCOLOR= W: DRAW 2 AT XA,YA: HCOLOR= 5: DRAW 1 AT XA,YA: FOR ZZ = 1 TO TIME/2: NEXT 
  34. 340  NEXT :XA = 140 +(R2 -C2) *10:YA = 206 -(R2 +C2) *11: FOR XX = 1 TO 3: HCOLOR= W: DRAW 2 AT XA,YA: HCOLOR= 5: DRAW 1 AT XA,YA: IF XX = 1  THEN  POKE 6,30: POKE 7,30 +R2 *C2: CALL 772
  35. 350  IF XX = 3  THEN 370
  36. 360  FOR ZZ = 1 TO TIME/2: NEXT : HCOLOR= W: DRAW 1 AT XA,YA: HCOLOR= B: DRAW 2 AT XA,YA: FOR ZZ = 1 TO TIME/2: NEXT 
  37. 370  NEXT : RETURN 
  38. 380  REM  OPENINGS
  39. 390  IF COUP >0  THEN 230
  40. 400 OP =  INT( RND(1) *10): IF OP <5  THEN 420
  41. 410 R1 = 9:C = 6:R2 = 8:C2 = 6: GOTO 260
  42. 420 R1 = 6:C = 9:R2 = 6:C2 = 8: POKE 16664,30: GOTO 260
  43. 430  REM  PLAYER'S END
  44. 440  GOSUB 100: IF MA < >10  THEN 500
  45. 450  IF NU = 1  THEN  POKE  -16301,0: FLASH : VTAB 22: HTAB 16: PRINT "** DRAW **"B$B$: NORMAL : VTAB 23: PRINT "PRESS <RETURN> TO CONTINUE";: GET CH$: PRINT : RESTORE : HOME : GOTO 90
  46. 460  CALL 2400:R = 118 - PEEK(770):R1 =  INT(R/11) +1:C = R - INT(R/11) *11 +1:R = 118 - PEEK(771):R2 =  INT(R/11) +1:C2 = R - INT(R/11) *11 +1
  47. 470  POKE (16514 -R2 *11 -C2),2: POKE (16514 -R1 *11 -C),0: GOSUB 120: GOSUB 300: HOME : POKE  -16301,0: FLASH : VTAB 22: HTAB 16
  48. 480  IF MA = 10  THEN  PRINT "** DRAW **"B$: NORMAL : VTAB 23: PRINT "PRESS <RETURN> TO CONTINUE";: GET CH$: PRINT : RESTORE : HOME : GOTO 90
  49. 490  HTAB 14: PRINT "** YOU WIN **"B$B$: NORMAL :: VTAB 23: PRINT "PRESS <RETURN> TO CONTINUE";: GET CH$: PRINT : RESTORE : HOME : GOTO 90
  50. 500  RETURN 
  51. 510  REM  APPLE'S END
  52. 520  GOSUB 120
  53. 530  IF MA < >10  THEN 580
  54. 540  IF FI = 0  THEN 560
  55. 550  GOSUB 100: IF MA = 9  THEN 570
  56. 560  POKE  -16301,0: FLASH : VTAB 22: HTAB 15: PRINT "** I WIN             **"B$B$: NORMAL : VTAB 23: PRINT "PRESS <RETURN> TO CONTINUE";: GET CH$: PRINT : RESTORE : HOME : GOTO 90
  57. 570  HOME : POKE  -16301,0: FLASH : VTAB 22: HTAB 2: PRINT "* YOU MUST FINISH THIS TURN FOR DRAW *"B$B$: FOR I = 1 TO 1200: NEXT : POKE  -16302,0: HOME :NU = 1: NORMAL 
  58. 580  RETURN 
  59. 590  REM  PLAYER'S MOVE
  60. 600  IF   NOT KB  THEN 630
  61. 610 H = 5:V = 5
  62. 620  GOSUB 1210: GOTO 650
  63. 630  IF  PEEK( -16287) >127  THEN 630
  64. 640 V = 9 - INT( PDL(0)/30):H = 9 - INT( PDL(1)/30)
  65. 650 HOLE =  PEEK(16514 -H *11 -V):XA = 140 +(H -V) *10:YA = 206 -(H +V) *11: IF HOLE < >0  THEN 670
  66. 660  HCOLOR= W: DRAW 2 AT XA,YA
  67. 670  HCOLOR= 2: DRAW 1 AT XA,YA: IF KB  THEN 700
  68. 680  IF  PEEK( -16287) >127  AND HOLE = 1  THEN 780
  69. 690  GOTO 710
  70. 700  IF KB  AND HOLE = 1  THEN  IF X = 160  THEN 780
  71. 710  FOR T = 1 TO TIME/2: NEXT : IF HOLE < >2  THEN 730
  72. 720  HCOLOR= 5: DRAW 1 AT XA,YA: GOTO 760
  73. 730  IF HOLE < >1  THEN 750
  74. 740  HCOLOR= B: DRAW 1 AT XA,YA: GOTO 760
  75. 750  HCOLOR= W: DRAW 1 AT XA,YA: HCOLOR= B: DRAW 2 AT XA,YA
  76. 760  FOR T = 1 TO TIME/2: NEXT :M1 = H:N1 = V: IF KB  THEN 620
  77. 770  GOTO 640
  78. 780  REM  MOVE TO
  79. 790  POKE 6,30: POKE 7,30 +H1 *V1: CALL 772: HCOLOR= 1: POKE 16514 -H *11 -V,6: CALL 2367: DRAW 1 AT XA,YA:H1 = H:V1 = V: POKE 16514 -H *11 -V,3
  80. 800  IF   NOT KB  THEN 830
  81. 810  REM 
  82. 820  GOSUB 1210: GOTO 850
  83. 830  IF  PEEK( -16287) >127  THEN 830
  84. 840 V = 9 - INT( PDL(0)/30):H = 9 - INT( PDL(1)/30)
  85. 850 HOLE =  PEEK(16514 -H *11 -V):XA = 140 +(H -V) *10:YA = 206 -(H +V) *11: IF HOLE < >0  AND HOLE < >4  THEN 870
  86. 860  HCOLOR= W: DRAW 2 AT XA,YA
  87. 870  HCOLOR= 2: DRAW 1 AT XA,YA: IF   NOT KB  THEN 900
  88. 880  IF X < >160  THEN 960
  89. 890  GOTO 910
  90. 900  IF  PEEK( -16287) <128  THEN 960
  91. 910  IF HOLE = 4  AND (H +V) > = (H1 +V1)  THEN 1060
  92. 920  IF HOLE = 0  AND  ABS(H -H1) <2  AND  ABS(V -V1) <2  AND (H +V) > = (H1 +V1)  AND (H +V) <(H1 +V1 +2)  THEN 1060
  93. 930  IF HOLE = 3  THEN  HCOLOR= B: DRAW 1 AT XA,YA: CALL 2341: POKE 16514 -H *11 -V,1: POKE 6,30: POKE 7,30 +H1 *V1: CALL 772: GOTO 590
  94. 940  POKE  -16301,0: HOME : FLASH : VTAB 22: HTAB 14: PRINT " ILLEGAL MOVE ": FOR K = 1 TO 2: POKE 6,200: POKE 7,60: CALL 772: FOR J = 1 TO 50: NEXT : POKE 6,200: POKE 7,72: CALL 772: FOR J = 1 TO 100: NEXT : NEXT 
  95. 950  NORMAL : POKE  -16302,0: HOME 
  96. 960  FOR T = 1 TO TIME/2: NEXT : IF HOLE < >2  THEN 980
  97. 970  HCOLOR= 5: DRAW 1 AT XA,YA: GOTO 1030
  98. 980  IF HOLE < >1  THEN 1000
  99. 990  HCOLOR= B: DRAW 1 AT XA,YA: GOTO 1030
  100. 1000  IF HOLE < >3  THEN 1020
  101. 1010  HCOLOR= 1: DRAW 1 AT XA,YA: GOTO 1030
  102. 1020  HCOLOR= W: DRAW 1 AT XA,YA: HCOLOR= B: DRAW 2 AT XA,YA
  103. 1030  FOR T = 1 TO TIME/2: NEXT : IF KB  THEN 820
  104. 1040  GOTO 840
  105. 1050  POKE 16514 -H1 *11 -V1,0: FOR XX = 1 TO 4: HCOLOR= W: DRAW 1 AT XA,YA: HCOLOR= B: DRAW 2 AT XA,YA: IF XX = 4  THEN 1090
  106. 1060  HCOLOR= 1: DRAW 1 AT XA,YA: POKE 6,30: POKE 7,30 +H1 *V1: CALL 772: FOR ZZ = 1 TO TIME *2: NEXT :XA = 140 +(H1 -V1) *10:YA = 206 -(H1 +V1) *11: CALL 2341
  107. 1070  POKE 16514 -H1 *11 -V1,0: FOR XX = 1 TO 4: HCOLOR= W: DRAW 1 AT XA,YA: HCOLOR= B: DRAW 2 AT XA,YA: IF XX = 4  THEN 1090
  108. 1080  FOR ZZ = 1 TO TIME/2: NEXT : HCOLOR= W: DRAW 2 AT XA,YA: HCOLOR= 1: DRAW 1 AT XA,YA: FOR ZZ = 1 TO TIME/2: NEXT 
  109. 1090  NEXT : POKE 6,30: POKE 7,30 +H1 *V1: CALL 772:XA = 140 +(H -V) *10:YA = 206 -(H +V) *11: FOR XX = 1 TO 3: HCOLOR= W: DRAW 1 AT XA,YA: IF XX = 3  THEN 1110
  110. 1100  HCOLOR= B: DRAW 2 AT XA,YA: FOR ZZ = 1 TO TIME/2: NEXT : HCOLOR= W: DRAW 2 AT XA,YA: HCOLOR= 1: DRAW 1 AT XA,YA: FOR ZZ = 1 TO TIME/2: NEXT : NEXT 
  111. 1110  HCOLOR= B: DRAW 1 AT XA,YA: POKE 16514 -H *11 -V,1: GOSUB 430: GOTO 380
  112. 1120  REM 
  113. 1130  HGR : TEXT : HOME : PRINT "----------------------------------------CHINESE CHECKERS          BY BRUNO CROFT----------------------------------------": REM  41 DASHES EACH
  114. 1140  PRINT "   COPYRIGHT 1988 BY MICROSPARC, INC."
  115. 1150  PRINT : PRINT "    REDS: APPLE II": PRINT "    BLACKS: YOU": PRINT : PRINT : PRINT "            KEYBOARD CONTROLS": PRINT 
  116. 1160  PRINT  SPC( 18)"A   S" SPC( 36) CHR$(92)" /" SPC( 38);: FLASH : PRINT " ";: NORMAL : PRINT  SPC( 38)"/ " CHR$(92) SPC( 36)"Z   X"
  117. 1170  PRINT : PRINT 
  118. 1180  PRINT "    USE SPACE BAR TO ENTER YOUR MOVE"
  119. 1190  PRINT "----------------------------------------": REM  41 DASHES
  120. 1200  PRINT 
  121. 1210 X =  PEEK( -16384): IF X >127  THEN 1230: PRINT 
  122. 1220  RETURN 
  123. 1230  IF X = 160  THEN 1280
  124. 1240  IF X = 193  THEN V = V +1: IF V >9  THEN V = 9: GOTO 1280
  125. 1250  IF X = 211  THEN H = H +1: IF H >9  THEN H = 9: GOTO 1280
  126. 1260  IF X = 218  THEN H = H -1: IF H <1  THEN H = 1: GOTO 1280
  127. 1270  IF X = 216  THEN V = V -1: IF V <1  THEN V = 1
  128. 1280  POKE  -16368,0: RETURN 
  129. 1290  FOR I = 768 TO 823: READ A: POKE I,A: NEXT 
  130. 1300  GOTO 1330
  131. 1310 X = 140 +(H -V) *10:Y = (H +V) *11 -14
  132. 1320  RETURN 
  133. 1330  HGR : HCOLOR= 3: POKE  -16302,0
  134. 1340  HPLOT 0,0: CALL 62454
  135. 1350  HCOLOR= 1
  136. 1360 GC = 0
  137. 1370  HCOLOR= GC
  138. 1380 Y = 96
  139. 1390  POKE 232,0: POKE 233,3: SCALE= 1: ROT= 1
  140. 1400  FOR X = 60 TO 140  STEP 10
  141. 1410  HPLOT X,Y TO X +80,Y +88
  142. 1420  HPLOT X,192 -Y TO X +80,104 -Y
  143. 1430  HPLOT X,192 -Y TO 280 -X,192 -Y
  144. 1440  HPLOT X,Y TO 280 -X,Y
  145. 1450 Y = Y -11
  146. 1460  NEXT X
  147. 1470  HCOLOR= GC
  148. 1480  HPLOT 100,140 TO 20,52 TO 260,52 TO 180,140
  149. 1490  HCOLOR= 1: FOR I = 2 TO 5: HPLOT 20,52 +I TO 54,90 +I: NEXT 
  150. 1500  FOR I = 2 TO 5: HPLOT 260,52 +I TO 226,90 +I: NEXT 
  151. 1510  HCOLOR= 4
  152. 1520  HPLOT 100,52 TO 20,140 TO 260,140 TO 180,52
  153. 1530  HCOLOR= 1: FOR I = 141 TO 144: HPLOT 20,I TO 96,I: HPLOT 184,I TO 260,I: NEXT : HCOLOR= 4
  154. 1540  FOR H = 1 TO 9: FOR V = 1 TO 9
  155. 1550  IF (H +V <6)  OR (H +V >14)  THEN 1590
  156. 1560  GOSUB 1310
  157. 1570  HCOLOR= 3: DRAW 1 AT X,Y
  158. 1580  HCOLOR= 0: DRAW 2 AT X,Y
  159. 1590  NEXT : NEXT 
  160. 1600  GOSUB 1680
  161. 1610  HCOLOR= 6
  162. 1620  FOR I = 0 TO 50: HPLOT 0,I TO 130,0
  163. 1630  HPLOT 279,I TO 150,0
  164. 1640  HPLOT 0,191 -I TO 130,191
  165. 1650  HPLOT 279,191 -I TO 150,191
  166. 1660  NEXT 
  167. 1670  GOSUB 1810: RETURN 
  168. 1680  FOR H = 1 TO 4: FOR V = 1 TO 5 -H:A(H,V) = 2: GOSUB 1310
  169. 1690  HCOLOR= 3: DRAW 2 AT X,Y: HCOLOR= 5
  170. 1700  DRAW 1 AT X,Y: NEXT V
  171. 1710  NEXT H
  172. 1720  HCOLOR= 0
  173. 1730  FOR I = 4 TO 1  STEP  -1
  174. 1740  FOR J = 1 TO I:A(5 +I,10 -J) = 1:H = 5 +I:V = 10 -J
  175. 1750  HCOLOR= 3: GOSUB 1310: DRAW 2 AT X,Y: HCOLOR= 0: DRAW 1 AT X,Y
  176. 1760  NEXT : NEXT 
  177. 1770  RETURN 
  178. 1780  HOME : VTAB 12: PRINT "UNABLE TO LOAD CHINESE.BIN": PRINT " OR CHINESE.TABLES": PRINT : END 
  179. 1790  DATA  2,0,6,0,46,0,128,128,192,43,45,117,63,63,63,30,45,45,45,45,62,31,63,63,55,45,45,109,53,255,63,63,55
  180. 1800  DATA  45,45,45,45,30,63,63,63,14,45,45,5,0,192,45,14,54,30,63,28,36,4,0
  181. 1810  REM  POKE SHAPE TABLE
  182. 1820  FOR I = 2560 TO 2615: READ A: POKE I,A: NEXT : DATA  2,0,6,0,46,0,128,128,192,43,45,117,63,63,63,30,45,45,45,45,62,31,63,63,55,45,45,109,53,255,63,63,55
  183. 1830  DATA  45,45,45,45,30,63,63,63,14,45,45,5,0,192,45,14,54,30,63,28,36,4,0: POKE 232,0: POKE 233,10: GOSUB 1850: RETURN 
  184. 1840  REM  POKE SOUND ROUTINE
  185. 1850  POKE 772,173: POKE 773,48: POKE 774,192: POKE 775,136: POKE 776,208: POKE 777,4: POKE 778,198: POKE 779,6: POKE 780,240
  186. 1860  POKE 781,8: POKE 782,202: POKE 783,208: POKE 784,246: POKE 785,166: POKE 786,7: POKE 787,76: POKE 788,4: POKE 789,3: POKE 790,96: RETURN