home *** CD-ROM | disk | FTP | other *** search
/ The Glitch Apple Disk Collection / 2014.glitch.apple.collection.zip / indexed / FLASHCOM.DSK / CUBIC.int < prev    next >
Text File  |  2014-09-09  |  5KB  |  116 lines

  1. 2 REM 3-D TIC TAC TOE
  2.               COMPILE INTO AN OBJECT FILE
  3.              WITH ORIGIN = $2000
  4. 3 REM 
  5. 4 REM BY MIKE LAUMER
  6. 6 REM 1832 SCHOOL RD
  7. 7 REM CARROLLTON TEXAS 75006
  8. 8 REM 
  9. 9 REM DATA ARRAY AT MEMORY
  10. 10 REM LOCATION 'CD' IS A 76 ROW
  11. 11 REM BY 4 COLUMN MATRIX OF ALL
  12. 12 REM POSSIBLE WINNING ROWS,
  13. 13 REM COLUMNS AND DIAGONALS.
  14. 14 REM 
  15. 15 REM DATA ARRAY AT LOCATION 'CD4'
  16. 16 REM IS A 64 ROW BY 7 COLUMN
  17. 17 REM MATRIX OF THE ROWS THAT
  18. 18 REM INTERSECT EACH SQUARE
  19. 19 GOTO 30000
  20. 20 FOR I=CD TO CD3:IF  PEEK (I)#XYZ THEN 30:J=(I-CD)/4
  21. 25 B(J)=B(J)+A(XYZ):C(J)=C(J)+1
  22. 30 NEXT I:RETURN 
  23. 130 GOSUB 30500
  24. 170 GOSUB 20
  25. 340 IF N=64 THEN 730
  26. 345 IF A(XYZ)<0 AND WIN=YES THEN 750
  27. 350 IF A(XYZ)<0 THEN 760
  28. 360 MOVE=0:FOR K=0 TO 75:IF B(K)=4 THEN 740:NEXT K
  29. 365 MOVE=365:FOR K=0 TO 75:IF (B(K)=-3) AND (C(K)=3) THEN 1000:NEXT K
  30. 370 MOVE=370:FOR K=0 TO 75:IF (B(K)=3) AND (C(K)=3) THEN 2000:NEXT K
  31. 380 MOVE=380:B1=-2:B2=-2:C1=2:C2=2:NO=0:YES=1:SW=NO:GOSUB 20000
  32. 390 MOVE=390:B1=2:B2=2:C1=2:C2=2:GOSUB 20000
  33. 400 MOVE=400:B1=-2:B2=-1:C1=2:C2=1:SW=YES:GOSUB 20000
  34. 410 MOVE=410:B1=2:B2=1:C1=2:C2=1:SW=YES:GOSUB 20000
  35. 413 MOVE=413:IF N<4 THEN GOSUB 10000
  36. 415 MOVE=415:FOR K=75 TO 0 STEP -1:IF (B(K)<-1) AND ((B(K)+C(K))=0) THEN 470:NEXT K
  37. 420 MOVE=420:FOR K=75 TO 0 STEP -1:IF (B(K)<0) AND ((B(K)+C(K))=0) THEN 470:NEXT K
  38. 425 MOVE=425:FOR K=63 TO 0 STEP -1:IF A(K)=0 THEN 470:NEXT K
  39. 430 PRINT "INTERNAL PROGRAM ERROR":END 
  40. 460 PRINT "GAME ABORTED":END 
  41. 470 I=K*4+CD:XYZ= PEEK (I):IF A(XYZ)=0 THEN 650
  42. 480 I=I+3:XYZ= PEEK (I):IF A(XYZ)=0 THEN 650
  43. 485 I=I-1:XYZ= PEEK (I):IF A(XYZ)=0 THEN 650
  44. 490 I=I-1:XYZ= PEEK (I):IF A(XYZ)=0 THEN 650
  45. 500 NEXT I:PRINT "ERROR 500":END 
  46. 650 X=XYZ/16+1:Y=((XYZ/4) MOD 4)+1:Z=(XYZ MOD 4)+1
  47. 660 A(XYZ)=-1
  48. 670 GOTO 170
  49. 730 JUMP=820:GOTO 760
  50. 740 JUMP=830:WIN=YES:GOSUB 8000:N=N-1:GOTO 760
  51. 750 JUMP=840:WIN=YES:GOSUB 8000
  52. 760 GOSUB 31000
  53. 800 GOSUB 29000:IF JUMP=130 THEN 130
  54. 805 GOSUB 28000:GOTO JUMP
  55. 810 GOTO JUMP
  56. 820 PRINT "<CTRL-G><CTRL-G> * * *  TIE  GAME  * * *":GOTO 9000
  57. 830 PRINT "<CTRL-G><CTRL-G> * * *  YOU  WIN   * * *":GOTO 9000
  58. 840 PRINT "<CTRL-G><CTRL-G> * * *   I   WIN   * * *":GOTO 9000
  59. 1000 GOSUB 27000:A(XYZ)=-1:JUMP=840:WIN=YES:GOTO 170
  60. 2000 GOSUB 27000:A(XYZ)=-1:GOTO 170
  61. 8000 L=CD+K*4:FOR I=0 TO 3
  62. 8010 LOC(I)= PEEK (L+I):NEXT I:RETURN 
  63. 9000 TEXT :VTAB 22:END 
  64. 10000 FOR I=0 TO 48 STEP 48
  65. 10010 IF A(I)#0 THEN 10030:K=56:POP :GOTO 470
  66. 10030 IF A(I+3)#0 THEN 10040:K=59:POP :GOTO 470
  67. 10040 IF A(I+12)#0 THEN 10050:K=68:POP :GOTO 470
  68. 10050 IF A(I+15)#0 THEN 10060:K=71:POP :GOTO 470
  69. 10060 NEXT I:RETURN 
  70. 20000 FOR I=0 TO 75:IF (B(I)=B1) AND (C(I)=C1) THEN 21000
  71. 20050 NEXT I:RETURN 
  72. 21000 M=CD+I*4:FOR J=M TO M+3:IF A( PEEK (J))=0 THEN 22000
  73. 21050 NEXT J:GOTO 20050
  74. 22000 PP= PEEK (J):FOR K=0 TO 5:L=CD4+PP*7+K
  75. 22010 IF  PEEK (L)=255 THEN 21050
  76. 22020 IF  PEEK (L)=I THEN 22050
  77. 22030 IF (B( PEEK (L))#B2) OR (C( PEEK (L))#C2) THEN 22050
  78. 22040 XYZ=PP:A(XYZ)=-1:POP :X=(XYZ/16)+1:Y=((XYZ/4) MOD 4)+1:Z=(XYZ MOD 4)+1:GOTO 170
  79. 22050 NEXT K:GOTO 21050
  80. 26000 GOSUB 28000: POKE 36,CH: POKE 37,CV:RETURN 
  81. 27000 FOR I=K*4 TO K*4+3:IF A( PEEK (I+CD))=0 THEN 27010:NEXT I
  82. 27005 PRINT "ERROR 27005":END 
  83. 27010 XYZ= PEEK (CD+I):X=(XYZ/16)+1:Y=((XYZ/4) MOD 4)+1:Z=(XYZ MOD 4)+1:RETURN 
  84. 28000  POKE 32,10: POKE 33,29: POKE 34,0: POKE 35,24:RETURN 
  85. 29000 GOSUB 26000:PRINT :PRINT "MY MOVE IS ";X;",";Y;",";Z:CH= PEEK (36):CV= PEEK (37):RETURN 
  86. 30000 I=0:L=0:K=0:M=0:J=0:M=0:XYZ=0:X=0:Y=0:Z=0
  87. 30010 CD=7168:CD3=7471:CD4=7568:PRINT :PRINT "<CTRL-D>BLOAD CUBIC DATA 1C00.1FFF"
  88. 30030 DIM A(64),B(76),C(76),LOC(4),HIST(64)
  89. 30040 DIM MSG$(10),MARK$(3),TRCE(64)
  90. 30050 MARK$="O-X":JUMP=130:YES=1:NO=0:WIN=NO
  91. 30070 FOR I=0 TO 64:A(I)=0:NEXT I
  92. 30080 FOR I=0 TO 76:B(I)=0:C(I)=0:NEXT I
  93. 30090 TEXT : POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,24:CALL -936
  94. 30100 VTAB 1:TAB 10:PRINT "3-D TIC TAC TOE":VTAB 3:TAB 10:PRINT "BY MIKE LAUMER"
  95. 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."
  96. 30120 PRINT "THE RULES ARE THE SAME AS NORMAL TIC":PRINT "TAC TOE BUT YOU MUST MAKE 4 MOVES"
  97. 30130 PRINT "IN A ROW. TO ENTER MOVES TYPE LEVEL":PRINT "NUMBER, ROW NUMBER, AND COLUMN NUMBER."
  98. 30140 PRINT :PRINT :INPUT "DO YOU WANT TO MOVE FIRST ",MSG$:IF  LEN(MSG$)<1 THEN 30140
  99. 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
  100. 30500 GOSUB 26000:MOVE=0
  101. 30510 INPUT "YOUR MOVE (L,R,C) ",X,Y,Z
  102. 30520 IF (X<1) OR (Y<1) OR (Z<1) OR (X>4) OR (Y>4) OR (Z>4) THEN 30570
  103. 30530 XYZ=(X-1)*16+(Y-1)*4+Z-1
  104. 30540 IF A(XYZ)#0 THEN 30580
  105. 30550 A(XYZ)=1:CH= PEEK (36):CV= PEEK (37):GOSUB 31000:RETURN 
  106. 30570 PRINT "RANGE IS 1<CTRL-G> THRU 4 !":GOTO 30510
  107. 30580 PRINT "SQUARE<CTRL-G> IS OCCUPIED !":GOTO 30510
  108. 31000  POKE 32,0: POKE 33,9: POKE 34,0: POKE 35,24:CALL -936
  109. 31010 FOR I=0 TO 63:J=A(I)+2:IF (WIN=NO) AND (I=XYZ) THEN  POKE 50,127
  110. 31020 IF WIN=0 THEN 31070:FOR L=0 TO 3:IF LOC(L)=I THEN  POKE 50,127:NEXT L
  111. 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
  112. 31100 IF MOVE=0 THEN 31110:TRCE(N/2)=MOVE
  113. 31110 HIST(N)=XYZ:N=N+1:RETURN 
  114. 65532 REM COPYRIGHT APRIL 1978
  115. 65533 REM BY MIKE LAUMER
  116.