home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Glitch Apple Disk Collection
/
2014.glitch.apple.collection.zip
/
indexed
/
FLASHCOM.DSK
/
CUBIC.int
< prev
next >
Wrap
Text File
|
2014-09-09
|
5KB
|
116 lines
2 REM 3-D TIC TAC TOE
COMPILE INTO AN OBJECT FILE
WITH ORIGIN = $2000
3 REM
4 REM BY MIKE LAUMER
6 REM 1832 SCHOOL RD
7 REM CARROLLTON TEXAS 75006
8 REM
9 REM DATA ARRAY AT MEMORY
10 REM LOCATION 'CD' IS A 76 ROW
11 REM BY 4 COLUMN MATRIX OF ALL
12 REM POSSIBLE WINNING ROWS,
13 REM COLUMNS AND DIAGONALS.
14 REM
15 REM DATA ARRAY AT LOCATION 'CD4'
16 REM IS A 64 ROW BY 7 COLUMN
17 REM MATRIX OF THE ROWS THAT
18 REM INTERSECT EACH SQUARE
19 GOTO 30000
20 FOR I=CD TO CD3:IF PEEK (I)#XYZ THEN 30:J=(I-CD)/4
25 B(J)=B(J)+A(XYZ):C(J)=C(J)+1
30 NEXT I:RETURN
130 GOSUB 30500
170 GOSUB 20
340 IF N=64 THEN 730
345 IF A(XYZ)<0 AND WIN=YES THEN 750
350 IF A(XYZ)<0 THEN 760
360 MOVE=0:FOR K=0 TO 75:IF B(K)=4 THEN 740:NEXT K
365 MOVE=365:FOR K=0 TO 75:IF (B(K)=-3) AND (C(K)=3) THEN 1000:NEXT K
370 MOVE=370:FOR K=0 TO 75:IF (B(K)=3) AND (C(K)=3) THEN 2000:NEXT K
380 MOVE=380:B1=-2:B2=-2:C1=2:C2=2:NO=0:YES=1:SW=NO:GOSUB 20000
390 MOVE=390:B1=2:B2=2:C1=2:C2=2:GOSUB 20000
400 MOVE=400:B1=-2:B2=-1:C1=2:C2=1:SW=YES:GOSUB 20000
410 MOVE=410:B1=2:B2=1:C1=2:C2=1:SW=YES:GOSUB 20000
413 MOVE=413:IF N<4 THEN GOSUB 10000
415 MOVE=415:FOR K=75 TO 0 STEP -1:IF (B(K)<-1) AND ((B(K)+C(K))=0) THEN 470:NEXT K
420 MOVE=420:FOR K=75 TO 0 STEP -1:IF (B(K)<0) AND ((B(K)+C(K))=0) THEN 470:NEXT K
425 MOVE=425:FOR K=63 TO 0 STEP -1:IF A(K)=0 THEN 470:NEXT K
430 PRINT "INTERNAL PROGRAM ERROR":END
460 PRINT "GAME ABORTED":END
470 I=K*4+CD:XYZ= PEEK (I):IF A(XYZ)=0 THEN 650
480 I=I+3:XYZ= PEEK (I):IF A(XYZ)=0 THEN 650
485 I=I-1:XYZ= PEEK (I):IF A(XYZ)=0 THEN 650
490 I=I-1:XYZ= PEEK (I):IF A(XYZ)=0 THEN 650
500 NEXT I:PRINT "ERROR 500":END
650 X=XYZ/16+1:Y=((XYZ/4) MOD 4)+1:Z=(XYZ MOD 4)+1
660 A(XYZ)=-1
670 GOTO 170
730 JUMP=820:GOTO 760
740 JUMP=830:WIN=YES:GOSUB 8000:N=N-1:GOTO 760
750 JUMP=840:WIN=YES:GOSUB 8000
760 GOSUB 31000
800 GOSUB 29000:IF JUMP=130 THEN 130
805 GOSUB 28000:GOTO JUMP
810 GOTO JUMP
820 PRINT "<CTRL-G><CTRL-G> * * * TIE GAME * * *":GOTO 9000
830 PRINT "<CTRL-G><CTRL-G> * * * YOU WIN * * *":GOTO 9000
840 PRINT "<CTRL-G><CTRL-G> * * * I WIN * * *":GOTO 9000
1000 GOSUB 27000:A(XYZ)=-1:JUMP=840:WIN=YES:GOTO 170
2000 GOSUB 27000:A(XYZ)=-1:GOTO 170
8000 L=CD+K*4:FOR I=0 TO 3
8010 LOC(I)= PEEK (L+I):NEXT I:RETURN
9000 TEXT :VTAB 22:END
10000 FOR I=0 TO 48 STEP 48
10010 IF A(I)#0 THEN 10030:K=56:POP :GOTO 470
10030 IF A(I+3)#0 THEN 10040:K=59:POP :GOTO 470
10040 IF A(I+12)#0 THEN 10050:K=68:POP :GOTO 470
10050 IF A(I+15)#0 THEN 10060:K=71:POP :GOTO 470
10060 NEXT I:RETURN
20000 FOR I=0 TO 75:IF (B(I)=B1) AND (C(I)=C1) THEN 21000
20050 NEXT I:RETURN
21000 M=CD+I*4:FOR J=M TO M+3:IF A( PEEK (J))=0 THEN 22000
21050 NEXT J:GOTO 20050
22000 PP= PEEK (J):FOR K=0 TO 5:L=CD4+PP*7+K
22010 IF PEEK (L)=255 THEN 21050
22020 IF PEEK (L)=I THEN 22050
22030 IF (B( PEEK (L))#B2) OR (C( PEEK (L))#C2) THEN 22050
22040 XYZ=PP:A(XYZ)=-1:POP :X=(XYZ/16)+1:Y=((XYZ/4) MOD 4)+1:Z=(XYZ MOD 4)+1:GOTO 170
22050 NEXT K:GOTO 21050
26000 GOSUB 28000: POKE 36,CH: POKE 37,CV:RETURN
27000 FOR I=K*4 TO K*4+3:IF A( PEEK (I+CD))=0 THEN 27010:NEXT I
27005 PRINT "ERROR 27005":END
27010 XYZ= PEEK (CD+I):X=(XYZ/16)+1:Y=((XYZ/4) MOD 4)+1:Z=(XYZ MOD 4)+1:RETURN
28000 POKE 32,10: POKE 33,29: POKE 34,0: POKE 35,24:RETURN
29000 GOSUB 26000:PRINT :PRINT "MY MOVE IS ";X;",";Y;",";Z:CH= PEEK (36):CV= PEEK (37):RETURN
30000 I=0:L=0:K=0:M=0:J=0:M=0:XYZ=0:X=0:Y=0:Z=0
30010 CD=7168:CD3=7471:CD4=7568:PRINT :PRINT "<CTRL-D>BLOAD CUBIC DATA 1C00.1FFF"
30030 DIM A(64),B(76),C(76),LOC(4),HIST(64)
30040 DIM MSG$(10),MARK$(3),TRCE(64)
30050 MARK$="O-X":JUMP=130:YES=1:NO=0:WIN=NO
30070 FOR I=0 TO 64:A(I)=0:NEXT I
30080 FOR I=0 TO 76:B(I)=0:C(I)=0:NEXT I
30090 TEXT : POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,24:CALL -936
30100 VTAB 1:TAB 10:PRINT "3-D TIC TAC TOE":VTAB 3:TAB 10:PRINT "BY MIKE LAUMER"
30110 VTAB 5:TAB 1:PRINT "3-D TIC TAC TOE IS PLAYED IN A CUBE":PRINT "MADE UP OF 4 ROWS, 4 COLUMNS AND":PRINT "4 LEVELS OR BOARDS."
30120 PRINT "THE RULES ARE THE SAME AS NORMAL TIC":PRINT "TAC TOE BUT YOU MUST MAKE 4 MOVES"
30130 PRINT "IN A ROW. TO ENTER MOVES TYPE LEVEL":PRINT "NUMBER, ROW NUMBER, AND COLUMN NUMBER."
30140 PRINT :PRINT :INPUT "DO YOU WANT TO MOVE FIRST ",MSG$:IF LEN(MSG$)<1 THEN 30140
30150 CALL -936:GOSUB 28000:CALL -936:CH= PEEK (36):CV= PEEK (37):IF MSG$(1,1)="Y" THEN 130:IF MSG$(1,1)#"N" THEN 30140:MOVE=30150:GOTO 470
30500 GOSUB 26000:MOVE=0
30510 INPUT "YOUR MOVE (L,R,C) ",X,Y,Z
30520 IF (X<1) OR (Y<1) OR (Z<1) OR (X>4) OR (Y>4) OR (Z>4) THEN 30570
30530 XYZ=(X-1)*16+(Y-1)*4+Z-1
30540 IF A(XYZ)#0 THEN 30580
30550 A(XYZ)=1:CH= PEEK (36):CV= PEEK (37):GOSUB 31000:RETURN
30570 PRINT "RANGE IS 1<CTRL-G> THRU 4 !":GOTO 30510
30580 PRINT "SQUARE<CTRL-G> IS OCCUPIED !":GOTO 30510
31000 POKE 32,0: POKE 33,9: POKE 34,0: POKE 35,24:CALL -936
31010 FOR I=0 TO 63:J=A(I)+2:IF (WIN=NO) AND (I=XYZ) THEN POKE 50,127
31020 IF WIN=0 THEN 31070:FOR L=0 TO 3:IF LOC(L)=I THEN POKE 50,127:NEXT L
31070 PRINT MARK$(J,J);: POKE 50,255:PRINT " ";:IF ((I+1) MOD 16)=0 THEN PRINT :IF ((I+1) MOD 4)=0 THEN PRINT :NEXT I
31100 IF MOVE=0 THEN 31110:TRCE(N/2)=MOVE
31110 HIST(N)=XYZ:N=N+1:RETURN
65532 REM COPYRIGHT APRIL 1978
65533 REM BY MIKE LAUMER