home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1984-04-24 | 7.2 KB | 283 lines |
- 1 CLS
- 10 PRINT "INSTRUCTIONS"
- 20 PRINT "WHEN YOU ARE ASKED FOR THE NUMBER OF MIXES, ENTER THE NUMBER OF"
- 30 PRINT "RANDOM FACE ROTATIONS YOU DESIRE" : PRINT
- 40 PRINT " WHEN YOU ARE ASKED FOR YOUR MOVE, ENTER THE DESIGNATION OF THE "
- 50 PRINT " FACE: F=FRONT, B=BACK, L=LEFT, R=RIGHT,T=TOP, B=BOTTOM
- 60 PRINT" AND THE AMOUNT OF ROTATION, += CLOCKWIZE 1, -=COUNTERCLOCKWIZE 1"
- 70 PRINT " 2= 180 DEGREES"
- 80 PRINT " SEE THE ARTICLE IN KILOBAUD JANUARY 1982 PAGE 28"
- 90 PRINT " THIS VERSION WAS EXTENSIVELY CONVERTED TO RUN ON THE ibm"
- 100 PRINT "I CAN'T FIGURE WHY THEY USED SUCH A LARGE ARRAY TO STORE THE CUBE"
- 101 PRINT " LINE 730 PRINTS THE RANDOM MIX MOVES SO THAT YOU CAN "
- 102 PRINT " CHEAT AND SOLVE THE CUBE. COMMENT THIS LINE OUT TO BE HONEST"
- 110 PRINT "PRESS ANY KEY TO CONTINUE"
- 120 B$=INKEY$:IF B$="" THEN GOTO 120
- 130 CLS
- 140 SCREEN 2
- 150 DRAW "BL120M-120,-20D60M+120,20U60M+120,-20D60M-120,20U20M-120,-20U20"
- 160 DRAW "M+120,20M+120,-20D20M-120,20D20M-40,-7U60M+120,-20M+40,+7M-120,-20"
- 170 DRAW "M-120,20D60M+40,+7U60M+120,-20M-40,-7M-40,+7M+120,+20D60M-40,+7U60"
- 180 DRAW "M-120,-20"
- 190 DRAW "BR360BD45"
- 200 DRAW "A2M-120,-20D60M+120,20U60M+120,-20D60M-120,20U20M-120,-20U20"
- 210 DRAW "M+120,20M+120,-20D20M-120,20D20M-40,-7U60M+120,-20M+40,+7M-120,-20"
- 220 DRAW "M-120,20D60M+40,+7U60M+120,-20M-40,-7M-40,+7M+120,+20D60M-40,+7U60"
- 230 DRAW "M-120,-20A0"
- 240 OP$="D6R5U6L5":YP$="F3E3G3D3":RP$="D6U6R5D3L5R3F4":WP$="D6E3F3U6"
- 250 BP$="D6R5U3L5R5U3L5":GP$="R5D1U1L5D6R5U2L1"
- 260 DIM OA%(5),YA%(5),RA%(5),WA%(5),BA%(5),GA%(5)
- 270 DRAW "BM1,1;XOP$;":GET(1,1)-(7,8),OA% :PUT(1,1),OA%
- 280 DRAW "BM1,1;XYP$;":GET(1,1)-(7,8),YA% :PUT(1,1),YA%
- 290 DRAW "BM1,1;XRP$;":GET(1,1)-(7,8),RA% :PUT(1,1),RA%
- 300 DRAW "BM1,1;XWP$;":GET(1,1)-(7,8),WA% :PUT(1,1),WA%
- 310 DRAW "BM1,1;XBP$;":GET(1,1)-(7,8),BA% :PUT(1,1),BA%
- 320 DRAW "BM1,1;XGP$;":GET(1,1)-(7,8),GA% :PUT(1,1),GA%
- 330 DATA 478,149,518,143,557,136,437,142,478,136,518,129,396,136,437,129,478
- 340 DATA 123
- 350 DATA 177,144,177,124,177,104,137,137,137,117,137,97,97,131,97,111,97,91
- 360 DATA 217,144,217,124,217,104,257,137,257,117,257,97,297,131,297,111,297,91
- 370 DATA 197,90,157,84,117,77,237,84,197,77,157,71,277,77,237,71,197,64
- 380 DATA 376,123,376,103,376,83,416,117,416,97,416,77,456,110,456,90,456,70
- 390 DATA 577,123,577,103,577,83,537,117,537,97,537,77,496,110,496,90,496,70
- 400 DIM R$(5,5,5),R1$(5,5,5),A$(5,5),B$(5,5),C$(5,5),D$(5,5)
- 410 LLL=0
- 420 FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5
- 430 R$(I,J,K)=""
- 440 NEXT K: NEXT J: NEXT I
- 450 FOR I=2 TO 4:FOR J=2 TO 4
- 460 R$(1,I,J)="R":R$(I,1,J)="W":R$(I,J,1)="G"
- 470 R$(5,I,J)="O":R$(I,5,J)="B":R$(I,J,5)="Y"
- 480 NEXT J: NEXT I
- 490 REM
- 500 REM MIX RUBIK'S CUB
- 510 REM
- 520 INPUT "INPUT NUMBER OF MIXES";N
- 530 Z$=""
- 540 FOR I=1 TO N
- 550 X%= INT(6*RND(1)):Y%= INT(3*RND(1))
- 560 IF X%<>0 THEN 580
- 570 X$="R":GOTO 670
- 580 IF X%<>1 THEN 600
- 590 X$="F": GOTO 670
- 600 IF X%<>2 THEN 620
- 610 X$="L": GOTO 670
- 620 IF X%<>3 THEN 640
- 630 X$="U": GOTO 670
- 640 IF X%<>4 THEN 660
- 650 X$="B": GOTO 670
- 660 X$="D"
- 670 IF Y%<>0 THEN 690
- 680 Y$="+": GOTO 720
- 690 IF Y%<>1 THEN 710
- 700 Y$="-": GOTO 720
- 710 Y$="2"
- 720 Z$=Z$+X$+Y$
- 730 PRINT Z$
- 740 NEXT I
- 750 GOSUB 920
- 760 GOSUB 2470
- 770 REM
- 780 REM CHANGE RUBIK'S CUBE
- 790 REM
- 800 LOCATE 1,1
- 810 PRINT " "
- 820 PRINT " "
- 830 LLL=1
- 840 LOCATE 1,1
- 850 INPUT "INPUT MOVE";Z$
- 860 GOSUB 920
- 870 GOSUB 2470
- 880 GOTO 800
- 890 REM
- 900 REM PERFORM MOVES
- 910 REM
- 920 'FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5
- 930 'R1$(I,J,K)=R$(I,J,K)
- 940 'NEXT K: NEXT J: NEXT I
- 950 IF Z$="" THEN RETURN
- 960 X$=MID$(Z$,1,1)
- 970 IF X$="S" THEN 2780
- 980 IF X$="M" THEN 1670
- 990 REM
- 1000 REM MOVE FACES
- 1010 REM
- 1020 Y$=MID$(Z$,2,1)
- 1030 IF X$<>"R" THEN 1130
- 1040 FOR I=1 TO 5:FOR J=1 TO 5
- 1050 A$(I,J)=R$(I,1,J):B$(I,J)=R$(I,2,J)
- 1060 NEXT J: NEXT I
- 1070 GOSUB 2140
- 1080 IF E=1 THEN 2090
- 1090 FOR I=1 TO 5: FOR J=1 TO 5
- 1100 R$(I,1,J)=A$(I,J):R$(I,2,J)=B$(I,J)
- 1110 NEXT J: NEXT I
- 1120 GOTO 1620
- 1130 IF X$<>"F" THEN 1230
- 1140 FOR I=1 TO 5: FOR J=1 TO 5
- 1150 A$(I,J)=R$(1,I,J):B$(I,J)=R$(2,I,J)
- 1160 NEXT J: NEXT I
- 1170 GOSUB 2220
- 1180 IF E=1 THEN 2090
- 1190 FOR I=1 TO 5: FOR J=1 TO 5
- 1200 R$(1,I,J)=A$(I,J): R$(2,I,J)=B$(I,J)
- 1210 NEXT J: NEXT I
- 1220 GOTO 1620
- 1230 IF X$<>"L" THEN 1330
- 1240 FOR I=1 TO 5:FOR J=1 TO 5
- 1250 A$(I,J)=R$(I,5,J):B$(I,J)=R$(I,4,J)
- 1260 NEXT J: NEXT I
- 1270 GOSUB 2220
- 1280 IF E=1 THEN 2090
- 1290 FOR I=1 TO 5: FOR J=1 TO 5
- 1300 R$(I,5,J)=A$(I,J): R$(I,4,J)=B$(I,J)
- 1310 NEXT J: NEXT I
- 1320 GOTO 1620
- 1330 IF X$<>"B" THEN 1430
- 1340 FOR I=1 TO 5: FOR J=1 TO 5
- 1350 A$(I,J)=R$(5,I,J): B$(I,J)=R$(4,I,J)
- 1360 NEXT J: NEXT I
- 1370 GOSUB 2140
- 1380 IF E=1 THEN 2090
- 1390 FOR I=1 TO 5: FOR J=1 TO 5
- 1400 R$(5,I,J)=A$(I,J): R$(4,I,J)=B$(I,J)
- 1410 NEXT J: NEXT I
- 1420 GOTO 1620
- 1430 IF X$<>"U" THEN 1530
- 1440 FOR I=1 TO 5: FOR J=1 TO 5
- 1450 A$(I,J)=R$(I,J,5): B$(I,J)=R$(I,J,4)
- 1460 NEXT J: NEXT I
- 1470 GOSUB 2140
- 1480 IF E=1 THEN 2090
- 1490 FOR I=1 TO 5: FOR J=1 TO 5
- 1500 R$(I,J,5)=A$(I,J): R$(I,J,4)=B$(I,J)
- 1510 NEXT J: NEXT I
- 1520 GOTO 1620
- 1530 IF X$<>"D" THEN 2090
- 1540 FOR I=1 TO 5: FOR J=1 TO 5
- 1550 A$(I,J)=R$(I,J,1):B$(I,J)=R$(I,J,2)
- 1560 NEXT J: NEXT I
- 1570 GOSUB 2220
- 1580 IF E=1 THEN 2090
- 1590 FOR I=1 TO 5: FOR J=1 TO 5
- 1600 R$(I,J,1)=A$(I,J):R$(I,J,2)=B$(I,J)
- 1610 NEXT J: NEXT I
- 1620 Z$=MID$(Z$,3)
- 1630 GOTO 950
- 1640 REM
- 1650 REM CHANGE VIEWING CORNERS
- 1660 REM
- 1670 X$=MID$(Z$,2,1):Y$=MID$(Z$,3,1)
- 1680 S$=MID$(Z$,4,1)
- 1690 IF S$<>"1" AND S$<>"2" AND S$<>"3" THEN 2090
- 1700 N=VAL(S$)
- 1710 IF X$<>"F" THEN 1960
- 1720 IF Y$<>"R" THEN 1840
- 1730 Z$=MID$(Z$,5)
- 1740 FOR K=1 TO N
- 1750 Z$="U-D+"+"Z$
- 1760 FOR I=1 TO 5: FOR J=1 TO 5
- 1770 A$(I,J)=R$(I,J,3)
- 1780 NEXT J: NEXT I
- 1790 FOR I=1 TO 5: FOR J=1 TO 5
- 1800 R$(6-J,I,3)=A$(I,J)
- 1810 NEXT J: NEXT I
- 1820 NEXT K
- 1830 GOTO 950
- 1840 IF Y$<>"U" THEN 2090
- 1850 Z$=MID$(Z$,5)
- 1860 FOR K=1 TO N
- 1870 Z$="R+L-"+Z$
- 1880 FOR I=1 TO 5: FOR J=1 TO 5
- 1890 A$(I,J)=R$(I,3,J)
- 1900 NEXT J: NEXT I
- 1910 FOR I=1 TO 5: FOR J=1 TO 5
- 1920 R$(J,3,6-I)=A$(I,J)
- 1930 NEXT J: NEXT I
- 1940 NEXT K
- 1950 GOTO 950
- 1960 IF X$<>"U" THEN 2090
- 1970 IF Y$<>"R" THEN 2090
- 1980 Z$=MID$(Z$,5)
- 1990 FOR K=1 TO N
- 2000 Z$="F+B-"+Z$
- 2010 FOR I=1 TO 5: FOR J=1 TO 5
- 2020 A$(I,J)=R$(3,I,J)
- 2030 NEXT J: NEXT I
- 2040 FOR I=1 TO 5: FOR J=1 TO 5
- 2050 R$(3,6-J,I)=A$(I,J)
- 2060 NEXT J: NEXT I
- 2070 NEXT K
- 2080 GOTO 950
- 2090 PRINT "INVALID MOVE, TRY AGAIN. "
- 2100 'FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5
- 2110 'R$(I,J,K)=R1$(I,J,K)
- 2120 'NEXT K: NEXT J: NEXT I
- 2130 RETURN
- 2140 E=0
- 2150 IF Y$<>"+" THEN 2170
- 2160 GOSUB 2370: RETURN
- 2170 IF Y$<>"-" THEN 2190
- 2180 GOSUB 2300: RETURN
- 2190 IF Y$<>"2" THEN 2210
- 2200 GOSUB 2300: GOSUB 2300: RETURN
- 2210 E=1: RETURN
- 2220 E=0
- 2230 IF Y$<>"+" THEN 2250
- 2240 GOSUB 2300: RETURN
- 2250 IF Y$<>"-" THEN 2270
- 2260 GOSUB 2370: RETURN
- 2270 IF Y$<>"2" THEN 2290
- 2280 GOSUB 2300: GOSUB 2300: RETURN
- 2290 E=1: RETURN
- 2300 FOR I=1 TO 5: FOR J=1 TO 5
- 2310 C$(I,J)=A$(I,J): D$(I,J)=B$(I,J)
- 2320 NEXT J: NEXT I
- 2330 FOR I=1 TO 5: FOR J=1 TO 5
- 2340 A$(6-J,I)=C$(I,J):B$(6-J,I)=D$(I,J)
- 2350 NEXT J: NEXT I
- 2360 RETURN
- 2370 FOR I=1 TO 5: FOR J=1 TO 5
- 2380 C$(I,J)=A$(I,J): D$(I,J)=B$(I,J)
- 2390 NEXT J: NEXT I
- 2400 FOR I=1 TO 5: FOR J=1 TO 5
- 2410 A$(J,6-I)=C$(I,J): B$(J,6-I)=D$(I,J)
- 2420 NEXT J: NEXT I
- 2430 RETURN
- 2440 REM
- 2450 REM PRINT RUBIK'S CUBE
- 2460 REM
- 2470 RESTORE 330
- 2480 FOR K=1 TO 5 STEP 4
- 2490 FOR I=2 TO 4: FOR J=2 TO 4
- 2500 READ POSA%,POSB%
- 2510 IF R$(I,J,K)="R" THEN PUT (POSA%,POSB%),RA% ,PSET
- 2520 IF R$(I,J,K)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET
- 2530 IF R$(I,J,K)="G" THEN PUT (POSA%,POSB%),GA% ,PSET
- 2540 IF R$(I,J,K)="B" THEN PUT (POSA%,POSB%),BA% ,PSET
- 2550 IF R$(I,J,K)="W" THEN PUT (POSA%,POSB%),WA% ,PSET
- 2560 IF R$(I,J,K)="O" THEN PUT (POSA%,POSB%),OA% ,PSET
- 2570 NEXT J: NEXT I
- 2580 FOR I=2 TO 4: FOR J=2 TO 4
- 2590 READ POSA%,POSB%
- 2600 IF R$(K,I,J)="R" THEN PUT (POSA%,POSB%),RA% ,PSET
- 2610 IF R$(K,I,J)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET
- 2620 IF R$(K,I,J)="G" THEN PUT (POSA%,POSB%),GA% ,PSET
- 2630 IF R$(K,I,J)="B" THEN PUT (POSA%,POSB%),BA% ,PSET
- 2640 IF R$(K,I,J)="W" THEN PUT (POSA%,POSB%),WA% ,PSET
- 2650 IF R$(K,I,J)="O" THEN PUT (POSA%,POSB%),OA% ,PSET
- 2660 NEXT J: NEXT I
- 2670 FOR I=2 TO 4: FOR J=2 TO 4
- 2680 READ POSA%,POSB%
- 2690 IF R$(I,K,J)="R" THEN PUT (POSA%,POSB%),RA% ,PSET
- 2700 IF R$(I,K,J)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET
- 2710 IF R$(I,K,J)="G" THEN PUT (POSA%,POSB%),GA% ,PSET
- 2720 IF R$(I,K,J)="B" THEN PUT (POSA%,POSB%),BA% ,PSET
- 2730 IF R$(I,K,J)="W" THEN PUT (POSA%,POSB%),WA% ,PSET
- 2740 IF R$(I,K,J)="O" THEN PUT (POSA%,POSB%),OA% ,PSET
- 2750 NEXT J: NEXT I
- 2760 NEXT K
- 2770 RETURN
- 2780 PRINT "THANK YOU FOR PLAYING. "
- 2790 END
-