home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG054.ARK / QUBIC.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  6KB  |  253 lines

  1. 1 !     *  QUBIC-  *
  2. 5 PRINT "DO YOU WANT INSTRUCTIONS";
  3. 6 INPUT C$
  4. 7 IF C$="NO" THEN 20
  5. 8 IF C$= "YES" THEN 13
  6. 9 PRINT "INCORECT ANSWER.  PLEASE TYPE 'YES' OR 'NO'.";
  7. 10 GOTO 6
  8. 13 PRINT "THE GAME IS TIC-TAC-TOE IN A 4X4X4 CUBE."
  9. 14 PRINT "EACH MOVE IS INDICATED BY A 3 DIGIT NUMBER, WITH EACH"
  10. 15 PRINT "DIGIT BETWEEN 1 AND 4 INCLUSIVE. THE DIGITS INDICATE THE"
  11. 16 PRINT "LEVEL, COLUMN, AND ROW, RESPECTIVELY, OF THE OCCUPIED PLACE."
  12. 17 PRINT "IF YOU WANT A DISPLAY OF THE BOARD THEN ENTER ANY NUMBER"
  13. 18 PRINT "GREATER THAN 444 AS YOUR MOVE. THE '+' IS YOU AND THE '*' IS ME."
  14. 19 PRINT
  15. 20 DIM X(64),L(76),M(76,4),Y(16)
  16. 21 FOR I=1 TO 16
  17. 22 READ Y(I)
  18. 23 NEXT I
  19. 24 FOR I=1 TO 76
  20. 25 FOR J=1 TO 4
  21. 26 READ M(I,J)
  22. 27 NEXT J
  23. 28 NEXT I
  24. 35 FOR I=1 TO 64
  25. 40 X(I)=0
  26. 50 NEXT I
  27. 54 Z=1
  28. 55 PRINT "DO YOU WANT TO MOVE FIRST";
  29. 60 INPUT S$
  30. 66 IF S$="NO" THEN PRINT: GOTO 110
  31. 67 IF S$="YES" THEN 70
  32. 68 PRINT "INCORECT ANSWER.  PLEASE TYPE 'YES' OR 'NO'.";
  33. 69 GOTO 60
  34. 70 PRINT: IF S$="YES" THEN PRINT
  35. 72 PRINT "YOUR MOVE";
  36. 80 INPUT J1
  37. 85 GOSUB 1800
  38. 88 IF J1>444 THEN GOTO 1870
  39. 90 K1=INT(J1/100)
  40. 95 J2=(J1-K1*100)
  41. 96 K2=INT(J2/10)
  42. 97 K3=J1-K1*100-K2*10
  43. 98 M=16*K1+4*K2+K3-20
  44. 99 IF X(M)=0 THEN 109
  45. 100 PRINT "THAT SQUARE IS ALREADY TAKEN, TRY AGAIN";
  46. 101 GOTO 80
  47. 109 X(M)=1: IF S$="NO" THEN PRINT
  48. 110 GOSUB 1050
  49. 180 FOR J=1 TO 3
  50. 190 FOR I=1 TO 76
  51. 200 IF J=1 THEN 210
  52. 201 IF J=2 THEN 220
  53. 203 IF J=3 THEN 235
  54. 205 NEXT I
  55. 206 NEXT J
  56. 207 GOTO 400
  57. 210 IF L(I)<>4 THEN 205
  58. 211 PRINT "CONGRATULATIONS, YOU WIN AS FOLLOWS";
  59. 212 FOR J=1 TO 4
  60. 213 M=M(I,J)
  61. 214 GOSUB 1000
  62. 216 NEXT J
  63. 217 GOTO 500
  64. 220 IF L(I)<>15 THEN 205
  65. 221 FOR J=1 TO 4
  66. 222 M=M(I,J)
  67. 223 IF X(M)<>0 THEN 227
  68. 224 X(M)=5
  69. 225 PRINT "I MOVE TO";
  70. 226 GOSUB 1000
  71. 227 NEXT J
  72. 228 PRINT ", AND WIN AS FOLLOWS"
  73. 229 FOR J=1 TO 4
  74. 230 M=M(I,J)
  75. 231 GOSUB 1000
  76. 233 NEXT J
  77. 234 GOTO 500
  78. 235 IF L(I)<>3 THEN 205
  79. 236 PRINT "NICE TRY, I MOVE TO";
  80. 237 FOR J=1 TO 4
  81. 238 M=M(I,J)
  82. 239 IF X(M)<>0 THEN 245
  83. 240 X(M)=5
  84. 241 GOSUB 1000
  85. 243 GOTO 70
  86. 245 NEXT J
  87. 248 GOTO 400
  88. 250 FOR I=1 TO 76
  89. 251 L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4))
  90. 252 L=L(I)
  91. 255 IF L<2 THEN 290
  92. 260 IF L>=3 THEN 290
  93. 265 IF L>2 THEN 1600
  94. 270 FOR J=1 TO 4
  95. 275 IF X(M(I,J))<>0 THEN 285
  96. 280 X(M(I,J))=1/8
  97. 285 NEXT J
  98. 290 NEXT I
  99. 295 GOSUB 1050
  100. 300 FOR I=1 TO 76
  101. 305 IF L(I)=1/2 THEN 1700
  102. 310 IF L(I)=1+3/8 THEN 1700
  103. 315 NEXT I
  104. 320 GOTO 1300
  105. 360 Z=1
  106. 362 IF X(Y(Z))=0 THEN 380
  107. 365 Z=Z+1
  108. 368 IF Z<>17 THEN 362
  109. 375 GOTO 1200
  110. 380 M=Y(Z)
  111. 381 X(M)=5
  112. 385 PRINT "I MOVE TO";
  113. 389 GOSUB 1000
  114. 390 GOTO 70
  115. 400 X=X
  116. 410 FOR I=1 TO 76
  117. 412 L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4))
  118. 415 L=L(I)
  119. 420 IF L<10 THEN 455
  120. 425 IF L>=11 THEN 455
  121. 430 IF L>10 THEN 1600
  122. 435 FOR J=1 TO 4
  123. 440 IF X(M(I,J))<>0 THEN 450
  124. 445 X(M(I,J))=1/8
  125. 450 NEXT J
  126. 455 NEXT I
  127. 470 GOSUB 1050
  128. 475 FOR I=1 TO 76
  129. 480 IF L(I)=.5 THEN 1700
  130. 485 IF L(I)=5+3/8 THEN 1700
  131. 490 NEXT I
  132. 492 GOSUB 1800
  133. 493 GOTO 250
  134. 500 PRINT " "
  135. 505 PRINT "DO YOU WANT TO TRY ANOTHER GAME";
  136. 510 INPUT X$
  137. 515 IF X$="YES" THEN 35
  138. 516 IF X$="NO" THEN 520
  139. 517 PRINT "INCORRECT ANSWER,  PLEASE TYPE 'YES' OR 'NO'.";
  140. 518 GOTO 510
  141. 520 STOP
  142. 1000 K1=INT((M-1)/16)+1
  143. 1010 J2=M-16*(K1-1)
  144. 1030 K2=INT((J2-1)/4)+1
  145. 1035 K3=M-(K1-1)*16-(K2-1)*4
  146. 1040 M=K1*100+K2*10+K3
  147. 1042 PRINT M;
  148. 1045 RETURN
  149. 1050 FOR S=1 TO 76
  150. 1060 J1=M(S,1)
  151. 1070 J2=M(S,2)
  152. 1080 J3=M(S,3)
  153. 1090 J4=M(S,4)
  154. 1100 L(S)=X(J1)+X(J2)+X(J3)+X(J4)
  155. 1110 NEXT S
  156. 1120 RETURN
  157. 1200 FOR I=1 TO 64
  158. 1210 IF X(I)<>0 THEN 1250
  159. 1220 X(I)=5
  160. 1225 M=I
  161. 1226 PRINT "I LIKE";
  162. 1227 GOSUB 1000
  163. 1228 PRINT " "
  164. 1230 GOTO 70
  165. 1250 NEXT I
  166. 1252 PRINT "THE GAME IS A DRAW"
  167. 1255 GOTO 500
  168. 1300 FOR K=1 TO 18
  169. 1305 P=0
  170. 1310 FOR I=4*K-3 TO 4*K
  171. 1315 FOR J=1 TO 4
  172. 1320 P=P+X(M(I,J))
  173. 1325 NEXT J
  174. 1330 NEXT I
  175. 1345 IF P<4 THEN 1390
  176. 1350 IF P<5 THEN 1400
  177. 1355 IF P<9 THEN 1390
  178. 1360 IF P<10 THEN 1400
  179. 1390 NEXT K
  180. 1395 GOSUB 1800
  181. 1396 GOTO 360
  182. 1400 S=1/8
  183. 1405 FOR I=4*K-3 TO 4*K
  184. 1410 GOTO 1703
  185. 1415 NEXT I
  186. 1420 S=0
  187. 1425 GOTO 1405
  188. 1500 DATA 1,49,52,4,13,61,64,16,22,39,23,38,26,42,27,43
  189. 1510 DATA 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
  190. 1520 DATA 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38
  191. 1521 DATA 39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56
  192. 1522 DATA 57,58,59,60,61,62,63,64
  193. 1523 DATA 1,17,33,49,5,21,37,53,9,25,41,57,13,29,45,61
  194. 1524 DATA 2,18,34,50,6,22,38,54,10,26,42,58,14,30,46,62
  195. 1525 DATA 3,19,35,51,7,23,39,55,11,27,43,59,15,31,47,63
  196. 1527 DATA 4,20,36,52,8,24,40,56,12,28,44,60,16,32,48,64
  197. 1529 DATA  1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61
  198. 1532 DATA  2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62
  199. 1534 DATA 3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63
  200. 1536 DATA 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64
  201. 1538 DATA 1,6,11,16,17,22,27,32,33,38,43,48,49,54,59,64
  202. 1540 DATA 13,10,7,4,29,26,23,20,45,42,39,36,61,58,55,52
  203. 1542 DATA 1,21,41,61,2,22,42,62,3,23,43,63,4,24,44,64
  204. 1544 DATA 49,37,25,13,50,38,26,14,51,39,27,15,52,40,28,16
  205. 1546 DATA 1,18,35,52,5,22,39,56,9,26,43,60,13,30,47,64
  206. 1548 DATA 49,34,19,4,53,38,23,8,57,42,27,12,61,46,31,16
  207. 1550 DATA 1,22,43,64,16,27,38,49,4,23,42,61,13,26,39,52
  208. 1600 FOR J=1 TO 4
  209. 1605 IF X(M(I,J))<>1/8 THEN 1650
  210. 1610 X(M(I,J))=5
  211. 1615 IF L(I)<5 THEN 1625
  212. 1620 PRINT "LET'S SEE YOU GET OUT OF THIS:  I MOVE TO ";
  213. 1622 GOTO 1626
  214. 1625 PRINT "YOU FOX,  JUST IN THE NICK OF TIME, I MOVE TO";
  215. 1626 M=M(I,J)
  216. 1630 GOSUB 1000
  217. 1640 GOTO 70
  218. 1650 NEXT J
  219. 1660 PRINT "I CONCEDE THIS GAME."
  220. 1665 GOTO 500
  221. 1700 S=1/8
  222. 1703 IF I-INT(I/4)*4>1 THEN 1715
  223. 1705 A=1
  224. 1710 GOTO 1720
  225. 1715 A=2
  226. 1720 FOR J=A TO 5-A STEP 5-2*A
  227. 1725 IF X(M(I,J))=S THEN 1750
  228. 1730 NEXT J
  229. 1735 GOTO 1415
  230. 1750 X(M(I,J))=5
  231. 1755 M=M(I,J)
  232. 1760 PRINT "I TAKE";
  233. 1770 GOSUB 1000
  234. 1780 GOTO 70
  235. 1800 FOR I=1 TO 64
  236. 1810 IF X(I)<>1/8 THEN 1850
  237. 1815 X(I)=0
  238. 1850 NEXT I
  239. 1860 RETURN
  240. 1870 PRINT " LEVEL 1      LEVEL 2      LEVEL 3      LEVEL 4"
  241. 1875 FOR R2=1 TO 4
  242. 1880 FOR L2=1 TO 4
  243. 1890 FOR C2=1 TO 4
  244. 1900 T5=16*(L2-1)+4*(C2-1)+R2
  245. 1905 IF X(T5)=5 THEN PRINT " *"; ELSE IF X(T5)=1 THEN PRINT " +"; ELSE ? " .";
  246. 1910 NEXT C2
  247. 1920 PRINT "     ";
  248. 1930 NEXT L2
  249. 1940 PRINT
  250. 1950 NEXT R2
  251. 1960 GOTO 72
  252. 2000 END
  253.