Listing of file='3DTTT' on disk='vmedia/games-droz01.wvd.zip'
# Sector 457, 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(400140204020400A400DA200,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 "," "