Conway's Life is a form of artificial life (specifically, a cellular automaton)--one of the simplest there is. There are only a few rules:
That's all there is to it. Yet fascinating behavior arises from these simple rules. Gliders, for instance.
It turns out, if you take the little five-cell shape to the left and apply the rules of Life to it, it glides diagonally across the grid. That is, it transforms in such a way that it reproduces itself at an offset every four generations. No one invented gliders. They just happen. In fact, draw some random cells in a Life program and hit "start," and it's a good chance you'll see gliders form spontaneously. This is just the beginning: Conway's Life has a whole menagerie of recurring patterns.
Much more detailed introductions to Conway's Life are available on the web.
Here are a few links worth following:
You can play Conway's Life with nothing more than a pencil and a sheet of graph paper, but it's a lot faster to use a computer. That's where LucidLife comes in. It provides you with a scrolling 1 million x 1 million cell grid, which should be enough space for even the most complex patterns, and an optimized algorithm which can run up to hundreds of generations per second. At any time, you can save the contents of the grid to a file for later use. There are also a number of preset patterns bundled with the application.
For Life newbies, getting started is easy. Scribble generously on the Life canvas, then push the play button. You'll see various "still lifes" (unchanging shapes), blinkers, and gliders coalesce out of the ensuing chaos. If you're lucky you might see a lightweight spaceship or a pulsar. Now try to figure out why it happens!
Once you've experimented on your own for a while, you may want to explore what
others have created in the Life Pattern Archive.
LucidLife comes with the Life Pattern Archive, a public-domain collection amassed by Alan Hensel. After installation, the patterns are available from LucidLife in a sidebar on the main window. Another collection, Jason Summers' JSLife, is also available and can be selected as an option. The Life Pattern Archive has a good range of patterns from simple to complex; JSLife contains more esoteric, unusual, and recently-discovered patterns.
Most of the patterns have descriptions provided by their authors, which you can read after loading by selecting File->Description. If you get lost in the terminology (rakes, sawtooths, corderships...), the online Life Lexicon will clear things up.
A typical Life pattern explodes chaotically, then gradually settles down into small groups of predictable cells. However, Life enthusiasts have engineered patterns that are anything but typical, and most of the included files fall into that category. There are fleets of ships, glider guns, complex oscillators, puffer trains, breeders that grow at quadratic speed, patterns that build other patterns, and perhaps the most anomalous pattern of all, "Max" (pictured at left). To get an idea of just how delicately balanced Max is, let it run for awhile, then erase one little dot in the middle.
Then there are the computational patterns, of which perhaps the most impressive is a functional (though slow) prime number sieve. As it turns out, Life is Turing-Complete: given a large enough grid and enough time, it can perform any computation that a modern computer could.
Here are a few of the author's current favorites:
For more details on the contents of the Life Pattern Archive, see Alan Hensel's notes.
The LucidLife main window consists of a scrollable viewport in the middle, a menubar and toolbar at top, a scrollable sidebar at the left, and a status bar at the bottom. Many of these components can be disabled from the "View" menu, and a fullscreen mode is available.
Some patterns are sorted into sub-directories--in fact, the included collections (Life Pattern Archive and JSLife) are entirely hierarchical. Directories are displayed with trailing slashes. Click on a directory to display its contents in a clickable list below the main sidebar.
In addition to the visible scrollbars, there are a number of other ways to move the Life viewport:
Some Life patterns (e.g. Jaws, Catacryst) are very sparse--you may not even see any cells in the viewport when you first load them. For these, the View->Find Active Cells command is useful. It will locate an area containing live cells and center on it, preferring active regions to those which have become stable (still life) or oscillatory.
Zoom operations are available from the "View" menu and from the magnifying glasses in the toolbar. At 1:1, the viewport is zoomed all the way out, so that one blue pixel represents one live cell. You can zoom in up to 16:1, which makes operations like drawing much easier. At zoom levels 4:1 and up, a visual grid is drawn to clearly distinguish individual cells.
Zooming may also be accomplished by holding control while using the mouse wheel.
When the Draw () tool is selected, left-click on the grid
to toggle a cell between alive and dead. Drag the mouse
to continue drawing or continue erasing cells. If you drag to the edge of the
viewport, it will scroll with you.
LucidLife supports block cut-and-paste of pattern cells. To select a block of
cells, left click on one corner of the block while using the Select (
) tool, or holding <shift> key, then drag to
the opposite corner. If you drag to the edge, the viewport will scroll with
you, so you can select as large an area as you like.
The selection can then be cut/copied and pasted via the commands in the "Edit" menu (or by using the standard Ctrl-X, Ctrl-C, and Ctrl-V keystrokes). After choosing "Paste", a highlighted rectangle will appear as you move over the grid. Left-click when the rectangle is located where you want to paste. For convenience, Unix-style pasting is also allowed: instead of using the Paste command, simply middle-click on the upper-left corner of the desired region.
If there is a currently selected region when you paste, it will be implicitly copied and used in place of the copy buffer.
Note: LucidLife pasting is "transparent"--only live cells are copied. In other words, empty cells in the source region will not overwrite live cells in the target region.
Start the pattern by clicking the play button on the toolbar. Click the button again to stop. Note that most operations are still available while the pattern is running. In particular, you can draw and cut-and-paste in the middle of a running pattern. Of course, a lone plotted cell will quickly die out!
There are two other ways to advance the pattern: Run->Step (the green arrow in the toolbar) to advance by one generation, and Run->Jump to jump ahead to a particular generation as quickly as possible.
Speed is adjustable, and is set in generations per second. You can adjust speed gradually using the ',' and '.' keys, or directly using the Run->Speed dialog or the slider on the toolbar.
The program will start to drop frames if it finds itself falling behind---that is, the next generation will be computed, but the screen will not update during that tick. This greatly improves performance, especially if you don't have 2D acceleration on your video card, but it makes the animation less smooth. If you want to temporarily disable frame skipping, deselect the "skip frames" check box in the Preferences dialog.
All of the standard commands are available from the File menu: New, Open, Save, and Save As. In addition, the Revert command (R) provides an easy way to "rewind" a pattern back to its saved state. Only one pattern file can be loaded at a time.
You can specify a pattern file on the command line to load it at start-up. If you specify a directory on the command line, it will be set as the pattern collection for the sidebar.
LucidLife supports a number of different pattern file formats, including RLE, Life 1.05, Life 1.06, and XLife. It also has a native format, GLF. Format is auto-detected when loading, while the "Save As" dialog allows you to choose format from a pull-down list. All file formats support a textual pattern description, which can be viewed and/or edited via the File->Description command.
LucidLife only supports the classic rules of life: survive with 2 or 3 neighbors, birth with 3 neighbors. Thus, any special rules directives in pattern files will be ignored.
"Structured" XLife files (containing include directives and/or sub-patterns) are not currently supported. This includes many of the patterns bundled with the latest XLife.
All of these commands (except for Edit->Preferences) operate on blocks of cells. You can select a block by using the Select tool, or by shift-clicking.
A Preferences dialog can be popped up via the Edit->Preferences menu item.
Keybindings are displayed in the menus, but here's a list of the most useful and/or non-obvious ones. Note that NumLock must be on to use the numeric keypad.
Key | Action |
---|---|
S | Start/stop the pattern |
T | Step ahead one tick |
J | Jump to a generation |
D | View/edit pattern description |
R | Reopen the current file |
F11 | Toggle fullscreen mode |
M | Move a block of cells |
C | Choose pattern collection |
P | Edit preferences |
Numeric keypad | Scroll the viewport in 8 directions |
Ctrl-Keypad | Scroll by pages |
Keypad-5 | Recenter at the middle of the world |
Ctrl-+ and Ctrl-- | Zoom in and out, respectively |
1, 2, 4, 8, Z | Zoom 1:1, 2:1, 4:1, 8:1, and 16:1, respectively |
, and . | Slow down and speed up, respectively |
Ctrl-1 through Ctrl-5 | Load a recently accessed file (Ctrl-1 is most recent) |