image of READY prompt

Wang2200.org

Listing of file='QUBIC' on disk='vmedia/more_games.wvd.zip'

# Sector 1148, program filename = 'QUBIC'
0010 REM *QUBIC*
   : LOAD DC T#6,"GAMES"
0020 DIM A$64,B$64,Q(16),R(76,4),S(64),T(76),U(5,3)
0030 DEFFNS(Z)=S(R(Z,1))+S(R(Z,2))+S(R(Z,3))+S(R(Z,4))
0040 DEFFNM(Z)=Z+110+6*INT(Z/4-.2)+60*INT(Z/16-.05)
0050 DEFFNG(Z)=INT(T(Z)-5*INT(T(Z)/5))
   : RESTORE
   : MAT READ Q,R
   : INIT(20)B$,A$
   : MAT U=ZER
0060 E,G3=0
   : %WHAT'S YOUR NAME?
0070 PRINT HEX(03);
   : INPUT "WHAT IS YOUR FIRST NAME",B$
   : PRINT HEX(03);"THIS IS THE GAME OF QUBIC, ";B$;
   : INPUT ". DO YOU WANT INSTRUCTIONS",A$
0080 IF STR(A$,1,1)<>"Y"THEN 140
   : %INSTRUCTIONS
0090 PRINT HEX(03);"THE GAME IS TIC-TAC-TOE IN A 4 X 4 X 4 CUBE.";
   : PRINT "YOU WIN IF YOU GET 4 IN A STRAIGHT LINE,";
   : PRINT "(HORIZONTAL, VERTICAL OR ANY DIAGONAL).";
0100 PRINT "A MOVE IS A THREE-DIGIT NUMBER WITH EACH DIGIT BEING,";
   : PRINT "EITHER  1 , 2 , 3 , OR 4 ,";
   : PRINT "ENTERED WITHOUT COMMAS (ie: 123, 444, etc.).";
0110 PRINT "THE DIGITS INDICATE THE LEVEL, ROW, AND COLUMN";
0120 PRINT "(IN THAT ORDER) OF YOUR MOVE.";
   : PRINT " PRESS 'EXECUTE' TO START THE GAME."
0130 KEYIN C$,140,130
   : GOTO 130
0140 PRINT HEX(03);"YOUR POSITIONS ARE INDICATED BY X'S AND MINE BY O'S.";
   : PRINT "YOU GET TO PICK A STRATEGY LEVEL BETWEEN 1 AND 5.";
0150 PRINT "(1 IS THE EASIEST, 5 IS THE HARDEST.)"
   : %WHAT STRATEGY LEVEL?
0160 PRINT "OK ";B$;",";
   : INPUT "  WHAT STRATEGY LEVEL WOULD YOU LIKE TO TRY",L
   : IF ABS(L-1)=INT(L-1)THEN 170
   : GOTO 180
0170 IF L<6THEN 190
   : %BAD ANSWER!
0180 PRINT HEX(0307);"YOUR ANSWER MUST BE AN INTERGER BETWEEN 1 AND 5."
   : FOR X=1TO 350
   : NEXT X
   : PRINT HEX(03)
   : GOTO 160
0190 Q,Q0=2
   : R9=16
   : R=INT(76*RND(1))+1
   : MAT S=ZER
0200 MAT T=ZER
   : %DO YOU WANT TO GO FIRST?
0210 PRINT HEX(03);"LEVEL";L;
   : INPUT "-  DO YOU WANT TO GO FIRST",A$
   : F1=0
   : IF STR(A$,1,1)="Y"THEN 230
0220 ON INT(L/2+.5)GOTO 1250,1340,870
0230 Q=1
   : GOTO 250
0240 GOSUB 1080
0250 PRINT "ITS YOUR TURN ";B$;",";
0260 E=RND(1)+LEN(B$)
   : %WHAT'S YOUR MOVE?
0270 INPUT " WHAT'S YOUR MOVE",F
   : E1=INT(F/100)
   : E2=INT(F/10)-10*E1
   : E3=F-100*E1-10*E2
   : IF E1<5THEN 280
   : GOTO 310
0280 IF E2<5THEN 290
   : GOTO 310
0290 IF E3<5THEN 300
   : GOTO 310
0300 IF ABS(F-111)=INT(F-111)THEN 320
   : %ILLEGAL MOVE!
0310 PRINT HEX(07);"ILLEGAL MOVE, TRY AGAIN."
   : FOR X=1TO 350
   : NEXT X
   : GOTO 270
0320 M=16*E1+4*E2+E3-20
0330 IF S(M)<1THEN 350
   : %SQUARE IS TAKEN!
0340 PRINT HEX(07);"THAT SQUARE IS TAKEN, TRY AGAIN."
   : FOR X=1TO 350
   : NEXT X
   : GOTO 270
0350 S(M)=1
   : Q=Q+2
   : GOSUB 1110
   : GOSUB 1090
   : IF Q=3THEN 360
   : GOTO 370
0360 IF L=3THEN 1340
   : IF L=4THEN 1340
0370 A,B=0
   : FOR F=1TO 76
0380 IF T(F)<>4THEN 530
   : %YOU WIN!!
0390 PRINT HEX(03070A0A0A);"CONGRATULATIONS, ";B$;"!  YOU";
   : G3=G3+1
   : U(L,3)=U(L,3)+1
0400 PRINT " WIN AS FOLLOWS:";FNM(R(F,1));FNM(R(F,2));FNM(R(F,3));
   : PRINT FNM(R(F,4));"  FINAL POSITION:"
   : IF F1<>0THEN 410
   : IF F=76THEN 410
   : F9=F
   : F=76
   : NEXT F
   : F=F9
0410 GOSUB 1080
0420 FOR A=1TO 5
   : FOR B=1TO 3
   : IF U(A,B)<>0THEN 440
   : GOTO 450
0430 IF F=76THEN 410
   : F9=F
   : F=76
   : NEXT F
   : F=F9
   : GOTO 410
0440 IF B>=3THEN 470
   : B9=B
   : B=3
   : NEXT B
   : B=B9
   : GOTO 470
0450 NEXT B
0460 GOTO 490
   : %SO FAR...
0470 IF A>=5THEN 480
   : A9=A
   : A=5
   : NEXT A
   : A=A9
0480 PRINT "SO FAR AT LEVEL";A;" YOU'VE WON";U(A,3);" I'VE WON";U(A,1);"- ";
   : IF U(A,2)=0THEN 490
   : PRINT " AND WE'VE DRAWN";U(A,2);". ";
0490 NEXT A
   : %TRY AGAIN?
0500 PRINT ". WELL ";B$;", ";
   : INPUT "  DO YOU WANT ANOTHER GAME",A$
   : IF STR(A$,1,1)="Y"THEN 510
   : GOTO 520
0510 PRINT HEX(03);
   : IF F>=13THEN 160
   : F9=F
   : F=13
   : NEXT F
   : F=F9
   : GOTO 160
0520 END
0530 IF T(F)<>15THEN 540
   : A=F
0540 IF T(F)<>3THEN 550
   : B=F
0550 NEXT F
   : IF A=0THEN 590
   : GOSUB 1070
0560 IF Q0=2THEN 580
   : %YOU LOSE!!!
0570 PRINT HEX(03070A0A0A);"TOO BAD, ";B$;"."
   : PRINT "JUST AS I SAID, ";
0580 PRINT HEX(03);"I MOVE TO";FNM(R(A,C));" AND";
   : F=A
   : F1=1
   : U(L,1)=U(L,1)+1
   : S(R(A,C))=5
   : GOTO 400
0590 IF Q<65THEN 640
   : IF Q=66THEN 630
   : FOR F=1TO 64
   : IF S(F)=0THEN 600
   : GOTO 610
0600 IF F>=64THEN 620
   : F9=F
   : F=64
   : NEXT F
   : F=F9
   : GOTO 620
0610 NEXT F
   : %DRAW
0620 PRINT HEX(0307);"I MOVE TO";FNM(F);"AND";
0630 PRINT "THE GAME IS A DRAW."
   : U(L,2)=U(L,2)+1
   : F1=1
   : GOTO 420
0640 IF L=1THEN 1240
   : IF B=0THEN 680
   : A=B
0650 GOSUB 1070
   : %CLOSE
0660 PRINT HEX(03);"NICE TRY ";B$;", --I MOVE TO";FNM(R(A,C))
0670 S(R(A,C))=5
   : GOTO 240
0680 IF L=2THEN 1240
   : FOR Y=5TO 1STEP -4
   : FOR F=1TO 76
   : V=FNS(F)
   : IF INT(V)<>2*YTHEN 720
   : IF V>2*YTHEN 690
   : GOTO 700
0690 IF F>=76THEN 920
   : F9=F
   : F=76
   : F=F9
   : NEXT F
   : GOTO 920
0700 FOR G=1TO 4
   : IF S(R(F,G))>0THEN 710
   : S(R(F,G))=.1
0710 NEXT G
0720 NEXT F
0730 GOSUB 1090
   : %2200 MOVES
0740 FOR F=1TO 76
   : IF T(F)=.4THEN 750
   : IF T(F)=Y+.3THEN 750
   : GOTO 760
0750 IF F>=76THEN 1030
   : F9=F
   : F=76
   : NEXT F
   : F=F9
   : GOTO 1030
0760 NEXT F
   : IF Y=1THEN 790
   : IF L=3THEN 770
   : GOTO 780
0770 IF Y<=1THEN 1320
   : Y9=Y
   : Y=1
   : NEXT Y
   : Y=Y9
   : GOTO 1320
0780 GOSUB 1110
0790 NEXT Y
   : IF L=4THEN 1320
   : FOR H=1TO 69STEP 4
   : P=INT(T(H))+INT(T(H+1))+INT(T(H+2))+INT(T(H+3))
   : IF P<>4THEN 800
   : GOTO 810
0800 IF P<>9THEN 860
0810 J=.1
0820 FOR F=HTO H+3
   : IF F>=H+3THEN 830
   : F9=F
   : F=H+3
   : NEXT F
   : F=F9
0830 IF H>=69THEN 1040
   : H9=H
   : H=69
   : NEXT H
   : H=H9
   : GOTO 1040
0840 NEXT F
0850 J=0
   : GOTO 820
0860 NEXT H
0870 FOR F=1TO 16
   : IF S(Q(F))>.5THEN 880
   : S(Q(F))=5
   : PRINT HEX(03);"I MOVE TO";FNM(Q(F))
   : IF F>=16THEN 240
   : F9=F
   : F=16
   : NEXT F
   : F=F9
   : GOTO 240
0880 NEXT F
0890 S=0
   : FOR F=1TO INT((66-Q)*RND(1))+1
0900 S=S+1
   : IF S(S)<.5THEN 910
   : GOTO 900
0910 NEXT F
   : PRINT HEX(03);"I LIKE";FNM(S)
   : S(S)=5
   : GOTO 240
0920 FOR G=1TO 4
0930 IF S(R(F,G))<>.1THEN 1020
   : S(R(F,G))=5
0940 IF V<5THEN 990
   : %RIPOSTE
0950 IF G3=0THEN 970
   : PRINT HEX(03);B$;", YOU BEAT ME BEFORE, BUT NO MORE!  LOOK: ";
   : Q0=1
0960 GOTO 1010
   : %GOTCHA..?
0970 PRINT HEX(03);"LET'S SEE YOU GET OUT OF THIS ONE: ";
0980 GOTO 1010
   : %CLOSE CALL!
0990 PRINT HEX(03);"YOU FOX!  JUST IN THE NICK OF TIME,";
   : GOTO 1010
1000 PRINT HEX(03);
1010 PRINT " I MOVE TO";FNM(R(F,G))
   : IF G>=4THEN 240
   : G=5
   : NEXT G
   : GOTO 240
1020 NEXT G
1030 J=.1
1040 K=INT((F-INT(F/4)*4)/2)+1
   : FOR G=KTO 5-KSTEP 5-2*K
   : IF S(R(F,G))<>JTHEN 1060
   : PRINT HEX(03);"I TAKE";FNM(R(F,G))
   : S(R(F,G))=5
1050 IF G>=5-KTHEN 240
   : G9=G
   : G=(5-K)
   : NEXT G
   : G=G9
   : GOTO 240
1060 NEXT G
   : GOTO 840
1070 FOR C=1TO 4
   : IF S(R(A,C))<.5THEN 1100
   : NEXT C
1080 A$="X.O"
   : PRINT
   : FOR F=1TO 13STEP 4
   : FOR G=FTO F+48STEP 16
   : FOR H=GTO G+3
   : N=ABS(INT(S(H))-2)
   : PRINT STR(A$,N,1);
   : NEXT H
   : PRINT HEX(20202020);
   : NEXT G
   : PRINT HEX(0D0A0A);
   : NEXT F
   : RETURN
1090 FOR W=1TO 76
   : T(W)=FNS(W)
   : NEXT W
1100 RETURN
1110 FOR W=1TO 64
1120 S(W)=INT(S(W))
   : NEXT W
1130 RETURN
   : %LOGIC TABLE
1140 DATA 1,49,52,4,13,61,64,16,22,39,23,38,26,42,27,43,1,2,3,4,5,6,7
   : DATA 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28
1150 DATA 29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48
1160 DATA 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,1,17,33,49,2
   : DATA 18,34,50,3,19,35,51,4,20,36,52,5,21,37,53,6,22,38,54,7,23,39
1170 DATA 55,8,24,40,56,9,25,41,57,10,26,42,58,11,27,43,59,12,28,44,60
1180 DATA 13,29,45,61,14,30,46,62,15,31,47,63,16,32,48,64,1,5,9,13,17
   : DATA 21,25,29,33,37,41,45,49,53,57,61,2,6,10,14,18,22,26,30,34,38
1190 DATA 42,46,50,54,58,62,3,7,11,15,19,23,27,31,35,39,43,47,51,55,59
1200 DATA 63,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,1,6,11,16,17
   : DATA 22,27,32,33,38,43,48,49,54,59,64,13,10,7,4,29,26,23,20,45,42
1210 DATA 39,36,61,58,55,52,1,21,41,61,2,22,42,62,3,23,43,63,4,24,44,64
1220 DATA 49,37,25,13,50,38,26,14,51,39,27,15,52,40,28,16,1,18,35,52,5
   : DATA 22,39,56,9,26,43,60,13,30,47,64,49,34,19,4,53,38,23,8,57,42
1230 DATA 27,12,61,46,31,16,1,22,43,64,16,27,38,49,4,23,42,61,13,26,39
   : DATA 52
1240 IF R=0THEN 890
1250 IF FNG(R)<>0THEN 1290
1260 A=R
1270 GOSUB 1070
   : %2200 MOVES
1280 PRINT HEX(03);"I GO TO";FNM(R(A,C))
   : GOTO 670
1290 A,R=0
   : FOR F=1TO 76
   : IF FNG(F)<>0THEN 1300
   : A=A+1
1300 NEXT F
   : IF A=0THEN 890
   : FOR F=1TO INT(A*RND(1))+1
1310 R=R+1
   : IF FNG(R)<>0THEN 1310
   : NEXT F
   : GOTO 1260
1320 IF FNG(R7)=0THEN 1330
   : GOTO 1340
1330 IF FNG(R8)=0THEN 1370
1340 R9=R9+1
1350 IF R9>5775THEN 890
1360 R7=INT(R9/76-.01)+1
   : R8=R9-76*R7+76
   : IF FNG(R8)=INT(R8/4-.2)THEN 1340
   : IF INT(R7/4-.2)=INT(R8/4-.2)THEN 1340
   : IF FNG(R7)=0THEN 1370
   : R9=R9+77-R8
   : GOTO 1350
1370 FOR F=1TO 4
   : FOR G=1TO 4
   : IF R(R7,F)=R(R8,G)THEN 1380
   : GOTO 1400
1380 IF G>=4THEN 1390
   : G9=G
   : G=4
   : NEXT G
   : G=G9
1390 IF F>=4THEN 1420
   : F9=F
   : F=4
   : NEXT F
   : F=F9
   : GOTO 1420
1400 NEXT G
   : NEXT F
1410 GOTO 1340
1420 IF S(R(R7,F))>.5THEN 1340
   : R=R7
   : IF T(R)<10THEN 1430
   : R=R8
   : F=G
1430 FOR H=1TO 4
   : IF S(R(R,H))>.5THEN 1440
   : IF H=FTHEN 1440
   : PRINT HEX(03);"I CLAIM";FNM(R(R,H))
   : S(R(R,H))=5
   : IF H<4THEN 1450
   : GOTO 240
1440 NEXT H
   : GOTO 240
1450 H9=H
   : H=4
   : NEXT H
   : H=H9
   : GOTO 240