home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / games / maze_game.amos / maze_game.amosSourceCode < prev    next >
AMOS Source Code  |  1992-07-12  |  8KB  |  315 lines

  1. Close Editor 
  2. Rem **************************************************************** 
  3. Rem *                                                              * 
  4. Rem *  PROGRAM NAME :  Maze Craze                                  * 
  5. Rem *                                                              * 
  6. Rem *  AUTHOR       :  Bernie Wiemers and Kelly Adey               * 
  7. Rem *                                                              * 
  8. Rem *  DATE         :  01 August 1990 (c)                          * 
  9. Rem *                                                              * 
  10. Rem *  VERSION      :  V1.02                                       * 
  11. Rem *                                                              * 
  12. Rem *  COMMENTS     :  Amos Version adapted from original game     * 
  13. Rem *                  that was written using Amigabasic by        * 
  14. Rem *                  Bernie Wiemers and Kelly Adey.              * 
  15. Rem *                                                              * 
  16. Rem **************************************************************** 
  17. Rem * VERSION/ | PROGRAMMER/                                       *   
  18. Rem * DATE     | COMMENT                                           *   
  19. Rem *----------|---------------------------------------------------*   
  20. Rem * V1.03    | Bernie Wiemers & Kelly Adey                       * 
  21. Rem * 01/12/90 | Added colours to the walls & Floors.              * 
  22. Rem *----------|---------------------------------------------------*   
  23. Rem * V1.03    | Added sound samples and background music          * 
  24. Rem * 09/12/90 | Added disk selection to get multiple mazes        * 
  25. Rem * 2.30 AM! |                                                   * 
  26. Rem **************************************************************** 
  27. Rem
  28. COORD1=0
  29. COORD2=0
  30. COORD3=0
  31. COORD4=0
  32. Global COORD1,COORD2,COORD3,COORD4
  33. FL=0
  34. S1=1
  35. Rem number of locations
  36. M=10
  37. Dim ST(3)
  38. Dim LOCATION$(M,M)
  39. Dim V$(4,4)
  40. Dim F$(4)
  41. Dim CURRENTPOS$(1,4)
  42. DER$=" "
  43. Gosub SETUP
  44. MAIN:
  45. Gosub MOVE
  46. DERE:
  47. Locate 42,29
  48. Paper 0
  49. Print F$(ION)
  50. L=X+290
  51. Q=Y+3
  52. MAP[L,Q,DER$,ION]
  53. DIS:
  54. DER$=Inkey$
  55. DER$=Upper$(DER$)
  56. If(DER$<>"Q") and(DER$<>"L") and(DER$<>"R") and(DER$<>"F") and(DER$<>"S") Then Goto DIS
  57. If FL=1 and(V$(1,COORD1)="1") and(DER$="F") Then Sam Play 3,1,10000 : Goto DIS
  58. If DER$="Q"
  59.    Mvolume 0
  60.    For A=50 To -230 Step -1
  61.       Screen Display 0,,A,320,250
  62.       Wait Vbl 
  63.    Next A
  64.    Run "Maze.Amos:Game/End_Menu.AMOS"
  65. End If 
  66. If DER$="L" Then ION=ION-1
  67. If ION<1 Then ION=4
  68. If DER$="R" Then ION=ION+1
  69. If ION>4 Then ION=1
  70. If(DER$="F") and(ION=1) Then X=X-1
  71. If(DER$="F") and(ION=2) Then Y=Y+1
  72. If(DER$="F") and(ION=3) Then X=X+1
  73. If(DER$="F") and(ION=4) Then Y=Y-1
  74. If(DER$="S") and(S1=0)
  75.    S1=1
  76.    Mvolume 7
  77.    DER$=" "
  78. End If 
  79. If(DER$="S") and(S1=1)
  80.    S1=0
  81.    Mvolume 0
  82. End If 
  83. If Y>M Then Y=M
  84. If Y<1 Then Y=1
  85. If X>M Then X=M
  86. If X<1 Then X=1
  87. Gosub MOVE
  88. Sam Play 4,4,7000
  89. For Z1=1 To 2000
  90. Next Z1
  91. Sam Play 3,4,7000
  92. Q2=Rnd(100)
  93. If Q2>95 Then Sam Play 2,3,10000
  94. Goto DERE
  95. MOVE:
  96. FL=0
  97. A=X
  98. B=Y
  99. For I=1 To 3
  100.    CURRENTPOS$=LOCATION$(A,B)
  101.    For J=1 To 4
  102.       V$(I,J)=Mid$(CURRENTPOS$,J,1)
  103.    Next J
  104.    If ION=1 Then A=A-1
  105.    If ION=2 Then B=B+1
  106.    If ION=3 Then A=A+1
  107.    If ION=4 Then B=B-1
  108.    If B<1 Then B=1
  109.    If B>M Then B=M
  110.    If A<1 Then A=1
  111.    If A>M Then A=M
  112. Next I
  113. FACING[ION]
  114. Gosub MAPOUT
  115. Return 
  116. End 
  117. MAPOUT:
  118. BLANK
  119. Rem first floor
  120. SIDEWALL[220,180,21,140,475,595,7,3]
  121. If(V$(1,COORD1)="1") or(V$(1,COORD1)="2")
  122.    FL=1
  123.    Rem first deadend  
  124.    WALLOUT[140,180,475,60,7]
  125. End If 
  126. Rem final exit 
  127. If V$(1,COORD1)="2" Then WALLOUT[243,180,373,85,0]
  128. If V$(1,COORD2)="1"
  129.    Rem first rightwall
  130.    SIDEWALL[595,475,21,60,180,220,7,2]
  131. Else 
  132.    Rem first right passage  
  133.    SIDEPAS[475,21,594,60,594,218,179,7,2]
  134. End If 
  135. If V$(1,COORD4)="1"
  136.    Rem first leftwall 
  137.    SIDEWALL[21,140,21,60,180,220,7,1]
  138. Else 
  139.    Rem first leftpassage  
  140.    SIDEPAS[21,21,140,60,139,179,218,7,1]
  141. End If 
  142. If FL=1 Then Return 
  143. If FL=0 Then 
  144. Rem second floor 
  145. SIDEWALL[180,160,140,210,405,475,8,3]
  146. If V$(2,COORD2)="1"
  147.    Rem second rightwall 
  148.    SIDEWALL[475,405,60,80,160,180,8,2]
  149. Else 
  150.    Rem second rightpassage
  151.    SIDEPAS[403,58,474,80,474,178,159,8,2]
  152. End If 
  153. If V$(2,COORD4)="1"
  154.    Rem second leftwall
  155.    SIDEWALL[140,210,60,80,160,180,8,1]
  156. Else 
  157.    Rem second left passage  
  158.    SIDEPAS[141,55,210,80,210,159,178,8,1]
  159. End If 
  160. If(V$(2,COORD1)="1") or(V$(2,COORD1)="2")
  161.    FL=1
  162.    Rem second deadend 
  163.    WALLOUT[210,160,405,80,8]
  164. End If 
  165. Rem second out 
  166. If V$(2,COORD1)="2" Then WALLOUT[268,159,348,98,6]
  167. If FL=1 Then Return 
  168. Rem third floor
  169. If FL=0 Then 
  170. SIDEWALL[160,145,210,260,355,405,9,3]
  171. If V$(3,COORD2)="1"
  172.    Rem third rightwall
  173.    SIDEWALL[405,355,80,95,145,160,9,2]
  174. Else 
  175.    Rem third right passage  
  176.    SIDEPAS[355,80,403,94,404,157,144,9,2]
  177. End If 
  178. If V$(3,COORD4)="1"
  179.    Rem third leftwall 
  180.    SIDEWALL[211,260,80,95,145,160,9,1]
  181. Else 
  182.    Rem third leftpassage  
  183.    SIDEPAS[211,80,260,95,259,144,157,9,1]
  184. End If 
  185. If V$(3,COORD1)="0"
  186.    Ink 0
  187.    Bar 261,95 To 354,145
  188.    Ink 2
  189.    Draw 260,145 To 355,145
  190. End If 
  191. If(V$(3,COORD1)="1") or(V$(3,COORD1)="2")
  192.    FL=1
  193.    Rem third deadend
  194.    WALLOUT[258,145,355,95,9]
  195. End If 
  196. Rem first out
  197. If V$(3,COORD1)="2" Then WALLOUT[288,144,328,108,13]
  198. Return 
  199. SETUP:
  200. Screen Open 0,640,320,16,Hires
  201. Flash Off 
  202. Curs Off 
  203. Cls 0
  204. Rem LOCATION DATA
  205. Data "North"," East","South"," West"
  206. For I=1 To 4
  207.    Read F$(I)
  208. Next I
  209. Show On 
  210. F$=Fsel$("Mazes/*.mze","Maze2.mze","MAZE CRAZE","Please pick a maze")
  211. Hide On 
  212. Open In 1,F$
  213. For J=1 To 3
  214.    Input #1,ST(J)
  215. Next J
  216. For XZ=1 To M
  217.    For YZ=1 To M
  218.       Input #1,LOCATION$(XZ,YZ)
  219.    Next YZ
  220. Next XZ
  221. Close 1
  222. X=ST(1)
  223. Y=ST(2)
  224. ION=ST(3)
  225. Load "graphics/Screen.Abk",5
  226. Unpack 5 To 0
  227. For A=-230 To 50
  228.    Screen Display 0,,A,320,250
  229.    Wait Vbl 
  230. Next A
  231. Flash Off 
  232. Curs Off 
  233. Ink 6
  234. Bar 0,0 To 10,10
  235. Load "music/Samples.Abk",6
  236. Sam Bank 6
  237. Load "music/Funky1.Abk"
  238. Mvolume 7
  239. Music 1
  240. Volume %1110,35
  241. Music 1
  242. Return 
  243. Procedure BLANK
  244.    Ink 0
  245.    Polygon 122,53 To 260,94 To 355,94 To 491,53
  246. End Proc
  247. Procedure SIDEWALL[A,B,C,D,E,F,C1,D1]
  248.    Ink 2
  249.    If D1<3 Then Polyline A,C To B,D To B,E To A,F Else Polyline C,A To D,B To E,B To F,A
  250.    Ink C1
  251.    If D1=1 Then Polygon A+1,C+2 To B-1,D+1 To B-1,E-1 To A+1,F-2
  252.    If D1=2 Then Polygon A-1,C+2 To B+1,D+1 To B+1,E-1 To A-1,F-2
  253.    If D1=3 Then Polygon C+5,A-1 To D+1,B+1 To E-1,B+1 To F-5,A-1
  254. End Proc
  255. Procedure SIDEPAS[X1,Y1,X2,Y2,X5,Y5,Y6,C1,D1]
  256.    Ink 0
  257.    If D1=1 Then Polygon X1,Y1 To X2,Y2 To X1,Y2
  258.    If D1=2 Then Polygon X2,Y1 To X1,Y2 To X2,Y2
  259.    Ink C1
  260.    If D1=1
  261.       Bar X1-1,Y2+2 To X5,Y5
  262.       Polygon X1+1,Y6 To X1+1,Y5 To X5-3,Y5+1
  263.    End If 
  264.    If D1=2
  265.       Bar X1-1,Y2+2 To X5,Y6
  266.       Polygon X2-1,Y6 To X2-1,Y5 To X1+2,Y6+1
  267.    End If 
  268.    Ink 2
  269.    If D1=1 Then Box X1-1,Y2 To X2,Y5+1
  270.    If D1=2 Then Box X1+1,Y2 To X2+1,Y6+1
  271. End Proc
  272. Procedure WALLOUT[X1,Y1,X2,Y2,C1]
  273.    Ink 2
  274.    Box X1,Y1 To X2,Y2
  275.    Ink C1
  276.    Bar X1+1,Y2+1 To X2-1,Y1-1
  277.    If X1=243
  278.       Locate 31,9
  279.       Paper 7
  280.       Pen 2
  281.       Print "YOU'VE MADE IT!"
  282.       For G=1 To 10000
  283.       Next G
  284.       Mvolume 0
  285.       For A=50 To -230 Step -1
  286.          Screen Display 0,,A,320,250
  287.          Wait Vbl 
  288.       Next A
  289.       Dir$="Maze.Amos:Game/"
  290.       Run "End_Menu.AMOS"
  291.    End If 
  292. End Proc
  293. Procedure MAP[X,Y,DER$,ION]
  294.    Ink 0
  295.    Bar 289,4 To 311,16
  296.    If(DER$="F") and(ION=3) Then X=X-1
  297.    If(DER$="F") and(ION=4) Then Y=Y+2
  298.    If(DER$="F") and(ION=1) Then X=X+1
  299.    If(DER$="F") and(ION=2) Then Y=Y-2
  300.    If X=>310 Then X=310
  301.    If Y=>14 Then Y=14
  302.    If Y<=6 Then Y=6
  303.    If X<=290 Then X=290
  304.    Ink 4
  305.    Plot X,Y
  306. End Proc
  307. Procedure FACING[ION]
  308.    COORD1=ION
  309.    COORD2=ION+1
  310.    COORD3=ION+2
  311.    COORD4=ION+3
  312.    If COORD2>4 Then COORD2=COORD2-4
  313.    If COORD3>4 Then COORD3=COORD3-4
  314.    If COORD4>4 Then COORD4=COORD4-4
  315. End Proc