home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib22a.dsk / OCTOBER.1984 / FOUR.SCORE.bas next >
BASIC Source File  |  2023-02-26  |  11KB  |  258 lines

  1. 10  REM **********************
  2. 20  REM *     FOUR.SCORE     *
  3. 30  REM * BY R. & L. NEDBAL  *
  4. 40  REM * COPYRIGHT (C) 1984 *
  5. 50  REM * BY MICROSPARC, INC *
  6. 60  REM * CONCORD, MA. 01742 *
  7. 70  REM **********************
  8. 80  REM  INITIALIZATION
  9. 90  GOTO 2240
  10. 100  REM : SUBROUTINE TO CHECK FOR OPENS & CLEARS IN A LINE
  11. 110 YP = 0:YC = 0
  12. 120  FOR Z = 0 TO 9  STEP 3
  13. 130 WP = LM%(LINE,Z):LP = LM%(LINE,Z +1):HP = LM%(LINE,Z +2)
  14. 140 FM = WP +(LP *4)
  15. 150  IF OPEN(FM) = HP  THEN YP = YP +1:W = WP:L = LP:H = HP: GOTO 170
  16. 160  IF BRD%(LP,WP,HP) = 0  THEN YC = YC +1
  17. 170  NEXT Z
  18. 180  RETURN 
  19. 190  REM : SUBROUTINE TO FIND NM,NP & NC IN A LINE
  20. 200 YP = 0:YC = 0
  21. 210  FOR LINE = 0 TO 75
  22. 220  IF LP%(LINE,P) = NM  THEN  GOTO 260
  23. 230  NEXT LINE
  24. 240 LINE = LINE -1
  25. 250  RETURN 
  26. 260  GOSUB 100
  27. 270  IF YP = NP  AND YC = (4 -NM) -YP  THEN  RETURN 
  28. 280 YP = 0:YC = 0: GOTO 230
  29. 290  REM : START OF COMPUTER'S RESPONSE
  30. 300 P = PL -1
  31. 310  IF DF% = 1  THEN  GOTO 450
  32. 320  IF DF% = 2  THEN  GOTO 410
  33. 330 NM = 3:NP = 1: GOSUB 190
  34. 340  IF YP = 1  THEN  GOTO 570
  35. 350  IF P = 0  THEN P = 1: GOTO 370
  36. 360 P = 0
  37. 370  GOSUB 190
  38. 380 P = PL -1: IF YP = 1  THEN  GOTO 570
  39. 390  IF DF% = 3  THEN  GOTO 450
  40. 400  IF DF% = 4  THEN  GOTO 430
  41. 410 NM = 2:NP = 2: GOSUB 190
  42. 420  IF YP = 2  THEN  GOTO 570
  43. 430 NM = 2:NP = 1: GOSUB 190
  44. 440  IF YP = 1  AND YC = 1  THEN  GOTO 570
  45. 450 RC = 0
  46. 460 RC = RC +1
  47. 470  IF RC = 15  THEN  GOTO 520
  48. 480 RW =  RND(1):RL =  RND(1)
  49. 490 W =  INT(RW *4):L =  INT(RL *4)
  50. 500  IF BRD%(L,W,3) = 0  THEN  GOTO 570
  51. 510  GOTO 460
  52. 520  FOR W = 0 TO 3
  53. 530  FOR L = 0 TO 3
  54. 540  IF BRD%(L,W,3) = 0  THEN  GOTO 570
  55. 550  NEXT L
  56. 560  NEXT W
  57. 570 X = (W *8 +1) -((L -3) *4):Y = L *10: GOTO 1250
  58. 580  GR : SPEED= 255:S1 = 0:S2 = 0
  59. 590 C = 1
  60. 600  FOR X = 5 TO 33  STEP 2
  61. 610  COLOR= C
  62. 620  VLIN 0,39 AT X: VLIN 0,39 AT X +1
  63. 630 C = C +1
  64. 640  NEXT X
  65. 650  HOME 
  66. 660  VTAB 21: PRINT "     1 2 3 4 5 6 7 8 9 101112131415": POKE 34,21
  67. 670  INPUT "COLOR OF POSTS? ";CP
  68. 680  IF CP <1  OR CP >15  THEN  GOTO 670
  69. 690  INPUT "COLOR FOR PLAYER #1? ";C1
  70. 700  IF C1 <1  OR C1 >15  THEN  GOTO 690
  71. 710  INPUT "COLOR FOR PLAYER #2? ";C2
  72. 720  IF C2 <1  OR C2 >15  THEN  GOTO 710
  73. 730  INPUT "NUMBER OF PLAYERS? ";PN
  74. 740  IF PN <0  OR PN >2 GOTO 730
  75. 750  IF PN = 2 GOTO 780
  76. 760  INPUT "SELECT DIFFICULTY 1-5: ";DF%
  77. 770  IF DF% <1  OR DF% >5  THEN  GOTO 760
  78. 780  POKE 34,0:S1 = 0:S2 = 0
  79. 790  FOR A = 0 TO 3
  80. 800  FOR B = 0 TO 3
  81. 810  FOR X = 0 TO 3
  82. 820 BRD%(A,B,X) = 0
  83. 830  NEXT X: NEXT B: NEXT A
  84. 840  FOR A = 0 TO 15
  85. 850 OPEN(A) = 0
  86. 860  NEXT A
  87. 870 PL = 1
  88. 880  GR : HOME : COLOR= CP
  89. 890  VLIN 2,9 AT 13: VLIN 2,9 AT 21: VLIN 2,9 AT 29: VLIN 2,9 AT 37: VLIN 12,19 AT 9: VLIN 12,19 AT 17: VLIN 12,19 AT 25: VLIN 12,19 AT 33
  90. 900  VLIN 22,29 AT 5: VLIN 22,29 AT 13: VLIN 22,29 AT 21: VLIN 22,29 AT 29: VLIN 32,39 AT 1: VLIN 32,39 AT 9: VLIN 32,39 AT 17: VLIN 32,39 AT 25
  91. 910  FOR A = 0 TO 75
  92. 920 LP%(A,0) = 0:LP%(A,1) = 0
  93. 930  NEXT A
  94. 940  IF PN = 0  THEN  HOME : GOTO 290
  95. 950  HOME : PRINT "I = UP, K = RIGHT, J = LEFT, M = DOWN
  96. 960  PRINT "X = PLACE MARKER ON POST"
  97. 970  VTAB 24: PRINT "PLAYER # 1"
  98. 980 X = 1:Y = 30:L = 3:W = 0
  99. 990  COLOR= 15: PLOT X,Y
  100. 1000  GET DIR$
  101. 1010  COLOR= 0: PLOT X,Y
  102. 1020  IF DIR$ = "X"  THEN  GOTO 1250
  103. 1030 Z =  PEEK( -16336):Z =  PEEK( -16336)
  104. 1040  IF DIR$ = "I"  THEN Y = Y -10:X = X +4:L = L -1
  105. 1050  IF DIR$ = "K"  THEN X = X +8:W = W +1
  106. 1060  IF DIR$ = "J"  THEN X = X -8:W = W -1
  107. 1070  IF DIR$ = "M"  THEN Y = Y +10:X = X -4:L = L +1
  108. 1080  IF X <1  AND Y = 30  THEN X = 25:L = 3:W = 3
  109. 1090  IF X <5  AND Y = 20  THEN X = 29:L = 2:W = 3
  110. 1100  IF X <9  AND Y = 10  THEN X = 33:L = 1:W = 3
  111. 1110  IF X <13  AND Y = 0  THEN X = 37:L = 0:W = 3
  112. 1120  IF X >25  AND Y = 30  THEN X = 1:L = 3:W = 0
  113. 1130  IF X >29  AND Y = 20  THEN X = 5:L = 2:W = 0
  114. 1140  IF X >33  AND Y = 10  THEN X = 9:L = 1:W = 0
  115. 1150  IF X >37  AND Y = 0  THEN X = 13:L = 0:W = 0
  116. 1160  IF Y >30  AND X =  -3  THEN X = 13:Y = 0:L = 0:W = 0
  117. 1170  IF Y >30  AND X = 5  THEN X = 21:Y = 0:L = 0:W = 1
  118. 1180  IF Y >30  AND X = 13  THEN X = 29:Y = 0:L = 0:W = 2
  119. 1190  IF Y >30  AND X = 21  THEN X = 37:Y = 0:L = 0:W = 3
  120. 1200  IF Y <0  AND X = 17  THEN X = 1:Y = 30:L = 3:W = 0
  121. 1210  IF Y <0  AND X = 25  THEN X = 9:Y = 30:L = 3:W = 1
  122. 1220  IF Y <0  AND X = 33  THEN X = 17:Y = 30:L = 3:W = 2
  123. 1230  IF Y <0  AND X = 41  THEN X = 25:Y = 30:L = 3:W = 3
  124. 1240  GOTO 990
  125. 1250  IF PL = 1  THEN  COLOR= C1:PC = C1
  126. 1260  IF PL = 2  THEN  COLOR= C2:PC = C2
  127. 1270  IF BRD%(L,W,3) < >0  THEN  PRINT "POST IS FILLED!": GOTO 990
  128. 1280 H = 0
  129. 1290  IF BRD%(L,W,H) = 0  THEN BRD%(L,W,H) = PL: HLIN X -1,X +1 AT Y +9: PLOT X,Y +8: GOTO 1360
  130. 1300 H = 1
  131. 1310  IF BRD%(L,W,H) = 0  THEN BRD%(L,W,H) = PL: HLIN X -1,X +1 AT Y +7: PLOT X,Y +6: GOTO 1360
  132. 1320 H = 2
  133. 1330  IF BRD%(L,W,H) = 0  THEN BRD%(L,W,H) = PL: HLIN X -1,X +1 AT Y +5: PLOT X,Y +4: GOTO 1360
  134. 1340 H = 3
  135. 1350  IF BRD%(L,W,H) = 0  THEN BRD%(L,W,H) = PL: HLIN X -1,X +1 AT Y +3: PLOT X,Y +2
  136. 1360  REM  CONVERT W,L,H TO LINE # AND UPDATE
  137. 1370 FM = W +(L *4)
  138. 1380 OPEN(FM) = H +1
  139. 1390  REM  WIDTH FIRST
  140. 1400 P = PL -1
  141. 1410 ZERO = L *10:LINE = ZERO +H:LP%(LINE,P) = LP%(LINE,P) +1
  142. 1420 LINE = (ZERO +4) +W:LP%(LINE,P) = LP%(LINE,P) +1
  143. 1430  IF W = H  THEN LINE = ZERO +9:LP%(LINE,P) = LP%(LINE,P) +1
  144. 1440  IF W =  ABS(H -3)  THEN LINE = ZERO +8:LP%(LINE,P) = LP%(LINE,P) +1
  145. 1450  REM  LENGTH NEXT
  146. 1460 ZERO = (W *6) +40:LINE = ZERO +H:LP%(LINE,P) = LP%(LINE,P) +1
  147. 1470  IF L = H  THEN LINE = ZERO +4:LP%(LINE,P) = LP%(LINE,P) +1
  148. 1480  IF L =  ABS(H -3)  THEN LINE = ZERO +5:LP%(LINE,P) = LP%(LINE,P) +1
  149. 1490  REM  HORIZONTAL DIAGONALS NEXT
  150. 1500  IF L = W  THEN LINE = 64 +H:LP%(LINE,P) = LP%(LINE,P) +1
  151. 1510  IF L =  ABS(W -3)  THEN LINE = 68 +H:LP%(LINE,P) = LP%(LINE,P) +1
  152. 1520  REM  OUTSIDE CORNER DIAGS NEXT
  153. 1530  IF L = W  AND L = H  THEN LP%(72,P) = LP%(72,P) +1
  154. 1540  IF L = W  AND L =  ABS(H -3)  THEN LP%(73,P) = LP%(73,P) +1
  155. 1550  IF L =  ABS(W -3)  AND L = H  THEN LP%(74,P) = LP%(74,P) +1
  156. 1560  IF L =  ABS(W -3)  AND L =  ABS(H -3)  THEN LP%(75,P) = LP%(75,P) +1
  157. 1570  REM  CHECK FOR GAME WON
  158. 1580 P = PL -1
  159. 1590  FOR WIN = 0 TO 75
  160. 1600  IF LP%(WIN,P) = 4  THEN  GOTO 1680
  161. 1610  NEXT WIN
  162. 1620  IF PL = 1  THEN PL = 2: HOME : VTAB 23: HTAB 24: PRINT "PLAYER #";PL: GOTO 1640
  163. 1630 PL = 1: HOME : VTAB 23: HTAB 6: PRINT "PLAYER #";PL
  164. 1640  IF PN = 0  THEN  PRINT "PLAYER #1 = ";S1;"     PLAYER #2 = ";S2: GOTO 290
  165. 1650  IF PN = 2  THEN  GOTO 990
  166. 1660  IF PN = 1  AND PL = 1  THEN  GOTO 990
  167. 1670  GOTO 290
  168. 1680  REM  SOMEONE HAS WON
  169. 1690  FLASH : HOME : VTAB 22: HTAB 12: PRINT "PLAYER #";PL;" WINS": NORMAL 
  170. 1700 NC = 0
  171. 1710  FOR Z1 = 0 TO 21
  172. 1720  COLOR= NC
  173. 1730  FOR Z = 0 TO 9  STEP 3
  174. 1740 WP = LM%(WIN,Z):LP = LM%(WIN,Z +1):HP = LM%(WIN,Z +2)
  175. 1750 XX = (WP *8) -((LP -3) *4):YY = (LP *10) -((HP -3) *2) +3
  176. 1760  HLIN XX,XX +2 AT YY: PLOT XX +1,YY -1
  177. 1770  NEXT Z
  178. 1780  IF NC = 0  THEN NC = PC: GOTO 1800
  179. 1790  IF NC = PC  THEN NC = 0
  180. 1800  NEXT Z1
  181. 1810  IF PL = 1  THEN S1 = S1 +1
  182. 1820  IF PL = 2  THEN S2 = S2 +1
  183. 1830  IF PN = 1  THEN  GOTO 1920
  184. 1840  IF PN = 0  THEN  GOTO 2550
  185. 1850  VTAB 23: PRINT "PLAYER #1 = ";S1;"     PLAYER #2 = ";S2
  186. 1860  VTAB 24: PRINT "ANY KEY FOR NEXT GAME,  S TO START OVER"
  187. 1870  PRINT "C  TO CHANGE PLAYER # AND DIFFICULTY"
  188. 1880  GET G$
  189. 1890  IF G$ = "S"  THEN  GOTO 580
  190. 1900  IF G$ = "C" GOTO 730
  191. 1910  GOTO 790
  192. 1920  VTAB 23: PRINT "YOUR SCORE= ";S1;"     MY SCORE= ";S2
  193. 1930  GOTO 1860
  194. 1940  DATA  0,0,0,1,0,0,2,0,0,3,0,0,0,0,1,1,0,1,2,0,1,3,0,1,0,0,2,1,0,2,2,0,2,3,0,2,0,0,3,1,0,3,2,0,3,3,0,3
  195. 1950  DATA  0,0,0,0,0,1,0,0,2,0,0,3,1,0,0,1,0,1,1,0,2,1,0,3,2,0,0,2,0,1,2,0,2,2,0,3,3,0,0,3,0,1,3,0,2,3,0,3
  196. 1960  DATA  0,0,3,1,0,2,2,0,1,3,0,0,0,0,0,1,0,1,2,0,2,3,0,3
  197. 1970  DATA  0,1,0,1,1,0,2,1,0,3,1,0,0,1,1,1,1,1,2,1,1,3,1,1,0,1,2,1,1,2,2,1,2,3,1,2,0,1,3,1,1,3,2,1,3,3,1,3
  198. 1980  DATA  0,1,0,0,1,1,0,1,2,0,1,3,1,1,0,1,1,1,1,1,2,1,1,3,2,1,0,2,1,1,2,1,2,2,1,3,3,1,0,3,1,1,3,1,2,3,1,3
  199. 1990  DATA  0,1,3,1,1,2,2,1,1,3,1,0,0,1,0,1,1,1,2,1,2,3,1,3
  200. 2000  DATA  0,2,0,1,2,0,2,2,0,3,2,0,0,2,1,1,2,1,2,2,1,3,2,1,0,2,2,1,2,2,2,2,2,3,2,2,0,2,3,1,2,3,2,2,3,3,2,3
  201. 2010  DATA  0,2,0,0,2,1,0,2,2,0,2,3,1,2,0,1,2,1,1,2,2,1,2,3,2,2,0,2,2,1,2,2,2,2,2,3,3,2,0,3,2,1,3,2,2,3,2,3
  202. 2020  DATA  0,2,3,1,2,2,2,2,1,3,2,0,0,2,0,1,2,1,2,2,2,3,2,3
  203. 2030  DATA  0,3,0,1,3,0,2,3,0,3,3,0,0,3,1,1,3,1,2,3,1,3,3,1,0,3,2,1,3,2,2,3,2,3,3,2,0,3,3,1,3,3,2,3,3,3,3,3
  204. 2040  DATA  0,3,0,0,3,1,0,3,2,0,3,3,1,3,0,1,3,1,1,3,2,1,3,3,2,3,0,2,3,1,2,3,2,2,3,3,3,3,0,3,3,1,3,3,2,3,3,3
  205. 2050  DATA  0,3,3,1,3,2,2,3,1,3,3,0,0,3,0,1,3,1,2,3,2,3,3,3
  206. 2060  DATA  0,0,0,0,1,0,0,2,0,0,3,0,0,0,1,0,1,1,0,2,1,0,3,1,0,0,2,0,1,2,0,2,2,0,3,2,0,0,3,0,1,3,0,2,3,0,3,3
  207. 2070  DATA  0,0,0,0,1,1,0,2,2,0,3,3,0,0,3,0,1,2,0,2,1,0,3,0
  208. 2080  DATA  1,0,0,1,1,0,1,2,0,1,3,0,1,0,1,1,1,1,1,2,1,1,3,1,1,0,2,1,1,2,1,2,2,1,3,2,1,0,3,1,1,3,1,2,3,1,3,3
  209. 2090  DATA  1,0,0,1,1,1,1,2,2,1,3,3,1,0,3,1,1,2,1,2,1,1,3,0
  210. 2100  DATA  2,0,0,2,1,0,2,2,0,2,3,0,2,0,1,2,1,1,2,2,1,2,3,1,2,0,2,2,1,2,2,2,2,2,3,2,2,0,3,2,1,3,2,2,3,2,3,3
  211. 2110  DATA  2,0,0,2,1,1,2,2,2,2,3,3,2,0,3,2,1,2,2,2,1,2,3,0
  212. 2120  DATA  3,0,0,3,1,0,3,2,0,3,3,0,3,0,1,3,1,1,3,2,1,3,3,1,3,0,2,3,1,2,3,2,2,3,3,2,3,0,3,3,1,3,3,2,3,3,3,3
  213. 2130  DATA  3,0,0,3,1,1,3,2,2,3,3,3,3,0,3,3,1,2,3,2,1,3,3,0
  214. 2140  DATA  3,3,0,2,2,0,1,1,0,0,0,0,3,3,1,2,2,1,1,1,1,0,0,1,3,3,2,2,2,2,1,1,2,0,0,2,3,3,3,2,2,3,1,1,3,0,0,3
  215. 2150  DATA  0,3,0,1,2,0,2,1,0,3,0,0,0,3,1,1,2,1,2,1,1,3,0,1,0,3,2,1,2,2,2,1,2,3,0,2,0,3,3,1,2,3,2,1,3,3,0,3
  216. 2160  DATA  3,3,3,2,2,2,1,1,1,0,0,0,3,3,0,2,2,1,1,1,2,0,0,3,3,0,0,2,1,1,1,2,2,0,3,3,3,0,3,2,1,2,1,2,1,0,3,0
  217. 2170  FOR Z = 0 TO 75
  218. 2180  FOR Z1 = 0 TO 11
  219. 2190  READ A%
  220. 2200 LM%(Z,Z1) = A%
  221. 2210  NEXT Z1
  222. 2220  NEXT Z
  223. 2230  RETURN 
  224. 2240 S1 = 0:S2 = 0:PL = 1: SPEED= 255
  225. 2250  DIM BRD%(3,3,3),LM%(75,11),LP%(75,1),OPEN(15)
  226. 2260  TEXT : HOME : VTAB 5: HTAB 13: PRINT "3-D FOUR SCORE": VTAB 12: HTAB 14: PRINT "PLEASE WAIT": VTAB 22: PRINT "* COPYRIGHT (C) 1984 MICROSPARC INC. *"
  227. 2270  GOSUB 2170
  228. 2280  REM  ABOVE SPEED SHOULD BE 100
  229. 2290  TEXT : HOME 
  230. 2300  VTAB 10: HTAB 13: PRINT "3-D FOUR SCORE"
  231. 2310  VTAB 12: HTAB 19: PRINT "BY"
  232. 2320  VTAB 14: HTAB 9: PRINT "LEAH AND RICHARD NEDBAL"
  233. 2330  VTAB 22: HTAB 8: PRINT "PUSH ANY KEY TO PROCEED": HTAB 20: GET G$
  234. 2340  HOME 
  235. 2350  PRINT "3-D FOUR SCORE IS LIKE TIC-TAC-TOE IN"
  236. 2360  PRINT : PRINT "3-DIMENSIONS. TRY TO GET 4 IN A ROW IN"
  237. 2370  PRINT : PRINT "ANY DIRECTION (HORIZONTAL, VERTICAL, OR"
  238. 2380  PRINT : PRINT "DIAGONAL) ON ANY LAYER OR BETWEEN": PRINT 
  239. 2390  PRINT "LAYERS.  THE FIRST ONE TO DO THIS WINS!"
  240. 2400  PRINT : PRINT : PRINT "I,J,K,&M ALLOWS SELECTION OF THE POST"
  241. 2410  PRINT : PRINT "WHERE YOU CAN PLACE A MARKER. THE X KEY"
  242. 2420  PRINT : PRINT "PLACES YOUR MARKER ON THE POST."
  243. 2430  VTAB 19: HTAB 16: PRINT "HAVE FUN"
  244. 2440  VTAB 22: HTAB 8: PRINT "PUSH ANY KEY TO PROCEED"
  245. 2450  HTAB 20: GET G$
  246. 2460  HOME : PRINT "IF THE NUMBER OF PLAYERS IS 0, THE"
  247. 2470  PRINT : PRINT "COMPUTER WILL PLAY AGAINST ITSELF."
  248. 2480  PRINT : PRINT "IF THE NUMBER OF PLAYERS IS 1, YOU PLAY"
  249. 2490  PRINT : PRINT "AGAINST THE COMPUTER."
  250. 2500  PRINT : PRINT "IF THE NUMBER OF PLAYERS IS 2, YOU CAN"
  251. 2510  PRINT : PRINT "PLAY AGAINST A FRIEND."
  252. 2520  VTAB 22: HTAB 8: PRINT "PUSH ANY KEY TO PROCEED"
  253. 2530  HTAB 20: GET G$
  254. 2540  GOTO 580
  255. 2550  VTAB 24: PRINT "ANY KEY TO CONTINUE, S TO START OVER"
  256. 2560  GET G$
  257. 2570  IF G$ = "S" GOTO 580
  258. 2580  GOTO 790