home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #3.1 / RBBSIABOX31.cdr / scrg / rubic.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-04-24  |  7.2 KB  |  283 lines

  1. 1  CLS
  2. 10  PRINT "INSTRUCTIONS"
  3. 20  PRINT "WHEN YOU ARE ASKED FOR THE NUMBER OF MIXES, ENTER THE NUMBER OF"
  4. 30  PRINT "RANDOM FACE ROTATIONS YOU DESIRE" : PRINT
  5. 40  PRINT " WHEN YOU ARE ASKED FOR YOUR MOVE, ENTER THE DESIGNATION OF THE "
  6. 50  PRINT " FACE:  F=FRONT, B=BACK, L=LEFT, R=RIGHT,T=TOP, B=BOTTOM
  7. 60  PRINT" AND THE AMOUNT OF ROTATION, += CLOCKWIZE 1, -=COUNTERCLOCKWIZE 1"
  8. 70  PRINT "              2= 180 DEGREES"
  9. 80  PRINT " SEE THE ARTICLE IN KILOBAUD JANUARY 1982 PAGE 28"
  10. 90  PRINT " THIS VERSION WAS EXTENSIVELY CONVERTED TO RUN ON THE ibm"
  11. 100  PRINT "I CAN'T FIGURE WHY THEY USED SUCH A LARGE ARRAY TO STORE THE CUBE"
  12. 101  PRINT " LINE 730 PRINTS THE RANDOM MIX MOVES SO THAT YOU CAN "
  13. 102  PRINT " CHEAT AND SOLVE THE CUBE.  COMMENT THIS LINE OUT TO BE HONEST"
  14. 110  PRINT "PRESS ANY KEY TO CONTINUE"
  15. 120  B$=INKEY$:IF B$="" THEN GOTO 120
  16. 130  CLS
  17. 140  SCREEN 2
  18. 150  DRAW "BL120M-120,-20D60M+120,20U60M+120,-20D60M-120,20U20M-120,-20U20"
  19. 160  DRAW "M+120,20M+120,-20D20M-120,20D20M-40,-7U60M+120,-20M+40,+7M-120,-20"
  20. 170  DRAW "M-120,20D60M+40,+7U60M+120,-20M-40,-7M-40,+7M+120,+20D60M-40,+7U60"
  21. 180  DRAW "M-120,-20"
  22. 190  DRAW "BR360BD45"
  23. 200  DRAW "A2M-120,-20D60M+120,20U60M+120,-20D60M-120,20U20M-120,-20U20"
  24. 210  DRAW "M+120,20M+120,-20D20M-120,20D20M-40,-7U60M+120,-20M+40,+7M-120,-20"
  25. 220  DRAW "M-120,20D60M+40,+7U60M+120,-20M-40,-7M-40,+7M+120,+20D60M-40,+7U60"
  26. 230  DRAW "M-120,-20A0"
  27. 240  OP$="D6R5U6L5":YP$="F3E3G3D3":RP$="D6U6R5D3L5R3F4":WP$="D6E3F3U6"
  28. 250  BP$="D6R5U3L5R5U3L5":GP$="R5D1U1L5D6R5U2L1"
  29. 260  DIM OA%(5),YA%(5),RA%(5),WA%(5),BA%(5),GA%(5)
  30. 270  DRAW "BM1,1;XOP$;":GET(1,1)-(7,8),OA% :PUT(1,1),OA%
  31. 280  DRAW "BM1,1;XYP$;":GET(1,1)-(7,8),YA% :PUT(1,1),YA%
  32. 290  DRAW "BM1,1;XRP$;":GET(1,1)-(7,8),RA% :PUT(1,1),RA%
  33. 300  DRAW "BM1,1;XWP$;":GET(1,1)-(7,8),WA% :PUT(1,1),WA%
  34. 310  DRAW "BM1,1;XBP$;":GET(1,1)-(7,8),BA% :PUT(1,1),BA%
  35. 320  DRAW "BM1,1;XGP$;":GET(1,1)-(7,8),GA% :PUT(1,1),GA%
  36. 330  DATA 478,149,518,143,557,136,437,142,478,136,518,129,396,136,437,129,478
  37. 340  DATA 123
  38. 350  DATA 177,144,177,124,177,104,137,137,137,117,137,97,97,131,97,111,97,91
  39. 360  DATA 217,144,217,124,217,104,257,137,257,117,257,97,297,131,297,111,297,91
  40. 370  DATA 197,90,157,84,117,77,237,84,197,77,157,71,277,77,237,71,197,64
  41. 380  DATA 376,123,376,103,376,83,416,117,416,97,416,77,456,110,456,90,456,70
  42. 390  DATA 577,123,577,103,577,83,537,117,537,97,537,77,496,110,496,90,496,70
  43. 400  DIM R$(5,5,5),R1$(5,5,5),A$(5,5),B$(5,5),C$(5,5),D$(5,5)
  44. 410  LLL=0
  45. 420  FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5
  46. 430  R$(I,J,K)=""
  47. 440  NEXT K: NEXT J: NEXT I
  48. 450  FOR I=2 TO 4:FOR J=2 TO 4
  49. 460  R$(1,I,J)="R":R$(I,1,J)="W":R$(I,J,1)="G"
  50. 470  R$(5,I,J)="O":R$(I,5,J)="B":R$(I,J,5)="Y"
  51. 480  NEXT J: NEXT I
  52. 490  REM
  53. 500  REM MIX RUBIK'S CUB
  54. 510  REM
  55. 520  INPUT "INPUT NUMBER OF MIXES";N
  56. 530  Z$=""
  57. 540  FOR I=1 TO N
  58. 550  X%= INT(6*RND(1)):Y%= INT(3*RND(1))
  59. 560  IF X%<>0 THEN 580
  60. 570  X$="R":GOTO 670
  61. 580  IF X%<>1 THEN 600
  62. 590  X$="F": GOTO 670
  63. 600  IF X%<>2 THEN 620
  64. 610  X$="L": GOTO 670
  65. 620  IF X%<>3 THEN 640
  66. 630  X$="U": GOTO 670
  67. 640  IF X%<>4 THEN 660
  68. 650  X$="B": GOTO 670
  69. 660  X$="D"
  70. 670  IF Y%<>0 THEN 690
  71. 680  Y$="+": GOTO 720
  72. 690  IF Y%<>1 THEN 710
  73. 700  Y$="-": GOTO 720
  74. 710  Y$="2"
  75. 720  Z$=Z$+X$+Y$
  76. 730  PRINT Z$
  77. 740  NEXT I
  78. 750  GOSUB 920
  79. 760  GOSUB 2470
  80. 770  REM
  81. 780  REM CHANGE RUBIK'S CUBE
  82. 790  REM
  83. 800  LOCATE 1,1
  84. 810  PRINT "                         "
  85. 820  PRINT "                         "
  86. 830  LLL=1
  87. 840  LOCATE 1,1
  88. 850  INPUT "INPUT MOVE";Z$
  89. 860  GOSUB 920
  90. 870  GOSUB 2470
  91. 880  GOTO 800
  92. 890  REM
  93. 900  REM PERFORM MOVES
  94. 910  REM
  95. 920  'FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5
  96. 930  'R1$(I,J,K)=R$(I,J,K)
  97. 940  'NEXT K: NEXT J: NEXT I
  98. 950  IF Z$="" THEN RETURN
  99. 960  X$=MID$(Z$,1,1)
  100. 970  IF X$="S" THEN 2780
  101. 980  IF X$="M" THEN 1670
  102. 990  REM
  103. 1000  REM MOVE FACES
  104. 1010  REM
  105. 1020  Y$=MID$(Z$,2,1)
  106. 1030  IF X$<>"R" THEN 1130
  107. 1040  FOR I=1 TO 5:FOR J=1 TO 5
  108. 1050  A$(I,J)=R$(I,1,J):B$(I,J)=R$(I,2,J)
  109. 1060  NEXT J: NEXT I
  110. 1070  GOSUB 2140
  111. 1080  IF E=1 THEN 2090
  112. 1090  FOR I=1 TO 5: FOR J=1 TO 5
  113. 1100  R$(I,1,J)=A$(I,J):R$(I,2,J)=B$(I,J)
  114. 1110  NEXT J: NEXT I
  115. 1120  GOTO 1620
  116. 1130  IF X$<>"F" THEN 1230
  117. 1140  FOR I=1 TO 5: FOR J=1 TO 5
  118. 1150  A$(I,J)=R$(1,I,J):B$(I,J)=R$(2,I,J)
  119. 1160  NEXT J: NEXT I
  120. 1170  GOSUB 2220
  121. 1180  IF E=1 THEN 2090
  122. 1190  FOR I=1 TO 5: FOR J=1 TO 5
  123. 1200  R$(1,I,J)=A$(I,J): R$(2,I,J)=B$(I,J)
  124. 1210  NEXT J: NEXT I
  125. 1220  GOTO 1620
  126. 1230  IF X$<>"L" THEN 1330
  127. 1240  FOR I=1 TO 5:FOR J=1 TO 5
  128. 1250  A$(I,J)=R$(I,5,J):B$(I,J)=R$(I,4,J)
  129. 1260  NEXT J: NEXT I
  130. 1270  GOSUB 2220
  131. 1280  IF E=1 THEN 2090
  132. 1290  FOR I=1 TO 5: FOR J=1 TO 5
  133. 1300  R$(I,5,J)=A$(I,J): R$(I,4,J)=B$(I,J)
  134. 1310  NEXT J: NEXT I
  135. 1320  GOTO 1620
  136. 1330  IF X$<>"B" THEN 1430
  137. 1340  FOR I=1 TO 5: FOR J=1 TO 5
  138. 1350  A$(I,J)=R$(5,I,J): B$(I,J)=R$(4,I,J)
  139. 1360  NEXT J: NEXT I
  140. 1370  GOSUB 2140
  141. 1380  IF E=1 THEN 2090
  142. 1390  FOR I=1 TO 5: FOR J=1 TO 5
  143. 1400  R$(5,I,J)=A$(I,J): R$(4,I,J)=B$(I,J)
  144. 1410  NEXT J: NEXT I
  145. 1420  GOTO 1620
  146. 1430  IF X$<>"U" THEN 1530
  147. 1440  FOR I=1 TO 5: FOR J=1 TO 5
  148. 1450  A$(I,J)=R$(I,J,5): B$(I,J)=R$(I,J,4)
  149. 1460  NEXT J: NEXT I
  150. 1470  GOSUB 2140
  151. 1480  IF E=1 THEN 2090
  152. 1490  FOR I=1 TO 5: FOR J=1 TO 5
  153. 1500  R$(I,J,5)=A$(I,J): R$(I,J,4)=B$(I,J)
  154. 1510  NEXT J: NEXT I
  155. 1520  GOTO 1620
  156. 1530  IF X$<>"D" THEN 2090
  157. 1540  FOR I=1 TO 5: FOR J=1 TO 5
  158. 1550  A$(I,J)=R$(I,J,1):B$(I,J)=R$(I,J,2)
  159. 1560  NEXT J: NEXT I
  160. 1570  GOSUB 2220
  161. 1580  IF E=1 THEN 2090
  162. 1590  FOR I=1 TO 5: FOR J=1 TO 5
  163. 1600  R$(I,J,1)=A$(I,J):R$(I,J,2)=B$(I,J)
  164. 1610  NEXT J: NEXT I
  165. 1620  Z$=MID$(Z$,3)
  166. 1630  GOTO 950
  167. 1640  REM
  168. 1650  REM CHANGE VIEWING CORNERS
  169. 1660  REM
  170. 1670  X$=MID$(Z$,2,1):Y$=MID$(Z$,3,1)
  171. 1680  S$=MID$(Z$,4,1)
  172. 1690  IF S$<>"1" AND S$<>"2" AND S$<>"3" THEN 2090
  173. 1700  N=VAL(S$)
  174. 1710  IF X$<>"F" THEN 1960
  175. 1720  IF Y$<>"R" THEN 1840
  176. 1730  Z$=MID$(Z$,5)
  177. 1740  FOR K=1 TO N
  178. 1750  Z$="U-D+"+"Z$
  179. 1760  FOR I=1 TO 5: FOR J=1 TO 5
  180. 1770  A$(I,J)=R$(I,J,3)
  181. 1780  NEXT J: NEXT I
  182. 1790  FOR I=1 TO 5: FOR J=1 TO 5
  183. 1800  R$(6-J,I,3)=A$(I,J)
  184. 1810  NEXT J: NEXT I
  185. 1820  NEXT K
  186. 1830  GOTO 950
  187. 1840  IF Y$<>"U" THEN 2090
  188. 1850  Z$=MID$(Z$,5)
  189. 1860  FOR K=1 TO N
  190. 1870  Z$="R+L-"+Z$
  191. 1880  FOR I=1 TO 5: FOR J=1 TO 5
  192. 1890  A$(I,J)=R$(I,3,J)
  193. 1900  NEXT J: NEXT I
  194. 1910  FOR I=1 TO 5: FOR J=1 TO 5
  195. 1920  R$(J,3,6-I)=A$(I,J)
  196. 1930  NEXT J: NEXT I
  197. 1940  NEXT K
  198. 1950  GOTO 950
  199. 1960  IF X$<>"U" THEN 2090
  200. 1970  IF Y$<>"R" THEN 2090
  201. 1980  Z$=MID$(Z$,5)
  202. 1990  FOR K=1 TO N
  203. 2000  Z$="F+B-"+Z$
  204. 2010  FOR I=1 TO 5: FOR J=1 TO 5
  205. 2020  A$(I,J)=R$(3,I,J)
  206. 2030  NEXT J: NEXT I
  207. 2040  FOR I=1 TO 5: FOR J=1 TO 5
  208. 2050  R$(3,6-J,I)=A$(I,J)
  209. 2060  NEXT J: NEXT I
  210. 2070  NEXT K
  211. 2080  GOTO 950
  212. 2090  PRINT "INVALID MOVE, TRY AGAIN. "
  213. 2100  'FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5
  214. 2110  'R$(I,J,K)=R1$(I,J,K)
  215. 2120  'NEXT K: NEXT J: NEXT I
  216. 2130  RETURN
  217. 2140  E=0
  218. 2150  IF Y$<>"+" THEN 2170
  219. 2160  GOSUB 2370: RETURN
  220. 2170  IF Y$<>"-" THEN 2190
  221. 2180  GOSUB 2300: RETURN
  222. 2190  IF Y$<>"2" THEN 2210
  223. 2200  GOSUB 2300: GOSUB 2300: RETURN
  224. 2210  E=1: RETURN
  225. 2220  E=0
  226. 2230  IF Y$<>"+" THEN 2250
  227. 2240  GOSUB 2300: RETURN
  228. 2250  IF Y$<>"-" THEN 2270
  229. 2260  GOSUB 2370: RETURN
  230. 2270  IF Y$<>"2" THEN 2290
  231. 2280  GOSUB 2300: GOSUB 2300: RETURN
  232. 2290  E=1: RETURN
  233. 2300  FOR I=1 TO 5: FOR J=1 TO 5
  234. 2310  C$(I,J)=A$(I,J): D$(I,J)=B$(I,J)
  235. 2320  NEXT J: NEXT I
  236. 2330  FOR I=1 TO 5: FOR J=1 TO 5
  237. 2340  A$(6-J,I)=C$(I,J):B$(6-J,I)=D$(I,J)
  238. 2350  NEXT J: NEXT I
  239. 2360  RETURN
  240. 2370  FOR I=1 TO 5: FOR J=1 TO 5
  241. 2380  C$(I,J)=A$(I,J): D$(I,J)=B$(I,J)
  242. 2390  NEXT J: NEXT I
  243. 2400  FOR I=1 TO 5: FOR J=1 TO 5
  244. 2410  A$(J,6-I)=C$(I,J): B$(J,6-I)=D$(I,J)
  245. 2420  NEXT J: NEXT I
  246. 2430  RETURN
  247. 2440  REM
  248. 2450  REM PRINT RUBIK'S CUBE
  249. 2460  REM
  250. 2470  RESTORE 330
  251. 2480  FOR K=1 TO 5 STEP 4
  252. 2490  FOR I=2 TO 4: FOR J=2 TO 4
  253. 2500  READ POSA%,POSB%
  254. 2510  IF R$(I,J,K)="R" THEN PUT (POSA%,POSB%),RA% ,PSET
  255. 2520  IF R$(I,J,K)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET
  256. 2530  IF R$(I,J,K)="G" THEN PUT (POSA%,POSB%),GA% ,PSET
  257. 2540  IF R$(I,J,K)="B" THEN PUT (POSA%,POSB%),BA% ,PSET
  258. 2550  IF R$(I,J,K)="W" THEN PUT (POSA%,POSB%),WA% ,PSET
  259. 2560  IF R$(I,J,K)="O" THEN PUT (POSA%,POSB%),OA% ,PSET
  260. 2570  NEXT J: NEXT I
  261. 2580  FOR I=2 TO 4: FOR J=2 TO 4
  262. 2590  READ POSA%,POSB%
  263. 2600  IF R$(K,I,J)="R" THEN PUT (POSA%,POSB%),RA% ,PSET
  264. 2610  IF R$(K,I,J)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET
  265. 2620  IF R$(K,I,J)="G" THEN PUT (POSA%,POSB%),GA% ,PSET
  266. 2630  IF R$(K,I,J)="B" THEN PUT (POSA%,POSB%),BA% ,PSET
  267. 2640  IF R$(K,I,J)="W" THEN PUT (POSA%,POSB%),WA% ,PSET
  268. 2650  IF R$(K,I,J)="O" THEN PUT (POSA%,POSB%),OA% ,PSET
  269. 2660  NEXT J: NEXT I
  270. 2670  FOR I=2 TO 4: FOR J=2 TO 4
  271. 2680  READ POSA%,POSB%
  272. 2690  IF R$(I,K,J)="R" THEN PUT (POSA%,POSB%),RA% ,PSET
  273. 2700  IF R$(I,K,J)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET
  274. 2710  IF R$(I,K,J)="G" THEN PUT (POSA%,POSB%),GA% ,PSET
  275. 2720  IF R$(I,K,J)="B" THEN PUT (POSA%,POSB%),BA% ,PSET
  276. 2730  IF R$(I,K,J)="W" THEN PUT (POSA%,POSB%),WA% ,PSET
  277. 2740  IF R$(I,K,J)="O" THEN PUT (POSA%,POSB%),OA%  ,PSET
  278. 2750  NEXT J: NEXT I
  279. 2760  NEXT K
  280. 2770  RETURN
  281. 2780  PRINT "THANK YOU FOR PLAYING. "
  282. 2790  END
  283.