home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 351-375 / apd366 / chain.amos / chain.amosSourceCode < prev    next >
AMOS Source Code  |  1990-03-03  |  12KB  |  438 lines

  1. Screen Open 0,320,255,32,Lowres
  2. Dim GRID(6,6,3)
  3. Dim SCORE(2)
  4. Load "Chain_Reaction:chain_reaction.abk"
  5. WINNER=0 : Gosub WIN
  6. THE_BEGINNING:
  7. Gosub BEGIN
  8. Gosub _SCREEN_SETUP
  9. Shift Up 2,14,16,1
  10. Gosub SET_UP
  11. '
  12. Repeat 
  13.    PL1:
  14.    PLY=1
  15.    Gosub COORDINATES
  16.    If GRID(X,Y,3)<>2 and GRID(X,Y,3)<>3
  17.       GRID(X,Y,1)=GRID(X,Y,1)+1
  18.       GRID(X,Y,3)=1
  19.    Else 
  20.       Bell 
  21.       Goto PL1
  22.    End If 
  23.    X2=X : Y2=Y
  24.    Gosub UP_DATE
  25.    Gosub CHECK
  26.    Gosub SCORES
  27.    '
  28.    PL2:
  29.    PLY=2
  30.    Gosub COORDINATES
  31.    If GRID(X,Y,3)<>1 and GRID(X,Y,3)<>3
  32.       GRID(X,Y,1)=GRID(X,Y,1)+1
  33.       GRID(X,Y,3)=2
  34.    Else 
  35.       Bell 
  36.       Goto PL2
  37.    End If 
  38.    X2=X : Y2=Y
  39.    Gosub UP_DATE
  40.    Gosub CHECK
  41.    Gosub SCORES
  42.    '
  43.    If GB=1
  44.       If Rnd(4)=1
  45.          X2=Rnd(5)+1 : Y2=Rnd(5)+1
  46.          If GRID(X2,Y2,3)=0
  47.             GRID(X2,Y2,3)=3
  48.             GRID(X2,Y2,1)=0
  49.             Gosub UP_DATE
  50.          End If 
  51.       End If 
  52.    End If 
  53.    TURN=TURN+1
  54. Until TURN>MXTURN
  55. If SCORE(1)>SCORE(2) : WINNER=1 : Gosub WIN : End If 
  56. If SCORE(2)>SCORE(1) : WINNER=2 : Gosub WIN : End If 
  57. If SCORE(1)=SCORE(2) : WINNER=3 : Gosub WIN : End If 
  58. End 
  59. '
  60. SCORES:
  61. If PLY=1 Then PLUS=0
  62. If PLY=2 Then PLUS=254
  63. Ink 0 : Bar 19+PLUS,129 To 44+PLUS,141
  64. Ink 24
  65. B$=Str$(TURN)
  66. If TURN<10 : Text 26+PLUS,139,Right$(B$,1) : End If 
  67. If TURN<100 and TURN>9 : Text 23+PLUS,139,Right$(B$,2) : End If 
  68. If TURN>99 : Text 20+PLUS,139,Right$(B$,3) : End If 
  69. For I=1 To 2
  70.    If I=2 Then PLUS=254 Else PLUS=0
  71.    Ink 0 : Bar 19+PLUS,93 To 44+PLUS,105
  72.    Ink 24
  73.    PLY=I : Gosub COUNT
  74.    B$=Str$(SCORE(I))
  75.    If SCORE(I)<10 Then Text 26+PLUS,102,Right$(B$,1)
  76.    If SCORE(I)<100 and SCORE(I)>9 Then Text 23+PLUS,102,Right$(B$,2)
  77.    If SCORE(I)>99 Then Text 20+PLUS,102,Right$(B$,3)
  78. Next 
  79. If TURN>1
  80.    If SCORE(1)=0 : WINNER=2 : Gosub WIN : End If 
  81.    If SCORE(2)=0 : WINNER=1 : Gosub WIN : End If 
  82. End If 
  83. Return 
  84. '
  85. WIN:
  86. Fade 5
  87. Wait 5*16
  88. Unpack 7 To 0
  89. Flash Off : Paper 0 : Hide On 
  90. Locate 0,11
  91. Set Rainbow 1,1,255,"(6,1,15)(6,-1,15)","","(1,15,1)(6,-1,15)(6,1,15)"
  92. Rainbow 1,0,120,255
  93. Ink 0 : Bar 0,0 To 30,30
  94. VO=1
  95. If WINNER<>0
  96.    Unpack 2,0,71
  97.    If WINNER=1 : Unpack 8,0,220 : End If 
  98.    If WINNER=2 : Unpack 4,0,220 : End If 
  99.    If WINNER=3 : Unpack 3,0,220 : End If 
  100.    Shift Up 2,14,16,1
  101.    Volume 30
  102.    For K=1 To 10
  103.       Wait Rnd(50)+1
  104.       Sam Play VO,1,Rnd(2000)+6000
  105.       VO=VO*2
  106.       If VO>8 : VO=1 : End If 
  107.    Next 
  108.    Volume %10,63
  109.    Sam Play %10,2,20000
  110.    Wait Key 
  111.    Ink 0 : Bar 0,71 To 320,251 : Wait Vbl 
  112. End If 
  113. Goto THE_BEGINNING
  114. Return 
  115. '
  116. BEGIN:
  117. Pen 1
  118. Set Curs 255,255,255,255,255,255,255,255
  119. Print "             CHAIN REACTION" : Print 
  120. Print " Written By:"
  121. Print "   DR. Strange" : Print 
  122. Print " Instructions (Y/N)"; : Input A$
  123. If A$="y" Then _INSTRUCTIONS
  124. If A$="Y" Then _INSTRUCTIONS
  125. Locate 0,17
  126. Print " Do you want green bombs(Y/N)"; : Input A$
  127. GB=0
  128. If A$="y" Then GB=1
  129. If A$="Y" Then GB=1
  130. Print " How many Turns (0 for infinite turns)"
  131. Print " "; : Input MXTURN
  132. If MXTURN>999 Then MXTURN=999
  133. If MXTURN=0 Then MXTURN=1000000
  134. Volume 30
  135. Rainbow 1,0,0,0
  136. Fade 5
  137. Wait 5*16
  138. Return 
  139. '
  140. SET_UP:
  141. VO=1
  142. XPOS=39 : YPOS=42
  143. TURN=1 : PLY=0 : X=1 : Y=1
  144. A$="A 1,(7,2)(8,2)(9,2)(10,2)(11,2)(12,2)(13,2)(14,2)(15,2)"
  145. For X1=1 To 6
  146.    For Y1=1 To 6
  147.       GRID(X1,Y1,2)=4
  148.       If X1=1 Then GRID(X1,Y1,2)=3
  149.       If X1=6 Then GRID(X1,Y1,2)=3
  150.       If Y1=1 Then GRID(X1,Y1,2)=3
  151.       If Y1=6 Then GRID(X1,Y1,2)=3
  152.       GRID(X1,Y1,1)=0
  153.       GRID(X1,Y1,3)=0
  154.    Next 
  155. Next 
  156. SCORE(1)=0 : SCORE(2)=0
  157. GRID(6,6,2)=2 : GRID(6,1,2)=2
  158. GRID(1,6,2)=2 : GRID(1,1,2)=2
  159. Return 
  160. '
  161. _SCREEN_SETUP:
  162. Screen Open 0,320,320,32,Lowres
  163. Curs Off : Flash Off : Hide On 
  164. Screen Hide 0
  165. Unpack 6 To 0
  166. For I=0 To 31
  167.    Colour I,0
  168. Next 
  169. Screen Show 0
  170. Fade 3,$0,$0,$F00,$F30,$F60,$F90,$FC0,$FF0,$8,$800,$FFF,$FFF,$FFF,$FFF,$F00,$FF0,,,,,,,,,$FFF,$80,$F,$3F,$6F,$9F,$CF,$FF
  171. Wait 3*16
  172. Fade 3,,,,,,,,,,,$AAC,$77A,$558,$346,,,,$9F,$6B,$59,$47,$36,$24,$12,,,,,,,,,
  173. Wait 3*16
  174. Return 
  175. '
  176. UP_DATE:
  177. If GRID(X2,Y2,3)=1 Then Ink 9
  178. If GRID(X2,Y2,3)=2 Then Ink 8
  179. If GRID(X2,Y2,3)=3 Then Ink 25
  180. Bar X2*30+XPOS,Y2*30+YPOS To X2*30+XPOS+28,Y2*30+YPOS+28
  181. Paste Bob X2*30+XPOS,Y2*30+YPOS,4+Rnd(2)
  182. If GRID(X2,Y2,3)<>3
  183.    If GRID(X2,Y2,1)<4
  184.       Paste Bob X2*30+XPOS,Y2*30+YPOS,GRID(X2,Y2,1)
  185.    End If 
  186. End If 
  187. Wait 5
  188. Return 
  189. '
  190. CHECK:
  191. Repeat 
  192.    DETINATE=0
  193.    For X1=1 To 6
  194.       For Y1=1 To 6
  195.          If GRID(X1,Y1,3)=3 and GRID(X1,Y1,1)=1 Then Gosub OBLITERATE
  196.          If GRID(X1,Y1,1)=>GRID(X1,Y1,2) Then Gosub DET
  197.       Next 
  198.    Next 
  199. Until DETINATE=0
  200. Return 
  201. '
  202. DET:
  203. Sam Play VO,1,7000
  204. VO=VO*2
  205. If VO>8 Then VO=1
  206. Gosub _EXPLOSION
  207. If(X1+1)<7
  208.    If GRID((X1+1),Y1,3)=3
  209.       GRID((X1+1),Y1,3)=3
  210.       GRID((X1+1),Y1,1)=1
  211.       X2=X1+1 : Y2=Y1 : Gosub UP_DATE
  212.    Else 
  213.       GRID((X1+1),Y1,3)=PLY
  214.       GRID((X1+1),Y1,1)=GRID((X1+1),Y1,1)+1
  215.       X2=X1+1 : Y2=Y1 : Gosub UP_DATE
  216.    End If 
  217. End If 
  218. If(X1-1)>0
  219.    If GRID((X1-1),Y1,3)=3
  220.       GRID((X1-1),Y1,3)=3
  221.       GRID((X1-1),Y1,1)=1
  222.       X2=X1-1 : Y2=Y1 : Gosub UP_DATE
  223.    Else 
  224.       GRID((X1-1),Y1,3)=PLY
  225.       GRID((X1-1),Y1,1)=GRID((X1-1),Y1,1)+1
  226.       X2=X1-1 : Y2=Y1 : Gosub UP_DATE
  227.    End If 
  228. End If 
  229. If(Y1+1)<7
  230.    If GRID(X1,(Y1+1),3)=3
  231.       GRID(X1,(Y1+1),3)=3
  232.       GRID(X1,(Y1+1),1)=1
  233.    Else 
  234.       GRID(X1,(Y1+1),3)=PLY
  235.       GRID(X1,(Y1+1),1)=GRID(X1,(Y1+1),1)+1
  236.       X2=X1 : Y2=Y1+1 : Gosub UP_DATE
  237.    End If 
  238. End If 
  239. If(Y1-1)>0
  240.    If GRID(X1,(Y1-1),3)=3
  241.       GRID(X1,(Y1-1),3)=3
  242.       GRID(X1,(Y1-1),1)=1
  243.       X2=X1 : Y2=Y1-1 : Gosub UP_DATE
  244.    Else 
  245.       GRID(X1,(Y1-1),3)=PLY
  246.       GRID(X1,(Y1-1),1)=GRID(X1,(Y1-1),1)+1
  247.       X2=X1 : Y2=Y1-1 : Gosub UP_DATE
  248.    End If 
  249. End If 
  250. GRID(X1,Y1,1)=0 : GRID(X1,Y1,3)=0
  251. DETINATE=1
  252. Return 
  253. '
  254. OBLITERATE:
  255. Sam Play VO,1,7000
  256. VO=VO*2
  257. If VO>8 Then VO=1
  258. Gosub _EXPLOSION
  259. Ink 0
  260. GRID(X1,Y1,3)=0
  261. GRID(X1,Y1,1)=0
  262. Bar X1*30+XPOS,Y1*30+YPOS To X1*30+XPOS+28,Y1*30+YPOS+28
  263. If(X1+1)<7
  264.    GRID((X1+1),Y1,3)=0
  265.    GRID((X1+1),Y1,1)=0
  266.    Bar(X1+1)*30+XPOS,Y1*30+YPOS To(X1+1)*30+XPOS+28,Y1*30+YPOS+28
  267. End If 
  268. If(X1-1)>0
  269.    GRID((X1-1),Y1,3)=0
  270.    GRID((X1-1),Y1,1)=0
  271.    Bar(X1-1)*30+XPOS,Y1*30+YPOS To(X1-1)*30+XPOS+28,Y1*30+YPOS+28
  272. End If 
  273. If(Y1+1)<7
  274.    GRID(X1,(Y1+1),3)=0
  275.    GRID(X1,(Y1+1),1)=0
  276.    Bar X1*30+XPOS,(Y1+1)*30+YPOS To X1*30+XPOS+28,(Y1+1)*30+YPOS+28
  277. End If 
  278. If(Y1-1)>0
  279.    GRID(X1,(Y1-1),3)=0
  280.    GRID(X1,(Y1-1),1)=0
  281.    Bar X1*30+XPOS,(Y1-1)*30+YPOS To X1*30+XPOS+28,(Y1-1)*30+YPOS+28
  282. End If 
  283. Return 
  284. '
  285. _EXPLOSION:
  286. Ink 0
  287. Bar X1*30+XPOS,Y1*30+YPOS To X1*30+XPOS+28,Y1*30+YPOS+28
  288. Bob 1,X1*30+XPOS,Y1*30+YPOS,4
  289. Channel 1 To Bob 1
  290. Amal 1,A$
  291. Amal On 1
  292. For I=1 To 14
  293.    Wait Vbl : Synchro 
  294. Next 
  295. Bob 1,1,250,6
  296. Wait 2
  297. Return 
  298. '
  299. COUNT:
  300. SCORE(PLY)=0
  301. For X1=1 To 6
  302.    For Y1=1 To 6
  303.       If GRID(X1,Y1,3)=PLY Then SCORE(PLY)=SCORE(PLY)+GRID(X1,Y1,1)
  304.    Next 
  305. Next 
  306. Return 
  307. '
  308. COORDINATES:
  309. Repeat 
  310.    If Joy(1)=8 Then X=X+1
  311.    If Joy(1)=4 Then X=X-1
  312.    If Joy(1)=1 Then Y=Y-1
  313.    If Joy(1)=2 Then Y=Y+1
  314.    If Joy(1)=9 Then X=X+1 : Y=Y-1
  315.    If Joy(1)=10 Then X=X+1 : Y=Y+1
  316.    If Joy(1)=5 Then X=X-1 : Y=Y-1
  317.    If Joy(1)=6 Then X=X-1 : Y=Y+1
  318.    If X>6 Then X=6
  319.    If Y>6 Then Y=6
  320.    If Y<1 Then Y=1
  321.    If X<1 Then X=1
  322.    Ink 24
  323.    Polyline X*30+XPOS,Y*30+YPOS To X*30+XPOS+28,Y*30+YPOS To X*30+XPOS+28,Y*30+YPOS+28 To X*30+XPOS,Y*30+YPOS+28 To X*30+XPOS,Y*30+YPOS
  324.    Wait 6
  325.    Ink 0
  326.    Polyline X*30+XPOS,Y*30+YPOS To X*30+XPOS+28,Y*30+YPOS To X*30+XPOS+28,Y*30+YPOS+28 To X*30+XPOS,Y*30+YPOS+28 To X*30+XPOS,Y*30+YPOS
  327. Until Joy(1)=16
  328. Return 
  329. '
  330. Procedure _INSTRUCTIONS
  331.    Curs Off 
  332.    Pen 1
  333.    Colour 2,$FFF
  334.    Set Envel 1,1 To 1,50
  335.    Volume 1
  336.    For H=1 To 4
  337.       Ink 0
  338.       Bar 0,71 To 320,251
  339.       Locate 0,9
  340.       For I=1 To 20
  341.          Read A$
  342.          For J=1 To 40
  343.             Print Mid$(A$,J,1);
  344.             Pen 2 : Print "*"; : Pen 1
  345.             If Mid$(A$,J,1)<>" " Then Play 44,1
  346.             Wait Vbl 
  347.             Cleft : Print " "; : Cleft 
  348.          Next 
  349.          Print 
  350.       Next 
  351.       Pen 2
  352.       Print "Press any key to continue....."
  353.       Pen 1
  354.       Wait Key 
  355.    Next 
  356.    Data "  Chain Reaction is a two player board "
  357.    Data " game. Each player in turn must  place "
  358.    Data " bombs on the grid,  Each  player  has "
  359.    Data " different  coloured bombs. Player one "
  360.    Data " has blue  bombs,  and player  two has "
  361.    Data " red  bombs.  You can  place a bomb on "
  362.    Data " any empty square  on the grid, or you "
  363.    Data " can place one of your bombs on top of "
  364.    Data " another counter of your  own, that is "
  365.    Data " already  on  the  board. You  may not "
  366.    Data " place one of your bombs on one of the "
  367.    Data " opponents bombs.                      "
  368.    Data "  Each square can only hold a  certain "
  369.    Data " number of bombs. This is equal to the "
  370.    Data " number of squares there are  adjacent "
  371.    Data " to it minus  one, both  horizontally, "
  372.    Data " and vertically. e.g.  corner  squares "
  373.    Data " only  hold  one  bomb,  whereas  edge "
  374.    Data " squares can hold two bombs. And inner "
  375.    Data " squares can hold three.               "
  376.    Data "  When the number of bombs on a square "
  377.    Data " exceeds  that  square's  limit,  then "
  378.    Data " there is an explosion,  and the bombs "
  379.    Data " disperse onto the squares adjacent to "
  380.    Data " them, one bomb onto each. This is the "
  381.    Data " technique  you  must  use  to capture "
  382.    Data " your  opponents  squares:  Arrange an "
  383.    Data " explosion  next  to a square occupied "
  384.    Data " By  your  opponent, Your  bombs  will "
  385.    Data " disperse,  one   will  land  on  your "
  386.    Data " opponents   bombs.  All  these  bombs "
  387.    Data " now become your own.                  "
  388.    Data "  Because  in  this game  no bombs are "
  389.    Data " actually destroyed,  the  board  will "
  390.    Data " slowly  fill  up. This  means that if "
  391.    Data " you explode one square it may lead to "
  392.    Data " other explosions. This makes the game "
  393.    Data " unpredictable  in its  later  stages. "
  394.    Data " And it is also where the game got its "
  395.    Data " name from.                            "
  396.    Data "  The   winner   is   the  player  who "
  397.    Data " eliminates  all his  opponents bombs. "
  398.    Data " Careless play can lead to being wiped "
  399.    Data " out within  the first few  moves. You "
  400.    Data " can  alternatively   play  to  a  set "
  401.    Data " number of turns, the winner being the "
  402.    Data " player  who has  the  most  bombs  at "
  403.    Data " the end of the game.                  "
  404.    Data "  As  an  extra twist  to the  game at "
  405.    Data " random   times  green  bombs  appear, "
  406.    Data " neither  player  can   move  on  this "
  407.    Data " square. The green bombs are triggered "
  408.    Data " if ANY bomb  lands on  them after  an "
  409.    Data " explosion. The  green bomb  will then "
  410.    Data " explode  destroying   any   bombs  on "
  411.    Data " adjacent  squares. You can  use these "
  412.    Data " bombs to  your  advantage,  but these "
  413.    Data " bombs   can  also  be   triggered  by "
  414.    Data " careless  mistakes,  with  disastrous "
  415.    Data " consequences!                         "
  416.    Data "  You  place  bombs  on  the screen by "
  417.    Data " moving a white cursor about the board "
  418.    Data " using  a joystick,  pressing fire  to "
  419.    Data " place  a   bomb  on  the  highlighted "
  420.    Data " square.                               "
  421.    Data "  These  instructions  may seem  a bit "
  422.    Data " unclear, The best way to work out how "
  423.    Data " the game works is to play it!         "
  424.    Data "                                       "
  425.    Data "  This game was written by:            "
  426.    Data "                                       "
  427.    Data "    Dr. Strange                        "
  428.    Data "                                       "
  429.    Data "  Look out  for  my new  game  that is "
  430.    Data " currently  under   construction,  its "
  431.    Data " 'Not Joust !!!!'                      "
  432.    Data "                                       "
  433.    Data "  Also  look  out  for my  'Estranged' "
  434.    Data " demo, its ace !!!!                    "
  435.    Data "                                       "
  436.    Ink 0
  437.    Bar 0,71 To 320,251
  438. End Proc