|
- 50 PRINT CHR$(26):WIDTH 80
- 100 PRINT TAB(33);"QUBIC":PRINT
- 110 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
- 120 PRINT:PRINT:PRINT
- 210 PRINT "DO YOU WANT INSTRUCTIONS";
- 220 INPUT C$
- 230 IF LEFT$(C$,1)="N" THEN 315
- 240 IF LEFT$(C$,1)="Y" THEN 265
- 250 PRINT "INCORRECT ANSWER. PLEASE TYPE 'YES' OR 'NO'";
- 260 GOTO 220
- 265 PRINT
- 270 PRINT "THE GAME IS TIC-TAC-TOE IN A 4 X 4 X 4 CUBE."
- 280 PRINT "EACH MOVE IS INDICATED BY A 3 DIGIT NUMBER, WITH EACH"
- 290 PRINT "DIGIT BETWEEN 1 AND 4 INCLUSIVE. THE DIGITS INDICATE THE"
- 300 PRINT "LEVEL, ROW, AND COLUMN, RESPECTIVELY, OF THE OCCUPIED"
- 305 PRINT "PLACE. "
- 306 PRINT
- 307 PRINT "TO PRINT THE PLAYING BOARD, TYPE 0 (ZERO) AS YOUR MOVE."
- 308 PRINT "THE PROGRAM WILL PRINT THE BOARD WITH YOUR MOVES INDI-"
- 309 PRINT "CATED WITH A (Y), THE MACHINE'S MOVES WITH AN (M), AND"
- 310 PRINT "UNUSED SQUARES WITH A ( ). OUTPUT IS ON PAPER."
- 311 PRINT
- 312 PRINT "TO STOP THE PROGRAM RUN, TYPE 1 AS YOUR MOVE."
- 313 PRINT:PRINT
- 315 DIM X(64),L(76),M(76,4),Y(16)
- 320 FOR I = 1 TO 16
- 330 READ Y(I)
- 340 NEXT I
- 350 FOR I=1 TO 76
- 360 FOR J = 1 TO 4
- 370 READ M(I,J)
- 380 NEXT J
- 390 NEXT I
- 400 FOR I = 1 TO 64
- 410 LET X (I) =0
- 420 NEXT I
- 430 LET Z=1
- 440 PRINT "DO YOU WANT TO MOVE FIRST";
- 450 INPUT S$
- 460 IF LEFT$(S$,1)="N" THEN 630
- 470 IF LEFT$(S$,1)="Y" THEN 500
- 480 PRINT "INCORRECT ANSWER. PLEASE TYPE 'YES' OR 'NO'.";
- 490 GOTO 450
- 500 PRINT " "
- 510 PRINT "YOUR MOVE";
- 520 INPUT J1
- 521 IF J1=1 THEN 2770
- 522 IF J1<>0 THEN 525
- 523 GOSUB 2550
- 524 GOTO 500
- 525 IF J1<111 THEN 2750
- 526 IF J1>444 THEN 2750
- 530 GOSUB 2500
- 540 LET K1=INT(J1/100)
- 550 LET J2=(J1-K1*100)
- 560 LET K2=INT(J2/10)
- 570 LET K3= J1 - K1*100 -K2*10
- 580 LET M=16*K1+4*K2+K3-20
- 590 IF X(M)=0 THEN 620
- 600 PRINT "THAT SQUARE IS USED, TRY AGAIN."
- 610 GOTO 500
- 620 LET X(M)=1
- 630 GOSUB 1640
- 640 J=1
- 650 I=1
- 660 IF J=1 THEN 720
- 670 IF J=2 THEN 790
- 680 IF J=3 THEN 930
- 690 I=I+1: IF I<=76 THEN 660
- 700 J=J+1: IF J<=3 THEN 650
- 710 GOTO 1300
- 720 IF L(I)<>4 THEN 690
- 730 PRINT "YOU WIN AS FOLLOWS";
- 740 FOR J=1 TO 4
- 750 LET M=M(I,J)
- 760 GOSUB 1570
- 770 NEXT J
- 780 GOTO 1490
- 790 IF L(I)<>15 THEN 690
- 800 FOR J=1 TO 4
- 810 LET M=M(I,J)
- 820 IF X(M)<>0 THEN 860
- 830 LET X(M)=5
- 840 PRINT "MACHINE MOVES TO";
- 850 GOSUB 1570
- 860 NEXT J
- 870 PRINT ", AND WINS AS FOLLOWS"
- 880 FOR J=1 TO 4
- 890 LET M=M(I,J)
- 900 GOSUB 1570
- 910 NEXT J
- 920 GOTO 1490
- 930 IF L(I)<>3 THEN 690
- 940 PRINT "NICE TRY. MACHINE MOVES TO";
- 950 FOR J=1 TO 4
- 960 LET M=M(I,J)
- 970 IF X(M)<>0 THEN 1010
- 980 LET X(M)=5
- 990 GOSUB 1570
- 1000 GOTO 500
- 1010 NEXT J
- 1020 GOTO 1300
- 1030 I=1
- 1040 LET L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4))
- 1050 LET L = L(I)
- 1060 IF L <2 THEN 1130
- 1070 IF L>=3 THEN 1130
- 1080 IF L>2 THEN 2230
- 1090 FOR J = 1 TO 4
- 1100 IF X(M(I,J))<>0 THEN 1120
- 1110 LET X(M(I,J))=1/8
- 1120 NEXT J
- 1130 I=I+1: IF I<=76 THEN 1040
- 1140 GOSUB 1640
- 1150 I=1
- 1160 IF L(I)=1/2 THEN 2360
- 1170 IF L(I)=1+3/8 THEN 2360
- 1180 I=I+1: IF I<=76 THEN 1160
- 1190 GOTO 1830
- 1200 LET Z = 1
- 1210 IF X(Y(Z))=0 THEN 1250
- 1220 LET Z=Z+1
- 1230 IF Z<>17 THEN 1210
- 1240 GOTO 1720
- 1250 LET M=Y(Z)
- 1260 LET X(M)=5
- 1270 PRINT "MACHINE MOVES TO";
- 1280 GOSUB 1570
- 1290 GOTO 500
- 1300 LET X=X
- 1310 I=1
- 1320 LET L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4))
- 1330 LET L=L(I)
- 1340 IF L<10 THEN 1410
- 1350 IF L>=11 THEN 1410
- 1360 IF L>10 THEN 2230
- 1370 FOR J=1 TO 4
- 1380 IF X(M(I,J))<>0 THEN 1400
- 1390 LET X(M(I,J))=1/8
- 1400 NEXT J
- 1410 I=I+1: IF I<=76 THEN 1320
- 1420 GOSUB 1640
- 1430 I=1
- 1440 IF L(I)=.5 THEN 2360
- 1450 IF L(I)=5+3/8 THEN 2360
- 1460 I=I+1: IF I<=76 THEN 1440
- 1470 GOSUB 2500
- 1480 GOTO 1030
- 1490 PRINT " "
- 1500 PRINT "DO YOU WANT TO TRY ANOTHER GAME";
- 1510 INPUT X$
- 1520 IF LEFT$(X$,1)="Y" THEN 400
- 1530 IF LEFT$(X$,1)="N" THEN 1560
- 1540 PRINT "INCORRECT ANSWER. PLEASE TYPE 'YES' OR 'NO'";
- 1550 GOTO 1510
- 1560 STOP
- 1570 LET K1=INT((M-1)/16)+1
- 1580 LET J2=M-16*(K1-1)
- 1590 LET K2=INT((J2-1)/4)+1
- 1600 LET K3=M-(K1-1)*16-(K2-1)*4
- 1610 LET M=K1*100+K2*10+K3
- 1620 PRINT M;
- 1630 RETURN
- 1640 FOR S=1 TO 76
- 1650 LET J1 = M(S,1)
- 1660 LET J2=M(S,2)
- 1670 LET J3=M(S,3)
- 1680 LET J4=M(S,4)
- 1690 LET L(S)=X(J1)+X(J2)+X(J3)+X(J4)
- 1700 NEXT S
- 1710 RETURN
- 1720 FOR I=1 TO 64
- 1730 IF X(I)<>0 THEN 1800
- 1740 LET X(I)=5
- 1750 LET M=I
- 1760 PRINT "MACHINE LIKES";
- 1770 GOSUB 1570
- 1780 PRINT " "
- 1790 GOTO 500
- 1800 NEXT I
- 1810 PRINT "THE GAME IS A DRAW."
- 1820 GOTO 1490
- 1830 FOR K=1 TO 18
- 1840 LET P=0
- 1850 FOR I=4*K-3 TO 4*K
- 1860 FOR J=1 TO 4
- 1870 LET P=P+X(M(I,J))
- 1880 NEXT J
- 1890 NEXT I
- 1900 IF P<4 THEN 1940
- 1910 IF P<5 THEN 1970
- 1920 IF P<9 THEN 1940
- 1930 IF P<10 THEN 1970
- 1940 NEXT K
- 1950 GOSUB 2500
- 1960 GOTO 1200
- 1970 LET S=1/8
- 1980 FOR I=4*K-3 TO 4*K
- 1990 GOTO 2370
- 2000 NEXT I
- 2010 LET S=0
- 2020 GOTO 1980
- 2030 DATA 1,49,52,4,13,61,64,16,22,39,23,38,26,42,27,43
- 2040 DATA 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
- 2050 DATA 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38
- 2060 DATA 39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56
- 2070 DATA 57,58,59,60,61,62,63,64
- 2080 DATA 1,17,33,49,5,21,37,53,9,25,41,57,13,29,45,61
- 2090 DATA 2,18,34,50,6,22,38,54,10,26,42,58,14,30,46,62
- 2100 DATA 3,19,35,51,7,23,39,55,11,27,43,59,15,31,47,63
- 2110 DATA 4,20,36,52,8,24,40,56,12,28,44,60,16,32,48,64
- 2120 DATA 1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61
- 2130 DATA 2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62
- 2140 DATA 3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63
- 2150 DATA 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64
- 2160 DATA 1,6,11,16,17,22,27,32,33,38,43,48,49,54,59,64
- 2170 DATA 13,10,7,4,29,26,23,20,45,42,39,36,61,58,55,52
- 2180 DATA 1,21,41,61,2,22,42,62,3,23,43,63,4,24,44,64
- 2190 DATA 49,37,25,13,50,38,26,14,51,39,27,15,52,40,28,16
- 2200 DATA 1,18,35,52,5,22,39,56,9,26,43,60,13,30,47,64
- 2210 DATA 49,34,19,4,53,38,23,8,57,42,27,12,61,46,31,16
- 2220 DATA 1,22,43,64,16,27,38,49,4,23,42,61,13,26,39,52
- 2230 FOR J=1 TO 4
- 2240 IF X(M(I,J))<>1/8 THEN 2330
- 2250 LET X(M(I,J))=5
- 2260 IF L(I)<5 THEN 2290
- 2270 PRINT "LET'S SEE YOU GET OUT OF THIS: MACHINE MOVES TO";
- 2280 GOTO 2300
- 2290 PRINT "YOU FOX. JUST IN THE NICK OF TIME, MACHINE MOVES TO";
- 2300 LET M=M(I,J)
- 2310 GOSUB 1570
- 2320 GOTO 500
- 2330 NEXT J
- 2340 PRINT "MACHINE CONCEDES THIS GAME."
- 2350 GOTO 1490
- 2360 LET S=1/8
- 2370 IF I-INT(I/4)*4>1 THEN 2400
- 2380 LET A=1
- 2390 GOTO 2410
- 2400 LET A=2
- 2410 FOR J=A TO 5-A STEP 5-2*A
- 2420 IF X(M(I,J))=S THEN 2450
- 2430 NEXT J
- 2440 GOTO 2000
- 2450 LET X(M(I,J))=5
- 2460 LET M=M(I,J)
- 2470 PRINT "MACHINE TAKES";
- 2480 GOSUB 1570
- 2490 GOTO 500
- 2500 FOR I=1 TO 64
- 2510 IF X(I)<>1/8 THEN 2530
- 2520 LET X(I)=0
- 2530 NEXT I
- 2540 RETURN
- 2550 FOR XX=1 TO 9:PRINT:NEXT:FOR I=1 TO 4
- 2560 FOR J=1 TO 4
- 2562 FOR I1=1 TO J
- 2564 PRINT" ";
- 2566 NEXT I1
- 2570 FOR K=1 TO 4
- 2600 LET Q=16*I+4*J+K-20
- 2610 IF X(Q)<>O THEN 2630
- 2620 PRINT"( ) ";
- 2630 IF X(Q)<>5 THEN 2650
- 2640 PRINT"(M) ";
- 2650 IF X(Q)<>1 THEN 2660
- 2655 PRINT"(Y) ";
- 2660 IF X(Q)<>1/8 THEN 2670
- 2665 PRINT"( ) ";
- 2670 NEXT K
- 2680 PRINT
- 2690 PRINT
- 2700 NEXT J
- 2710 PRINT
- 2720 PRINT
- 2730 NEXT I
- 2735 REM PRINT CHR$(12)
- 2740 RETURN
- 2750 PRINT"INCORRECT MOVE, RETYPE IT--";
- 2760 GOTO 520
- 2770 END
|