home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 108.lha / Life / README < prev    next >
Encoding:
Text File  |  1986-11-20  |  13.1 KB  |  257 lines

  1.          LIFE, an interactive version, 15.0 generations per second.
  2.                          by Dave Storer,
  3.                  with unknowing contributions from
  4.                   Tomas Rokicki and Charlie Heath.
  5.  
  6. This version of the LIFE program is placed in the public domain and may
  7. be freely distributed, in the hopes that someone else will build on this
  8. the way I have built on the work of Tomas Rokicki and Charlie Heath.
  9.  
  10. LIFE is a form of cellular automaton invented (discovered?) by the mathe-
  11. matition John Horton Conway.  The life universe is a rectangular array of
  12. cells.  Each cell is either alive (white) or dead (blue), and has eight
  13. neighboring cells.  What happens to a cell in the next generation depends
  14. on the number of its living neighbors.  Zero, one, or four through eight
  15. living neighbors cause a cell to become or remain dead.  Two living neighbors
  16. cause the cell to remain in the same state, living or dead, as in the 
  17. previous generation.  Three living neighbors cause the cell to become or
  18. remain living in the next generation.  These simple rules generate
  19. complex interactions which are wonderful to watch at high speed.
  20.  
  21. This version owes its speed to Tomas Rokicki, who wrote the original blitter
  22. program which I found on Amicusdisk 31 (also Fred Fish disk 31).  I've added
  23. interactive capability, as an exercise in learning C and the Amiga internals.
  24. This version does NOT run at 19.8 generations per second, because of the
  25. extra stuff in the main loop.  With Depth 1, it runs at 15.0 generations per
  26. second. For depth 3, it runs at about 13.5 g/s, quick enough for most of us.
  27. This version does not "wrap-around" as some other LIFE programs do.  The
  28. active display area is 318 cells by 188 cells.
  29.  
  30. Rokicki's original doc files, POSTER, WARNING, and WARNING2 are included,
  31. as the blit.c file has not changed.
  32.  
  33. The file requestor is a slightly modified version of the GetFile example 
  34. by 'cheath' in the Manx C (3.4a) SYS3:Examples directory.  I have included
  35. the object files only.  
  36.  
  37. Controls.
  38.  
  39. This version of LIFE is controlled by the mouse, the keypad keys, the 
  40. control keys on the regular keyboard, and the letters and special char-
  41. acter keys.   
  42.  
  43. ESCape.        This key terminates the program.
  44.  
  45. Left-Amiga-n.  This switches to the LIFE HELP display.
  46.  
  47. Left-Amiga-m.  This switches back to the LIFE display.
  48.  
  49. Letter, number, and special character keys.  These may be assigned to any
  50.             pattern of cells from 1x1 up to 16x16.  These assignments are
  51.             specified in the file, LIFE.KEY.  By pressing one of the 
  52.             assigned keys, (unassigned keys flash) the cursor changes to
  53.             the shape from the LIFE.KEY file.  The key assignments and
  54.             the accompanying text strings are displayed on the HELP screen.
  55.  
  56. Left mouse button.  This is used to place the cursor shape on the display.
  57.             At the left and bottom edges, you may not get a complete copy,
  58.             as the cursor shape is clipped to fit on the screen.  You may
  59.             place a shape onto a running display.  Gliders placed this way
  60.             give interesting effects.
  61.  
  62. Right mouse button.  Clicking this rotates the cursor shape 90 degrees.  If
  63.             the shape has four-fold symmetry, you won't see anything happen.
  64.  
  65. Either-Amiga-left-alt.   Same as left mouse button. 
  66. Either-Amiga-right-alt.  Same as right mouse button. 
  67. Either-Amiga-arrow-key.  Useful for moving the cursor very precisely.  These
  68.             three combinations are good for setting up complex displays
  69.             where the positioning of adjacent shapes is critical.
  70.  
  71. Return and Tab.  These keys cause the cursor shape to change to its mirror
  72.             image shape.  If the shape has two-fold symmetry, you have a 
  73.             50-50 chance that the shape will change.
  74.  
  75. Spacebar.   Toggles between RUN and STOP state.  When in the STOP state,
  76.             the title bar shows the generation number.  By holding down
  77.             the spacebar, you can run LIFE at one-half the repeat rate
  78.             of the keyboard.  This can be altered from Preferences.
  79.  
  80. Backspace.  Causes the display to advance to the next generation and then
  81.             stop.  It does this from either the RUN or the STOP state.
  82.             Holding the backspace down to rapidly single step the display
  83.             is probably better than using the spacebar, as you will always
  84.             be stopped when you release the backspace.
  85.  
  86. DEL.        This key causes the display to back up one generation.  However,
  87.             see keypad controls '1', '2', and '3'.  Normally only useful
  88.             when stopped.
  89.  
  90. Keypad controls.
  91. Kp Enter.   This key brings up a file requestor.  You can read predefined
  92.             patterns into the display.  All of the patterns provided end
  93.             with the .pat suffix.  Reading also makes a copy in the quick
  94.             restore buffer (see Kp '7' and Kp '9') and sets the generation
  95.             number to zero.  By selecting the WRITE gadget, you may save
  96.             interesting patterns to disk.  (Mnemonic: Enter a pattern
  97.             into the display from disk.)
  98.             Note that if you specify a directory (drawer) on a disk,
  99.             you must end with '/', as the drawer name and file name are
  100.             concatenated to form the full name.  E. g.  'df1:life/' for
  101.             the drawer and  'box.pat' for the file name.
  102.  
  103. Kp '-'.     Toggle erase mode.  In erase mode, the cursor will erase any
  104.             live cells under it.  The eraser is actually the size of the
  105.             smallest rectangle containing the cursor shape.  (Mnemonic:
  106.             You are subtracting something from the display.)
  107.  
  108. Kp '.'.     This places the display into tile mode.  In tile mode, whichever
  109.             cursor you have selected is used to fill the entire display.
  110.             This can yield some interesting effects.  In the file LIFE.KEY,
  111.             some of the colony names start with * and end in "farm."  These
  112.             shapes have enough extra space around them so that in tile mode,
  113.             they are not too cramped to be interesting.  (Mnemonic: The
  114.             display is filled with a PERIODic ((ouch)) pattern.)
  115.  
  116. Kp '0'.     This key causes the display to be cleared.  To prevent acci-
  117.             dental erasure, you must hold down the right shift key at the
  118.             same time.  Generation number is set to zero.  The quick restore
  119.             buffer is NOT cleared.  (Mnemonic: Clearing a calculator puts
  120.             Zero on the display.)
  121.  
  122. Kp '1', '2', '3'.  This is the depth of the screen display.  This controls
  123.             how many previous generations are saved.  When Kp '1' is 
  124.             pressed, one bitplane is used, and no previous generations are
  125.             saved.  In this case the DEL key has no effect, and LIFE
  126.             runs at its maximum speed.  When Kp '2' or '3' is pressed,
  127.             you may back up at most one or two generations, respectively,
  128.             and the display runs a little slower.
  129.  
  130. Kp '4'.     Restore the backgound grid.  Unfortunately, placing a colony
  131.             on the display by clicking the left mouse button erases the
  132.             grid under the cursor.  I can't find a simple way to avoid
  133.             this, hence the requirement for the Kp '4'.  (Mnemonic: the
  134.             '4' has a cross in the middle like the ticks on some grids.)
  135.  
  136. Kp '5'.     Remove the background grid.
  137.  
  138. Kp '6'.     Generate a random display of live cells.  Set generation
  139.             number to zero, and save the random display in the quick
  140.             restore buffer.  (Mnemonic: A six sided die is often used as a
  141.             randomizing tool.)
  142.  
  143. Kp '7'.     This restores the display from the quick restore buffer.  It
  144.             may be used both while running and stopped.  The generation
  145.             number is reset to zero.
  146.  
  147. Kp '9'.     Saves the current display to the quick restore buffer.  It may
  148.             be used both while running and stopped.  (Mnemonic: "A stitch
  149.             in time saves nine.")
  150.  
  151.  
  152. Key assignments from file 'LIFE.KEY'.
  153.   The names I have chosen are probably not the names in common use among
  154.   those who have studied LIFE in depth.  
  155.   
  156.   '0'=Blob                 Stable.
  157.   '1'=*Small glider farm   
  158.   '4'=Block                Stable.
  159.   '7'=7 gliders            Simple pattern which explodes and throws off
  160.                            seven gliders before becoming a still-life.
  161.   '8'=Big flipper          Generates a large three-cycle oscillator.
  162.   '#'=Line+dashes3         A series of these, end to end leaves behind an
  163.                            array of blocks.
  164.   '^'=Hat                  A building block. Upshift of '6' key. 
  165.   '-'=Small flipper        Simplest two-cycle oscillator.
  166.   '+'=Four cells           Like block but rotated 45 degrees.
  167.   '='=Line+dashes2         Like # but leaves nothing behind.
  168.   '|'=15 step oscillator   Longest period oscillator I've found.
  169.   'b'=Brick                Stable.
  170.   '^B'=*Big Bang           ^B means press CTRL key and B key together.
  171.                            In tile mode, generates a stable densely packed
  172.                            array of blocks, which is stable.  A single dot
  173.                            added will either do little or will cause a major
  174.                            catastrophy.
  175.   'c'=Little c             Not stable by itself.  Back to back with itself,
  176.                            with one or two spaces between, yields a stable
  177.                            pattern or a two-cycle oscillator.
  178.   'C'=Big C                Can be used to build stable patterns, like 'c'.
  179.   'D'=Big D                Stable pattern.  Can be packed with itself on a
  180.                            diagonal and still be stable.
  181.   'f'=Edge Galumpfer       In the center of the screen this is not stable.
  182.                            Along an edge, or back-to-back with itself,
  183.                            it forms a peculiar 14-cycle oscillator.
  184.  '^F'=*Flipper farm        For tiling the screen with small flippers.  See
  185.                            Big Bang.
  186.   'g'=Small glider         This pattern moves along a diagonal.
  187.   'G'=Big glider           This pattern moves horizontally or vertically.
  188.  '^G'=*Glider farm         Useful for tile pattern of Big Gliders.
  189.   'i'=Little I-beam        Interesting small explosion.
  190.   'I'=Big I-beam           Ditto.  Both I-beams are good for building 
  191.                            interesting larger patterns.
  192.   'L'=Corner               Useful building block.  Changes to block in one
  193.                            generation if by itself.
  194.   'o'=Little o             Stable.
  195.   'O'=Big O                Not stable.
  196.  '^O'=*O'Farm              Interesting failure.
  197.   's'=S septomino          Stable.  Good building block.  Will "eat"
  198.                            small gliders if everything is just right.
  199.   'r'=R pentomino          Small, 5-cell pattern which explodes grandly.
  200.  '^Z'=*Diag line farm      Long diagonal lines are interesting when some
  201.                            small colony is tacked on at an end.
  202.   '.'=Single dot           Use this for building things.  Especially useful
  203.                            in erase mode for fixing goofs.
  204.   '/'=3-dot diagonal line  Building block.  
  205.  
  206. Notes on LIFE.KEY file.
  207. The LIFE.KEY file is an ASCII file and can be modified as you like,
  208. provided the format is correct.
  209.  
  210.  
  211. Some words of warning about the format of the LIFE.KEY file.  This file
  212. defines all of the cursor forms and their key assignments.  You may have up
  213. to 100 colony forms in this file.  The format must match the examples
  214. already in the file. 
  215.  
  216. Each colony has the format:
  217. <name>#
  218.  k  w  h  definitionarray
  219. where name may be up to 18 characters long and must end with #.
  220. The key assignment is given by k, which may be upper or lower case, or a 
  221. ctrl-key, if your editor can do that.  The width (w) and the height (h) of
  222. the definition array come next, followed by a series of space-separated 
  223. zeros and ones to define the colony pattern.  Ones are living cells,
  224. zeros are dead cells.   Maximum value for w  and h is 16.
  225.  
  226.  
  227. Notes on some '.pat' files.
  228. hline.pat    A horizontal line.  This gives an interesting recursive 
  229.              explosion.
  230. hline1.pat   Like hline.pat, but with live-live-dead-dead pattern repeated
  231.              along one side.  Does not behave at all like hline.pat.
  232. hline2.pat   Like hline1.pat, but the added pattern is two live and three
  233.              dead cells adjacent to the line.  Try it to see what happens.
  234. vline.pat    Single vertical line.
  235. box.pat      A large rectangle of single lines.
  236. box1.pat     Like box, but with two diagonals added.
  237. Start.pat    A little of everything in this one.  The lower left corner is
  238.              the thing to watch.  A 14-cycle edge galumpfer and a 15-cycle
  239.              oscillator eventually reach a phase relationship where they
  240.              interfer with each other and trigger the "fuse" which
  241.              ultimately destroys almost everything.  Finally settles down
  242.              at about generation 2500.
  243.  
  244. Enjoy.  I think this beats 100,000 dominoes any day.
  245.  
  246. Dave Storer
  247. 2916 Mansfield Ave. SE
  248. Cedar Rapids, IA 52403
  249.  
  250. Compuserve   71420,2672
  251.  
  252. P.S.  Things which this program needs to improve.
  253.    1.  A lens system.  After an hour of building patterns, you get retina
  254.        raster burn.
  255.    2.  A glider gun pattern.  I know these exist, but I haven't had time
  256.        time find one.
  257.