home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 058.lha / Pyramid (.txt) < prev    next >
Encoding:
AmigaBASIC Source Code  |  1986-11-20  |  7.1 KB  |  299 lines

  1. setup:
  2. CLEAR ,25000
  3. CLEAR ,65536
  4. SCREEN 1,320,320,2,1
  5. WINDOW 1,"",(0,0)-(311,25),16,1
  6. WINDOW 2,"",(0,0)-(311,185),16,1
  7. WINDOW OUTPUT 2
  8. CLS
  9. PALETTE 0,0,0,0
  10. PALETTE 3,1,1,1
  11. PALETTE 2,0.8,0,0.93
  12. PALETTE 1,0,0.93,0.87
  13.  
  14. DIM b(12,7),c(80),f(80)
  15. sp=0.25:lev=1:hs=0:RANDOMIZE TIMER
  16. CLS:LOCATE 4,8:COLOR 2,0
  17. PRINT "P Y R A M I D - P O W E R"
  18. COLOR 3,0:LOCATE 10,1:GOSUB player
  19. PRINT  "The object of this game is change the"
  20. PRINT  "color of all the cubes while avoiding"
  21. PRINT  "The bouncing rocks and creatures.  Use"
  22. PRINT "joystick #2 to move.  For a fast trip"
  23. PRINT  "up, use the elevators.  Be careful not"
  24. PRINT  "to fall off the edges."
  25. GOSUB creatureshape
  26. GOSUB button
  27.  
  28. restart:
  29. CLS:LOCATE 4,10:PRINT "Player:":PUT(150,20),a
  30. LOCATE 8,10:PRINT "Creature:":PUT(155,50),q
  31. LOCATE 12,10:PRINT "Rock:":CIRCLE(158,92),5,3
  32. PAINT (158,92),3,3:LOCATE 16,10
  33. PRINT "Elevator:":LINE(165,123)-(185,112),3
  34. LINE-(205,123),3:LINE-(185,134),3:LINE-(165,123),3
  35. GET(151,87)-(164,97),c:GET(164,111)-(206,135),f
  36. GOSUB button
  37.  
  38. readdata:
  39. RESTORE:FOR z=1 TO 7:FOR z1=0 TO 12
  40. READ b(z1,z):NEXT z1,z
  41.  
  42. start:
  43. CLS:z1=0:FOR z=190 TO 40 STEP -26
  44. FOR z3=70+z1*15 TO 220-z1*15 STEP 30
  45. LINE(z3,z)-(z3,z-18),3:LINE-(z3+15,z-27),3
  46. LINE-(z3,z-36),3:LINE-(z3-15,z-27),3:LINE-(z3,z-18),3
  47. LINE-(z3,z),3:LINE-(z3+15,z-9),3:LINE-(z3+15,z-27),3
  48. LINE(z3,z)-(z3-15,z-9),3:LINE-(z3-15,z-27),3
  49. PAINT(z3+7,z-9),1,3:PAINT(z3-7,z-9),2,3
  50. NEXT:z1=z1+1:NEXT
  51.  
  52. x=6:y=1
  53. GOSUB playerxy
  54. j=7:k=2:j1=0.5:k1=-0.5:k2=1.5
  55. PUT(49+j*15,23+(k-1)*26),c
  56. g=6:h=5:g1=0:h1=0
  57. PUT(50+g*15,13+(h-1)*26),q
  58. f1=11:f2=5
  59. PUT(f1*15+56,5*26-3),f
  60. PUT(27,5*26-3),f
  61. checksquares:
  62. IF x<>INT(x) OR y<>INT(y) THEN
  63. GOSUB move
  64. IF k1=1 THEN gameover
  65. END IF
  66. IF sq=21 THEN finished
  67. IF x<>INT(x) OR y<>INT(y) THEN rock
  68. LOCATE 1,1:PRINT "Score:"score
  69. LOCATE 1,32:PRINT "Level:"lev
  70. IF STICK(2)<>0 AND STICK(3) <> 0 THEN
  71. GOSUB move
  72. IF k1=1 THEN gameover
  73. END IF
  74.  
  75. rock:
  76. PUT(49+j*15,23+(k-1)*26),c
  77. IF k=INT(k) AND k1=1.5 AND j=INT(j) THEN
  78. j1=INT(3*RND(1))-1:j1=j1/2
  79. k1=-0.5:k2=k-0.5:SOUND 126,2
  80. END IF
  81. IF j1=0 THEN j1=-0.5
  82. IF j=x AND k=y THEN
  83. GOSUB creaturerock
  84. IF k1=1 THEN gameover
  85. END IF
  86. j=j+j1:k=k+k1:IF k=k2 THEN k1=1.5
  87. IF k=8 THEN k=1:j=6:k2=0.5
  88. PUT(49+j*15,23+(k-1)*26),c
  89.  
  90. creature:
  91. PUT(50+g*15,13+(h-1)*26),q
  92. IF g<>INT(g) OR h<>INT(h) THEN creaturecont
  93. IF g<x THEN g1=sp
  94. IF g>x THEN g1=-sp
  95. IF h>y THEN h1=-sp
  96. IF h<y THEN h1=sp
  97. IF h=y OR g=x THEN g1=0:h1=0
  98. IF g=x AND h<y THEN
  99. h1=sp:g1=(INT(3*RND(1))-1)*sp
  100. IF g1=0 THEN g1=sp
  101. END IF
  102. IF g=x AND h>y THEN
  103. h1=-sp:g1=(INT(3*RND(1))-1)*sp
  104. IF g1=0 THEN g1=-sp
  105. END IF
  106. IF h=y AND g<x THEN
  107. g1=sp:h1=(INT(3*RND(1))-1)*sp
  108. IF h1=0 OR h+h1>6 THEN h1=-sp
  109. END IF
  110. IF h=y AND g>x THEN
  111. g1=-sp:h1=(INT(3*RND(1))-1)*sp
  112. IF h1=0 OR h+h1>6 THEN h1=-sp
  113. END IF
  114. creaturecont:
  115. g=g+g1:h=h+h1
  116. PUT(50+g*15,13+(h-1)*26),q
  117. IF x=g AND y=h THEN
  118. GOSUB creaturerock
  119. IF k1=1 THEN gameover
  120. END IF
  121. GOTO checksquares
  122.  
  123. move:
  124. GOSUB playerxy
  125. IF x<>INT(x) OR y<>INT(y) THEN movecont
  126. IF STICK(2)=1 AND STICK(3)=1 THEN x1=0.5:y1=0.5
  127. IF STICK(2)=-1 AND STICK(3)=1 THEN x1=-0.5:y1=0.5
  128. IF STICK(2)=1 AND STICK(3)=-1 THEN x1=0.5:y1=-0.5
  129. IF STICK(2)=-1 AND STICK(3)=-1 THEN x1=-0.5:y1=-0.5
  130. movecont:
  131. x=x+x1:y=y+y1
  132. IF x=INT(x) OR y=INT(y) THEN x1=0:y1=0
  133. IF x=INT(x) THEN SOUND 880,1 :ELSE SOUND 440,1
  134. IF x=INT(x) AND b(x,y)=1 THEN
  135. GOSUB rocky:PAINT(47+x*15,30+(y-1)*27),3,3
  136. sq=sq+1:b(x,y)=0:GOSUB rocky
  137. nn=1:GOSUB scorecalc
  138. END IF
  139. IF sq=21 THEN RETURN
  140. IF x=INT(x) AND y=INT(y) AND b(x,y)=4 THEN
  141. GOSUB rightelevator:nn=-1:GOSUB scorecalc
  142. END IF
  143. IF x=INT(x) AND y=INT(y) AND b(x,y)=5 THEN
  144. GOSUB leftelevator:nn=-1:GOSUB scorecalc
  145. END IF
  146. IF x=INT(x) AND y=INT(y) AND b(x,y)=3 THEN
  147. GOSUB edge:IF k1=1 THEN RETURN
  148. END IF
  149. IF (j=x AND k=y) OR (g=x AND h=y) THEN
  150. GOSUB creaturerock
  151. IF k1=1 THEN RETURN
  152. END IF
  153. IF y<1 THEN y=1:x=6:x1=0:y1=0
  154. GOSUB playerxy
  155. RETURN
  156.  
  157. rocky:
  158. PUT(49+j*15,23+(k-1)*26),c
  159. PUT(50+g*15,13+(h-1)*26),q
  160. RETURN
  161.  
  162. rightelevator:
  163. PUT(f1*15+56,5*26-3),f
  164. z1=5:FOR z=11 TO 7 STEP -0.25
  165. GOSUB playerzz1
  166. PUT(z*15+56,z1*26-3),f
  167. z3=6-z1
  168. SOUND z3*200,1
  169. GOSUB playerzz1
  170. PUT(z*15+56,z1*26-3),f
  171. z1=z1-0.25:NEXT
  172. PUT(f1*15+56,5*26-3),f
  173. x=6:y=1:RETURN
  174.  
  175. leftelevator:
  176. PUT(27,5*26-3),f
  177. z1=5:FOR z=0 TO 4 STEP 0.25
  178. PUT(40+z*14,15+(z1-1)*26),a
  179. PUT(z*15+27,z1*26-3),f
  180. z3=6-z1
  181. SOUND z3*200,1
  182. PUT(40+z*14,15+(z1-1)*26),a
  183. PUT(z*15+27,z1*26-3),f
  184. z1=z1-0.25:NEXT
  185. PUT(27,5*26-3),f
  186. x=6:y=1:RETURN
  187.  
  188. finished:
  189. CLS:FOR z2=3 TO 0 STEP -1
  190. z=13:z1=10
  191. FOR z3=1 TO 11
  192. LIST(155-z,100-z1)-(155+z,100+z1),z2,b
  193. z=z+13:z1=z1+8
  194. SOUND z*10,2
  195. NEXT:NEXT
  196. score=score+lev*1000:lev=lev+1
  197. IF lev>2 THEN sp=0.5
  198. IF lev>7 THEN sp=1
  199. sq=0:COLOR 3,0:ts=ts+21:GOTO readdata
  200.  
  201. creaturerock:
  202. GOSUB playerxy:FOR z1=1 TO 20
  203. x=x+SIN(z1)/5:GOSUB playerxy
  204. SOUND 255,1
  205. GOSUB playerxy:x=x-SIN(z1)/5
  206. NEXT:k1=1:RETURN
  207.  
  208. edge:
  209. z=y+0.4:y1=-0.2:IF x<6 THEN x1=-0.12 :ELSE x1=0.12
  210. edgecont:
  211. IF z>6 THEN z=6
  212. z=z+y1:x=x+x1:y1=y1+0.03
  213. PUT(52+x*14,11+(z-1)*26),a
  214. SOUND z*180,1
  215. PUT(52+x*14,11+(z-1)*26),a
  216. IF z>6 THEN k1=1:RETURN
  217. GOTO edgecont
  218.  
  219. gameover:
  220. CLS:IF score>hs THEN hs=score
  221. ts=ts+sq:LOCATE 6,9:PRINT"High Score:"hs
  222. LOCATE 10,9:PRINT"You scored"score"points."
  223. LOCATE 12,9:PRINT"You filled"ts"squares."
  224. LOCATE 14,9:PRINT"You were on level "MID$(STR$(lev),2)"."
  225. LOCATE 20,4:PRINT"Do you wish to play again (Y/N)?"
  226. key3:
  227. z$=UCASE$(INKEY$)
  228. IF z$="" OR (z$<>"Y" AND z$<>"N") THEN key3
  229. IF z$="Y" THEN
  230. score=0:lev=1:sq=0:ts=0:sp=0.25:k1=0:GOTO readdata
  231. END IF
  232. GOTO quit
  233.  
  234. playerxy:
  235. PUT(52+x*14,11+(y-1)*26),a:RETURN
  236.  
  237. playerzz1:
  238. PUT(64+(z+1)*14,18+(z1-1)*26),a:RETURN
  239.  
  240. scorecalc:
  241. score = score+nn*100*lev:RETURN
  242.  
  243. griddata:
  244. DATA 3,3,3,3,3,3,1,3,3,3,3,3,3
  245. DATA 3,3,3,3,3,1,0,1,3,3,3,3,3
  246. DATA 3,3,3,3,1,0,1,0,1,3,3,3,3
  247. DATA 3,3,3,1,0,1,0,1,0,1,3,3,3
  248. DATA 5,3,1,0,1,0,1,0,1,0,1,3,4
  249. DATA 3,1,0,1,0,1,0,1,0,1,0,1,3
  250. DATA 3,3,3,3,3,3,3,3,3,3,3,3,3
  251.  
  252. quit:
  253. WINDOW CLOSE 2
  254. WINDOW CLOSE 1
  255. WINDOW 1,"Pyramid Power",,31,-1
  256. CLEAR ,25000
  257. END
  258.  
  259. player:
  260. DEFINT a,q:l=87:DIM a(l):RESTORE player
  261. FOR i=0 TO l:READ a$:a(i)=VAL("&h"+a$):NEXT:RETURN
  262. DATA 13,15,2,3f8,0,ffe,0,1fff
  263. DATA 0,3fff,8000,7fff,c000,e3f8,e000,ff1f
  264. DATA e000,ffff,e000,ffff,e000,ffbf,e000,ff1f
  265. DATA e000,ffff,e000,ffff,e000,fc07,e000,ffff
  266. DATA e000,7fff,c000,3fff,8000,404,0,404
  267. DATA 0,404,0,3c07,8000,0,0,0
  268. DATA 0,0,0,0,0,0,0,0
  269. DATA 0,0,0,0,0,0,0,0
  270. DATA 0,0,0,0,0,0,0,0
  271. DATA 0,0,0,0,0,0,0,0
  272. DATA 0,0,0,0,0,0,0,0
  273.  
  274. creatureshape:
  275. l=87:DIM q(l):RESTORE creatureshape
  276. FOR i=0 TO l:READ a$:q(i)=VAL("&h"+a$):NEXT:RETURN
  277. DATA 11,15,2,0,0,0,0,0
  278. DATA 0,0,0,0,0,0,0,0
  279. DATA 0,0,0,0,0,0,0,0
  280. DATA 380,0,fe0,0,fe0,0,47c4,0
  281. DATA 1ff0,0,3ff8,0,3ff8,0,3ffa,0
  282. DATA 3ffa,0,1fe0,0,2010,1c0,0,3e0
  283. DATA 0,7f0,0,7f0,0,7f0,0,3e0
  284. DATA 0,23e2,0,57f5,0,8ff8,8000,1ffc
  285. DATA 0,1ffc,0,1ffc,0,3ffe,0,5ffd
  286. DATA 0,9ffc,8000,9ffc,8000,8ff8,8000,ff8
  287. DATA 0,13e4,0,2002,0,2002,0,0
  288.  
  289. button:
  290. LOCATE 22,6:PRINT "Hit the fire button to play."
  291. WHILE STRIG(3)=0:WEND
  292. RETURN
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.