home *** CD-ROM | disk | FTP | other *** search
/ AppleDisk Magazine Miscellaneous Programs / AppleDisk_Misc_Programs_1.dsk / LABIRINTO.bas < prev    next >
Encoding:
BASIC Source File  |  1987-01-01  |  9.6 KB  |  158 lines

  1. 10  REM  *******************************
  2. 20  REM  *  LABIRINTO TRIDIMENSIONALE  *
  3. 30  REM  *        PER APPLE II         *
  4. 40  REM  *          (C) 1989           *
  5. 50  REM  *    GRUPPO EDITORIALE JCE    *
  6. 60  REM  *******************************
  7. 70 :
  8. 80  LOMEM: 24576:MM =  PEEK(115) + PEEK(116) *256:KM = MM -55: HIMEM: MM -60
  9. 90 KH =  INT(KM/256):KL = KM -256 *KH: POKE 232,KL: POKE 233,KH: FOR I = KM TO KM +49: READ EE: POKE I,EE: NEXT 
  10. 100  DATA 2,255,37,0,8,0,50,0,88,192,27,45,45,45,62,63,63,55,45,45,45,62,63,63,55,45,45,45,62,63,63,55,45,45,45,4,0,219,45,37,88,168,21,23,45,30,30,30,4,0
  11. 110  GOSUB 1460
  12. 120  GOSUB 970: VTAB 7: HTAB 15: PRINT "IL LABIRINTO": HTAB 15: PRINT "____________"
  13. 130  VTAB 12: HTAB 20: PRINT "BY": PRINT : HTAB 7: PRINT "MATTEO GUAGNINI & APPLEDISK."
  14. 140  VTAB 22: HTAB 6: PRINT "PREMI <RETURN> PER COMINCIARE.": GOSUB 980
  15. 150 :
  16. 160 NI = 7:NJ = 7
  17. 170 IX =  INT((264 -15 *NJ)/2):IY =  INT((145 -15 *NI)/2)
  18. 180  DIM H(NI,NJ),V(NI,NJ),K(NI,NJ),P((NI +1) *(NJ +1),1),RV$(4),M(4)
  19. 190  HOME : HGR : VTAB 22: HTAB 7: PRINT "STO COSTRUENDO IL LABIRINTO...": GOSUB 630
  20. 200  IF CC = 0  THEN  GOSUB 1010
  21. 210  HOME : GOSUB 930: GOSUB 1200
  22. 220  GOSUB 970: VTAB 12: HTAB 6: PRINT "VUOI GIOCARE ANCORA (S/N) ? ";: GET A$: IF A$ = "S"  OR A$ = "s"  THEN  CLEAR :CC = 1: GOTO 160
  23. 230  GOTO 1560
  24. 240 :
  25. 250  HCOLOR= H: FOR I = 0 TO 10  STEP 4: HPLOT 130 -I,99 +I TO 169 +I,99 +I:I = I +I/4: NEXT : HPLOT 130,99 TO 120,109: HPLOT 169,99 TO 179,109: RETURN 
  26. 260  HCOLOR= H: FOR I = 14 TO 50  STEP 4: HPLOT 130 -I,99 +I TO 169 +I,99 +I:I = I +I/4: NEXT : HPLOT 120,109 TO 78,151: HPLOT 179,109 TO 221,151: RETURN 
  27. 270  HCOLOR= H: HPLOT 120,50 TO 179,50: HPLOT 120,108 TO 179,108: RETURN 
  28. 280  HCOLOR= H: HPLOT 102,32 TO 120,50: RETURN 
  29. 290  HCOLOR= H: HPLOT 197,32 TO 179,50: RETURN 
  30. 300  HCOLOR= H: HPLOT 120,50 TO 130,60 TO 130,99: HPLOT 179,50 TO 169,60 TO 169,99: RETURN 
  31. 310  HCOLOR= H: HPLOT 102,50 TO 120,50: HPLOT 102,108 TO 120,108: HPLOT 102,32 TO 102,125: RETURN 
  32. 320  HCOLOR= H: HPLOT 120,50 TO 120,109: RETURN 
  33. 330  HCOLOR= H: HPLOT 197,50 TO 179,50: HPLOT 197,108 TO 179,108: HPLOT 197,32 TO 197,125: RETURN 
  34. 340  HCOLOR= H: HPLOT 179,50 TO 179,109: RETURN 
  35. 350 H = 3: FOR I = 0 TO 8: HCOLOR= H:H = 3 -H: HPLOT 70 +I,I TO 229 -I,I TO 229 -I,159 -I TO 70 +I,159 -I TO 70 +I,I: NEXT 
  36. 360  HPLOT 78,8 TO 102,32: HPLOT 221,8 TO 197,32: RETURN 
  37. 370 H = 0: GOSUB 270: GOSUB 280: GOSUB 290:H = 3: GOSUB 250: GOSUB 300: GOSUB 310: GOSUB 330: GOSUB 320: GOSUB 340: RETURN 
  38. 380 H = 0: GOSUB 270: GOSUB 280: GOSUB 330: GOSUB 340:H = 3: GOSUB 250: GOSUB 300: GOSUB 290: GOSUB 310: GOSUB 320: RETURN 
  39. 390 H = 0: GOSUB 250: GOSUB 280: GOSUB 290: GOSUB 320: GOSUB 340: GOSUB 300:H = 3: GOSUB 270: GOSUB 310: GOSUB 330: RETURN 
  40. 400 H = 0: GOSUB 250: GOSUB 280: GOSUB 330: GOSUB 300: GOSUB 320:H = 3: GOSUB 310: GOSUB 270: GOSUB 340: GOSUB 290: RETURN 
  41. 410 H = 0: GOSUB 270: GOSUB 290: GOSUB 310: GOSUB 320:H = 3: GOSUB 250: GOSUB 300: GOSUB 280: GOSUB 330: GOSUB 340: RETURN 
  42. 420 H = 0: GOSUB 270: GOSUB 330: GOSUB 340: GOSUB 310: GOSUB 320:H = 3: GOSUB 250: GOSUB 300: GOSUB 280: GOSUB 290: RETURN 
  43. 430 H = 0: GOSUB 250: GOSUB 290: GOSUB 310: GOSUB 300: GOSUB 340:H = 3: GOSUB 330: GOSUB 270: GOSUB 320: GOSUB 280: RETURN 
  44. 440 H = 0: GOSUB 250: GOSUB 300: GOSUB 310: GOSUB 330:H = 3: GOSUB 290: GOSUB 280: GOSUB 270: GOSUB 320: GOSUB 340: RETURN 
  45. 450  HCOLOR= 3: GOTO 470
  46. 460  HCOLOR= 0
  47. 470  HPLOT 15 *J +IX,15 *I +14 +IY TO 15 *J +13 +IX,15 *I +14 +IY: RETURN 
  48. 480  HCOLOR= 3: GOTO 500
  49. 490  HCOLOR= 0
  50. 500  HPLOT 15 *J +IX +14,15 *I +IY TO 15 *J +14 +IX,15 *I +13 +IY: RETURN 
  51. 510  HCOLOR= 3: HPLOT IX -1,15 *NI +14 +IY TO IX -1,IY -1 TO 15 *NJ +14 +IX,IY -1 TO 15 *NJ +14 +IX,15 *NI +14 +IY TO IX -1,15 *NI +14 +IY: SCALE= 1
  52. 520  FOR I = 0 TO NI: FOR J = 0 TO NJ: HPLOT 15 *J +14 +IX,15 *I +14 +IY: NEXT : NEXT : RETURN 
  53. 530  HCOLOR= 3: GOTO 570
  54. 540  HCOLOR= 0: GOTO 570
  55. 550  HCOLOR= 3: GOTO 620
  56. 560  HCOLOR= 0: GOTO 620
  57. 570  IF HZ = 1  THEN  ROT= 48
  58. 580  IF HZ = 2  THEN  ROT= 32
  59. 590  IF HZ = 3  THEN  ROT= 0
  60. 600  IF HZ = 4  THEN  ROT= 16
  61. 610  DRAW 1 AT 15 *J +7 +IX,15 *I +7 +IY: RETURN 
  62. 620  DRAW 2 AT 15 *J +7 +IX,15 *I +7 +IY: RETURN 
  63. 630 TI =  INT( RND( PEEK(78)) *(NI -2) +2):TJ =  INT( RND( PEEK(78)) *(NJ -2) +2):HZ =  INT(( PEEK(78) + PEEK(79)) *4 +1): GOSUB 510
  64. 640 I = TI -1:J = TJ: GOSUB 450:H(I,J) = 1:I = TI:J = TJ -1: GOSUB 480:V(I,J) = 1
  65. 650 I = TI:J = TJ: GOSUB 480:V(I,J) = 1: GOSUB 450:H(I,J) = 1:K(I,J) = 1
  66. 660 P = 1:P(P,0) = TI:P(P,1) = TJ
  67. 670  IF TI = 0 GOTO 690
  68. 680  IF K(TI -1,TJ) = 0 GOTO 770
  69. 690  IF TJ = 0 GOTO 710
  70. 700  IF K(TI,TJ -1) = 0 GOTO 770
  71. 710  IF TJ = NJ GOTO 730
  72. 720  IF K(TI,TJ +1) = 0 GOTO 770
  73. 730  IF TI = NI GOTO 750
  74. 740  IF K(TI +1,TJ) = 0 GOTO 770
  75. 750 P = P -1: IF P = 0  THEN  RETURN 
  76. 760 I = TI:J = TJ: GOSUB 560:TI = P(P,0):TJ = P(P,1): GOTO 670
  77. 770 HZ =  INT( RND(HZ) *4 +1)
  78. 780  IF HZ = 1  AND TI = 0 GOTO 770
  79. 790  IF HZ = 2  AND TJ = 0 GOTO 770
  80. 800  IF HZ = 3  AND TJ = NJ GOTO 770
  81. 810  IF HZ = 4  AND TI = NI GOTO 770
  82. 820 UI = TI +(HZ = 4) -(HZ = 1):UJ = TJ +(HZ = 3) -(HZ = 2)
  83. 830  IF K(UI,UJ) = 1 GOTO 770
  84. 840  IF UI = 0 GOTO 860
  85. 850 I = UI -1:J = UJ: GOSUB 450:H(I,J) = 1
  86. 860  IF UJ = 0 GOTO 880
  87. 870 I = UI:J = UJ -1: GOSUB 480:V(I,J) = 1
  88. 880 I = UI:J = UJ: GOSUB 450: GOSUB 480:H(I,J) = 1:V(I,J) = 1
  89. 890  IF HZ <2  OR HZ >3  THEN I = TI -(HZ = 1):J = TJ: GOSUB 460:H(I,J) = 0: GOTO 910
  90. 900 I = TI:J = TJ -(HZ = 2): GOSUB 490:V(I,J) = 0
  91. 910 K(UI,UJ) = 1:I = UI:J = UJ: GOSUB 530
  92. 920 P = P +1:P(P,0) = UI:P(P,1) = UJ:TI = UI:TJ = UJ: GOTO 670
  93. 930 DI =  INT(NI/2):FI = NI -DI:DJ = 0:FJ = NJ -DJ:I = DI:J = DJ:HZ = 3: GOSUB 530:I = FI:J = FJ: GOSUB 550
  94. 940 RV$(1) = "A NORD. ":RV$(2) = "A OVEST. ":RV$(3) = "A EST. ":RV$(4) = "A SUD. "
  95. 950 DS =  ABS(FI -DI) + ABS(FJ -DJ)
  96. 960  CALL 770: GOSUB 1160: CALL  -3086: GOSUB 350:H = 3: GOSUB 260: GOSUB 370: GOSUB 1140: HOME : RETURN 
  97. 970  TEXT : HOME : COLOR= 10: VLIN 0,46 AT 0: VLIN 0,46 AT 39: HLIN 0,39 AT 0: HLIN 0,39 AT 46: RETURN 
  98. 980  POKE 49168,0
  99. 990  IF  PEEK(49152) < >141  THEN 990
  100. 1000  POKE 49168,0: RETURN 
  101. 1010  GOSUB 970: VTAB 6: HTAB 5: PRINT "SIETE NELLA PARTE OVEST DEL LABI-": PRINT : HTAB 3: PRINT "RINTO. LA FRECCIA CHE E' VERSO EST": PRINT : HTAB 3: PRINT "VI RAPPRESENTA.                   "
  102. 1020  VTAB 14: HTAB 8: PRINT "DOVETE RAGGIUNGERE LA CASELLA": PRINT : HTAB 3: PRINT "MARCATA DAL QUADRATO BIANCO: ";: INVERSE : PRINT " ";: NORMAL : PRINT " ."
  103. 1030  VTAB 19: HTAB 5: PRINT "PER MUOVERVI UTILIZZATE I TASTI": PRINT : HTAB 3: PRINT "'<-' '->' 'SPAZIO' e '*'.": GOSUB 980
  104. 1040  GOSUB 970: VTAB 5: HTAB 5: PRINT "- PER ESPLORARE IL LABIRINTO:  -": HTAB 5: PRINT "--------------------------------": PRINT 
  105. 1050  VTAB 10: HTAB 4: PRINT "LO SPAZIO FA AVANZARE.": HTAB 30: PRINT "'SPAZIO'": HTAB 4: PRINT " <-  GIRA A SINISTRA.": HTAB 29: PRINT " <- ";: FLASH : PRINT "+";: NORMAL : PRINT " ->"
  106. 1060  HTAB 4: PRINT " ->  GIRA A DESTRA. ": HTAB 32: PRINT "'*'": HTAB 5: PRINT " *  GIRA INDIETRO.": PRINT : HTAB 4: PRINT "  +  VEDE DALL'ALTO."
  107. 1070  PRINT : PRINT : HTAB 4: PRINT " <ESC> PERMETTE L'ABBANDONO.": GOSUB 980: RETURN 
  108. 1080  GOSUB 1180: HOME : VTAB 21: HTAB 5: PRINT "SEI A "DS" CASELL";: IF DS >1  THEN  PRINT "E DALL'USCITA.": GOTO 1100
  109. 1090  PRINT "A DALL'USCITA!"
  110. 1100  INVERSE : PRINT "   SEI RIVOLTO  ";RV$;" ";: NORMAL : PRINT  SPC( 16 - LEN(RV$));"SPAZI";
  111. 1110  PRINT  SPC( 17)"    DOVE VAI?     <-+->": PRINT " <ESC> PER FINIRE.                 *";: VTAB 23: HTAB 36: POKE 49168,0: GET R$: RETURN 
  112. 1120  POKE 49236,0: POKE 49235,0: POKE 49232,0: POKE 49239,0
  113. 1130  POKE 230,64: RETURN 
  114. 1140  POKE 49237,0: POKE 49234,0: POKE 49232,0: POKE 49239,0
  115. 1150  GOTO 1130
  116. 1160  POKE 49237,0: POKE 49234,0: POKE 49232,0: POKE 49239,0
  117. 1170  POKE 230,32: RETURN 
  118. 1180  POKE 49236,0: POKE 49235,0: POKE 49232,0: POKE 49239,0
  119. 1190  GOTO 1170
  120. 1200 TI = DI:TJ = DJ
  121. 1210 RI = HZ:RM = 5 -RI:RJ = 2 *(RI = 1) +4 *(RI = 2) +3 *(RI = 4) +(RI = 3):RK = 5 -RJ
  122. 1220  IF TI = 0  THEN M(1) = 1: GOTO 1240
  123. 1230 M(1) = H(TI -1,TJ)
  124. 1240  IF TJ = 0  THEN M(2) = 1: GOTO 1260
  125. 1250 M(2) = V(TI,TJ -1)
  126. 1260 M(3) = V(TI,TJ):M(4) = H(TI,TJ)
  127. 1270 NP = 4 *M(RJ) +2 *M(RI) +M(RK) +1
  128. 1280  GOSUB 1180: ON NP GOSUB 370,380,390,400,410,420,430,440
  129. 1290 RV$ = RV$(RI): GOSUB 1080
  130. 1300  IF R$ =  CHR$(27)  THEN  RETURN 
  131. 1310  IF R$ < >"+" GOTO 1340
  132. 1320 RV = HZ +1: IF RV >4  THEN RV = 1
  133. 1330 ZH = HZ:UI = TI:UJ = TJ: GOSUB 1140:WW = 10: GOTO 1400
  134. 1340  IF   NOT (R$ = " "  OR R$ =  CHR$(8)  OR R$ =  CHR$(21)  OR R$ =  CHR$(42))  THEN  GOSUB 1440: GOTO 1290
  135. 1350  IF R$ = " "  AND M(RI)  THEN  GOSUB 1440: GOTO 1290
  136. 1360  IF R$ =  CHR$(8)  AND M(RJ)  THEN  GOSUB 1440: GOTO 1290
  137. 1370  IF R$ =  CHR$(21)  AND M(RK)  THEN  GOSUB 1440: GOTO 1290
  138. 1380  IF R$ =  CHR$(42)  AND M(RM)  THEN  GOSUB 1440: GOTO 1290
  139. 1390  GOSUB 1120:RV = RI *(R$ = " ") +RJ *(R$ =  CHR$(8)) +RK *(R$ =  CHR$(21)) +RM *(R$ =  CHR$(42)):ZH = HZ:UI = TI +(RV = 4) -(RV = 1):UJ = TJ +(RV = 3) -(RV = 2):WW = 0
  140. 1400  FOR W = 1 TO WW:I = TI:J = TJ:HZ = ZH: GOSUB 530: GOSUB 540:I = UI:J = UJ:HZ = RV: GOSUB 540: GOSUB 530: NEXT 
  141. 1410 HZ = RV:TI = UI:TJ = UJ:DS =  ABS(FI -TI) + ABS(FJ -TJ): IF TI < >FI  OR TJ < >FJ GOTO 1210
  142. 1420  GOSUB 1140
  143. 1430 I = TI:J = TJ: FOR HZ = 1 TO 5: GOSUB 540: PRINT  CHR$(7): NEXT : GOSUB 970: VTAB 12: HTAB 9: PRINT "COMPLIMENTI! SEI FUORI!!!!": VTAB 22: HTAB 6: PRINT "PREMI <RETURN> PER CONTINUARE.": GOSUB 980: RETURN 
  144. 1440  HOME : VTAB 22: HTAB 18: FLASH : PRINT  CHR$(7);"SBAGLIATO!": NORMAL : FOR W = 1 TO 800: NEXT : RETURN 
  145. 1450 :
  146. 1460  REM  == HIRES.MOVE ==  
  147. 1470 :
  148. 1480  FOR I = 0 TO 45: READ J: POKE 770 +I,J: NEXT 
  149. 1490  DATA 169,32,133,251,169,64,133,253,208,8
  150. 1500  DATA 169,64,133,251,169,32,133,253,169,0
  151. 1510  DATA 133,250,133,252,168,169,32,133,249,177
  152. 1520  DATA 250,145,252,200,208,249,230,251,230,253
  153. 1530  DATA 198,249,208,241,96,0
  154. 1540  RETURN 
  155. 1550 :
  156. 1560  TEXT : HOME : PRINT "FINE DEL GIOCO."
  157. 1570  HOME : END 
  158. 1580  END