Listing of file='3DTTT' on disk='vmedia/gamesall.wvd.zip'
# Sector 3, program filename = '3DTTT' 0010 REM 3 DIMENSIONAL TIC TAC TOE MIN.C+OP2,5 12K M BLOMME 02/02/76 DISK VER SION 0020 COM L$(4,46)2,X$(4,46)1,X1$(17,4)1,A$1,J$46,M7$(16)2,L1$(19,16)2,T2$(19,1 6)1,J1$46,N$(2)8,K$(2,3),M(3),M$(2),T1$(22)4,P$(1)4,P1$(4)1,T3$(17),L3$(7 6)2,T4$(1),O9$2,T5$(4,4)1,T6$(16)1,L2$(76)2 : COM P1(4),P2(4),T$(19,16)1 : SELECT #1005 0030 IF L$(1,1)<>HEX(20)THEN 100 : DATA LOAD DC OPEN T"MOVEDATA" : DATA LOAD DC L$(),L1$(),M7$() 0040 DEFFN'14 : ON INT(RND(1)*6+1)GOTO 100,50,60,70,80,90,100 0050 GOSUB '55(1,257,129) : GOTO 100 0060 GOSUB '55(129,257,1) : GOTO 100 0070 GOSUB '55(129,1,257) : GOTO 100 0080 GOSUB '55(257,1,129) : GOTO 100 0090 GOSUB '55(257,129,1) : GOTO 100 0100 J$="*****1**********2**********3**********4*****" : STR(J$,45,2)=HEX(0A0D) : INIT(09)J1$ : M$(1)="X" : M$(2)="O" : O9$=HEX(0000) : FOR A=1TO 16 : FOR B=1TO 4 : BIN(A$)=A-1 : ROTATE(A$,4) : BIN(P1$(1))=B : ADD(A$,P1$(1)) : X1$(A,B)=A$ : NEXT B : NEXT A : MAT MOVE X1$(),L1$(1,1)TO T2$(1,1) 0110 X1$(1,1)=" " : MAT COPY X1$()TO X1$()<2,67> : A1,B1=1 : SELECT P : X$(1,1)=HEX(00) : MAT COPY X$()TO X$()<2,183> : INIT(00)L3$(),L2$() : INIT(20)T$() : X1$(17,1)=" " : X1$(17,2)="#" : X1$(17,3)=HEX(0A) : X1$(17,4)=HEX(0D) 0120 PRINT HEX(03) : GOSUB '50 : FOR A=1TO 8 : PRINT ,,HEX(7F) : NEXT A : PRINT ,,HEX(7F01) : PRINT J1$;"PLAYER,2200 (1)" : PRINT J1$;"2200,PLAYER (2)" : PRINT J1$;"PLAYER,PLAYER (3)" : PRINT J1$; : INPUT P : ON PGOTO 130,140,150 : GOTO 120 0130 N$(1)="PLAYER" : N$(2)="2200" : PRINT : PRINT : RESTORE : GOTO 160 0140 N$(2)="PLAYER" : N$(1)="2200" : PRINT : PRINT : RESTORE 40 : GOTO 160 0150 PRINT J1$; : INPUT "1ST NAME",N$(1) : PRINT J1$; : INPUT "2ND NAME",N$(2) : RESTORE 0160 FOR A=1TO 22 : READ T1$(A) : NEXT A : FOR A=1TO 17 : READ T3$(A) : NEXT A : PRINT ,N$(1) : PRINT HEX(0C);J1$;N$(2) : ON PGOTO 170,380,400 0170 GOSUB '32(A1,B1,P) : IF P=1THEN 180 : B1=B1+7 : IF B1<29THEN 180 : B1=1 : A1=A1+1 0180 MAT MOVE X1$(),L1$(1,1)TO T$(1,1) : GOSUB '35(1,22) : IF D0=0THEN 380 0190 ON T1GOTO 720,730,200,200,200,200,200,200,200,200,220,220,220,220,220,220 ,300,300,300,300,300,300 : STOP "T1>22" 0200 P1=VAL(STR(L2$(1),1,1))*256+VAL(STR(L2$(1),2,1)) : MAT COPY T$()<P1,4>TO P$() : P1=P1+POS(P$(1)=20)-1 : MAT COPY T2$()<P1,1>TO P1$() : GOSUB '36(P1$(1)) : IF T1>6THEN 210 : ON PGOTO 760,740 0210 IF P=2THEN 170 : B1=B1+7 : IF B1<29THEN 170 : B1=1 : A1=A1+1 : GOTO 170 0220 T4=T1 : MAT COPY L2$()<1,152>TO L3$()<1,152> 0230 P1=VAL(STR(L2$(1),1,1))*256+VAL(STR(L2$(1),2,1)) : MAT COPY T$()<P1,4>TO P$() : P3=POS(P$(1)=20) : P1=P1+P3-1 : MAT COPY T2$()<P1,1>TO P1$()<1,1> : P2=P1+POS(STR(P$(1),P3+1,4-P3)=20) : MAT COPY T2$()<P2,1>TO P1$()<2,1> : GOTO 250 0240 GOSUB '35(T1,16) : IF D0=0THEN 360 : MAT COPY -L2$()<1,150>TO -L2$()<3,150> 0250 FOR A=2TO 76 : P1=VAL(STR(L2$(A),1,1))*256+VAL(STR(L2$(A),2,1)) : IF P1<>0THEN 270 : A=76 : NEXT A 0260 IF T1=16THEN 360 : T1=T1+1 : GOTO 240 0270 MAT COPY T$()<P1,4>TO P$() : P3=POS(P$(1)=20) : P1=P1+P3-1 : MAT COPY T2$()<P1,1>TO P1$()<3,1> : P2=P1+POS(STR(P$(1),P3+1,4-P3)=20) : MAT COPY T2$()<P2,1>TO P1$()<4,1> : IF P1$(1)=P1$(3)THEN 280 : IF P1$(2)=P1$(4)THEN 290 : IF P1$(1)=P1$(4)THEN 280 : IF P1$(2)=P1$(3)THEN 290 : NEXT A : GOTO 260 0280 A=76 : NEXT A : GOSUB '36(P1$(1)) : GOTO 210 0290 GOSUB '36(P1$(2)) : GOTO 210 0300 T4=T1 : MAT COPY L2$()<1,152>TO L3$()<1,152> 0310 P1=VAL(STR(L2$(1),1,1))*256+VAL(STR(L2$(1),2,1)) : MAT COPY T$()<P1,4>TO P$() : P3=POS(P$(1)=20) : P1=P1+P3-1 : MAT COPY T2$()<P1,1>TO P1$()<1,1> : P2=P1+POS(STR(P$(1),P3+1,4-P3)=20) : MAT COPY T2$()<P2,1>TO P1$()<2,1> : GOTO 330 0320 GOSUB '35(T1,22) : IF D0=0THEN 360 : MAT COPY -L2$()<1,150>TO -L2$()<3,150> 0330 FOR A=2TO 76 : P1=VAL(STR(L2$(A),1,1))*256+VAL(STR(L2$(A),2,1)) : IF P1<>0THEN 350 : A=76 : NEXT A 0340 IF T1=22THEN 360 : T1=T1+1 : GOTO 320 0350 MAT COPY T$()<P1,4>TO P$() : P3=POS(P$(1)=20) : P1=P1+P3-1 : MAT COPY T2$()<P1,1>TO P1$()<3,1> : P2=P1+POS(STR(P$(1),P3+1,4-P3)=20) : MAT COPY T2$()<P2,1>TO P1$()<4,1> : IF P1$(1)=P1$(3)THEN 280 : IF P1$(2)=P1$(4)THEN 290 : IF P1$(1)=P1$(4)THEN 280 : IF P1$(2)=P1$(3)THEN 290 : NEXT A : GOTO 340 0360 IF L3$(2)<>HEX(0000)THEN 370 : T4=T4+1 : IF T4=23THEN 380 : GOSUB '35(T4,22) : IF D0=0THEN 380 : GOTO 190 0370 T1=T4 : MAT COPY L3$()<3,150>TO L2$()<1,150> : MAT COPY L2$()TO L3$() : ON T4-10GOTO 230,230,230,230,230,230,310,310,310,310,310,310 : STOP "T4>22" 0380 INIT(00)L3$() : GOSUB '38 : IF D0=1THEN 390 : GOSUB '37 : IF D0=1THEN 390 : GOSUB '33(A1,B1,3-P) 0390 IF P=2THEN 170 : B1=B1+7 : IF B1<29THEN 170 : B1=1 : A1=A1+1 : GOTO 170 0400 GOSUB '32(A1,B1,1) : MAT MOVE X1$(),L1$(1,1)TO T$(1,1) : MAT SEARCHT$(),=T1$(1)TO L2$()STEP 4 : IF L2$(1)<>HEX(0000)THEN 740 : GOSUB '32(A1,B1,2) : MAT MOVE X1$(),L1$(1,1)TO T$(1,1) : MAT SEARCHT$(),=T1$(2)TO L2$()STEP 4 : IF L2$(1)<>HEX(0000)THEN 760 : B1=B1+7 : IF B1<29THEN 400 : B1=1 : A1=A1+1 : GOTO 400 0410 DEFFN'50 : MAT MOVE X1$(),L$(1,1)TO X$(1,1) : $GIO#1(410141204120410A410DA200,B$)J$ : $GIO#1(A200,B$)X$() : $GIO#1(A200,B$)J$ : RETURN 0420 DEFFN'32(A,B,C) 0430 PRINT HEX(010A0A0A0A0A0A0A); : FOR D=1TO A : PRINT : NEXT D : PRINT STR(J1$,1,B); : IF C=1THEN 440 : PRINT STR(J1$,1,33); 0440 FOR D=1TO 3 0450 KEYIN K$(C,D),460,450 : GOTO 450 0460 IF K$(C,D)<"1"THEN 450 : IF K$(C,D)>"4"THEN 450 : CONVERT K$(C,D)TO M(D) : PRINT K$(C,D);","; : NEXT D : IF X1$((M(1)-1)*4+M(3),M(2))<>" "THEN 430 : X1$((M(1)-1)*4+M(3),M(2))=M$(C) : GOSUB '50 : PRINT HEX(010A0A0A0A0A0A0A);"Y OR N?"; 0470 KEYIN A$,480,470 : GOTO 470 0480 PRINT : IF A$<>"N"THEN 490 : X1$((M(1)-1)*4+M(3),M(2))=" " : GOSUB '50 : GOTO 430 0490 IF P=3THEN 500 : PRINT HEX(0C);"I'M THINKING";HEX(0C) : RETURN 0500 PRINT HEX(0C);TAB(10);HEX(0C) : RETURN 0510 DEFFN'33(A,B,C) : PRINT HEX(010A0A0A0A0A0A0A2020202020202020202020200D); : FOR D=1TO A : PRINT : NEXT D : PRINT STR(J1$,1,B); : IF C=1THEN 520 : PRINT STR(J1$,1,33); 0520 FOR D=1TO 3 : M(D)=INT(RND(1)*4)+1 : NEXT D : IF X1$((M(1)-1)*4+M(3),M(2))<>" "THEN 520 : X1$((M(1)-1)*4+M(3),M(2))=M$(C) : FOR D=1TO 3 : CONVERT M(D)TO K$(C,D),(#) : PRINT K$(C,D);","; : NEXT D : GOSUB '50 : RETURN 0530 DEFFN'34(A,B,C,P2,P3) : PRINT HEX(010A0A0A0A0A0A0A2020202020202020202020200D); : FOR D=1TO A : PRINT : NEXT D : PRINT STR(J1$,1,B); : IF C=1THEN 540 : PRINT STR(J1$,1,33); 0540 M(1)=INT((P2-1)/4)+1 : M(3)=P2-(M(1)-1)*4 : M(2)=P3 : FOR D=1TO 3 : CONVERT M(D)TO K$(C,D),(#) : PRINT K$(C,D);","; : NEXT D : GOSUB '50 : RETURN 0550 DEFFN'35(T2,T3) : FOR T=T2TO T3 : MAT SEARCHT$(),=STR(T1$(T),1,4)TO L2$()STEP 4 : IF L2$(1)<>HEX(0000)THEN 560 : NEXT T : D0=0 : RETURN 0560 T1=T : T=T3 : NEXT T : D0=1 : RETURN 0570 DEFFN'36(P1$(1)) : A$=P1$(1) : ROTATE(P1$(1),4) : AND (P1$(1),0F) : P2=VAL(P1$(1))+1 : AND (A$,0F) : P3=VAL(A$) : X1$(P2,P3)=M$(3-P) : GOSUB '34(A1,B1,3-P,P2,P3) : RETURN 0580 DEFFN'37 : FOR T=1TO 17 : MAT SEARCHT$(),=STR(T3$(T),1,16)TO L2$()STEP 16 : IF L2$(1)<>HEX(0000)THEN 590 : NEXT T : D0=0 : RETURN 0590 IF T=17THEN 610 : T4$(1)=HEX(20202020200000202000002020200000) : XOR (T4$(1),T3$(T)) : P1=VAL(STR(L2$(1),1,1))*256+VAL(STR(L2$(1),2,1))+POS(T4$(1)=20)-1 0600 MAT COPY T2$()<P1,1>TO P1$() : GOSUB '36(P1$(1)) : D0=1 : RETURN 0610 ON INT(RND(1)*4+1)GOTO 620,630,640,650 0620 P1=VAL(STR(L2$(1),1,1))*256+VAL(STR(L2$(1),2,1))+5 : GOTO 600 0630 P1=VAL(STR(L2$(1),1,1))*256+VAL(STR(L2$(1),2,1))+6 : GOTO 600 0640 P1=VAL(STR(L2$(1),1,1))*256+VAL(STR(L2$(1),2,1))+9 : GOTO 600 0650 P1=VAL(STR(L2$(1),1,1))*256+VAL(STR(L2$(1),2,1))+10 : GOTO 600 0660 DEFFN'38 : INIT(FF)L2$() : FOR A=1TO 273STEP 16 : MAT SEARCHT$()<A,16>,=M$(P)TO L2$() : MAT SEARCHL2$(),=O9$TO L3$()STEP 2 : Z1=(VAL(STR(L3$(1),2,1))-1)/2 : MAT SEARCHT$()<A,16>,=M$(3-P)TO L2$() : MAT SEARCHL2$(),=O9$TO L3$()STEP 2 : Z2=(VAL(STR(L3$(1),2,1))-1)/2 : IF Z1-2>Z2THEN 680 0670 NEXT A : D0=0 : RETURN 0680 MAT COPY T$()<A,16>TO T5$() : MAT MOVE T5$(),M7$(1)TO T6$(1) : MAT COPY T6$()TO T4$() : P1=POS(T4$(1)=20) : IF P1=0THEN 670 : IF P1=16THEN 700 : IF RND(1)>.5THEN 700 0690 P2=POS(STR(T4$(1),P1+1,16-P1)=20) : IF INT((P1+P2-1)/4)<>INT((P1-1)/4)THEN 700 : P1=P1+P2 : IF P1=16THEN 700 : IF RND(1)<.5THEN 690 0700 MAT COPY T2$()<A,16>TO T5$() : MAT MOVE T5$(),M7$(1)TO T6$(1) : MAT COPY T6$()<P1,1>TO P1$() : A=273 : NEXT A : PRINT HEX(0133) : GOSUB '36(P1$(1)) : D0=1 : RETURN 0710 DEFFN'51(P1$(1)) : A$=P1$(1) : ROTATE(P1$(1),4) : AND (P1$(1),0F) : P1(A)=VAL(P1$(1))+1 : AND (A$,0F) : P2(A)=VAL(A$) : RETURN 0720 ON PGOTO 740,760 0730 ON PGOTO 760,740 0740 A=VAL(STR(L2$(1),1,1))*256+VAL(STR(L2$(1),2,1)) : MAT COPY T2$()<A,4>TO P1$() : FOR A=1TO 4 : GOSUB '51(P1$(A)) : NEXT A 0750 SELECT P1 : PRINT HEX(01);"**** ";N$(1);" WON ****" : FOR A=1TO 4 : X1$(P1(A),P2(A))=" " : NEXT A : GOSUB '50 : PRINT HEX(01);" " : FOR A=1TO 4 : X1$(P1(A),P2(A))="X" : NEXT A : GOSUB '50 : GOTO 750 0760 A=VAL(STR(L2$(1),1,1))*256+VAL(STR(L2$(1),2,1)) : MAT COPY T2$()<A,4>TO P1$() : FOR A=1TO 4 : GOSUB '51(P1$(A)) : NEXT A 0770 SELECT P1 : PRINT HEX(01);"**** ";N$(2);" WON ****" : FOR A=1TO 4 : X1$(P1(A),P2(A))=" " : NEXT A : GOSUB '50 : PRINT HEX(01);" " : FOR A=1TO 4 : X1$(P1(A),P2(A))="O" : NEXT A : GOSUB '50 : GOTO 770 0780 DEFFN'55(A,B,C) : IF A=1THEN 800 : MAT COPY L1$()<1,128>TO L2$() : MAT COPY L1$()<A,128>TO L1$()<1,128> 0800 IF B=129THEN 820 : IF B=1THEN 810 : MAT COPY L1$()<129,128>TO L3$() : MAT COPY L1$()<257,128>TO L1$()<129,128> : GOTO 820 0810 MAT COPY L1$()<129,128>TO L3$() : MAT COPY L2$()<1,128>TO L1$()<129,128> 0820 IF C=257THEN 840 : IF C=129THEN 830 : MAT COPY L2$()<1,128>TO L1$()<257,128> : GOTO 840 0830 MAT COPY L3$()<1,128>TO L1$()<257,128> 0840 RETURN 0850 DATA "XXXX","OOOO","OOO ","OO O","O OO"," OOO","XXX ","XX X","X XX"," XXX ","OO ","O O ","O O"," OO "," O O"," OO","XX ","X X ","X X"," XX "," X X"," XX" 0860 DATA " X OO OO O "," OO OO "," OO O "," OO O "," O OO " 0870 DATA " O OO "," OO "," O O "," O O "," O O "," O O "," OO "," O "," O " : DATA " O "," O "," " 0880 DATA "OOOO","XXXX","XXX ","XX X","X XX"," XXX","OOO ","OO O","O OO"," OOO ","XX ","X X ","X X"," XX "," X X"," XX","OO ","O O ","O O"," OO "," O O"," OO" 0890 DATA " O XX XX X "," XX XX "," XX X "," XX X "," X XX " 0900 DATA " X XX "," XX "," X X "," X X "," X X "," X X "," XX "," X "," X " : DATA " X "," X "," "