Clicking "Start" creates continously new generations of your seed while "Step" creates just the next generation. A running game is stopped by clicking "Stop" button. "Clear" kills live cells. "Save Buffer" stores your current configuration. This is handy when you are experimenting with a complex pattern. Store some basic pattern into the buffer, alter the pattern and run it to check if something interesting appears. Since the basic pattern is stored you don't need to create it every time by hand. When you store a pattern into the buffer its previous contents are first stored into another buffer, you can load it onto the board by clicking "Previous Buffer". It is often easier to edit complex patterns if you know the row and column coordinates of the cell the cursor is pointing at. Doubleclick the board to set this feature on, doubleclicking again sets it off.
"Slim" has changed. The previous version killed every live cell having all of it's 8 neighbours alive, but since a cell lying in a pattern's boundary can have at most 5 live neighbours it left often an annoying contour line. Currently "Slim" kills a cell if all of its neighbours situating in the bounding box of the pattern are alive. Note that if a cell is a corner cell of the pattern's bounding box it is killed if it has 3 live neighbours. The role of the bounding box is in that "Slim" was originally designed to destroy the large blocks of live cells that "Bbc" often creates. "Trail" marks the cells a pattern visits when run. Load first a pattern, click then "Trail" and then "Start". Since there is no easy way (?) to decide programmatically whether a pattern (i.e. automaton) has stabilized you must do that by a visual inspection. When you now click "Stop" button, the resulting pattern is loaded on the board. I've used this feature to study the differences between some reactions, but it might also be of some theoretical value. Since iterating "Trail" obviously stabilises eventually, it could be used to divide in a nontrivial way the set of the distinct patterns of a given board (automaton) into distinct classes, two patterns belonging into the same class if and only if iterating "Trail" operator on them stabilises on the same pattern. Because of translation and other symmetry problems encountered when defining the "sameness" of two patterns, formalising this might be non-trivial, however. "Rerun" loads the seed of the previous run. It is handy when you see an interesting phenomenon while running an unbuffered pattern.
To resize the board enter first new sizes for rows and columns into the the textfields. Here size refers to the number of cells in a row or a column and it may vary from 16 to 400. For example,if you choose 60 for rows and 40 for columns then every row will be 40 cells wide and every column 60 cells high. Please note also that when I speak of a board of nxm pixels then n refers to the number of rows and m to the numberof columns. Clicking "Resize board" finishes resizing. The preferred size of the board is 400x400 pixels. To understand how the true size of a new board is defined some pixel counting can't be evaded. Let's assume that we want the new board to have 200x200 cells. Since 2*200 equals 400, every single cell can occupy a square of 2x2 pixels. The match is perfect and the true size of the board equals the preferred size of 400x400 pixels. But if we want to have a new board of, say 201x201 cells, the situation is totally different. Since 2*201 is greater than 400, height and width of a single cell must be lesser than 2 pixels, or exactly one pixel. Hence the true physical size of this board is 201x201 pixels or about a fourth of the preferred size.
You can load patterns from files and also save your own patterns. 'RLE' is currently the only fully supported file format but "jlife" and "qlife" can now read also "Life 1.05" files. The file extension of "RLE" files should be 'RLE', ignoring case. Unfortunately, there are archives of "RLE" files with 'lif', or 'life' file extensions. You must change these extensions to be able to load the files. If you have perl installed in your system you may use "lifextconv.pl" that ships with current releases of both "jlife" and "qlife". Go to the directory where the files to be converted are situated and issue the command 'lifextconv.pl *'. It should be safe to use since the script checks that the correct "RLE" fieldsize line is found. Most pattern archives in the "Web" are intented to be used with "Life"-implementations running in infinite or very big finite grids. Please read carefully all accompanying pattern information. Individual patterns are often commented in their definining files. By default, patterns are located in "patterns" subdirectory under your working directory, but you can create new subdirectories there and also symbolic links are possible. Some pattern files that ship with this release are commented in "pattern.html" here. To load a pattern onto the board click "Load"-button and choose your pattern in the file dialog. To save the current pattern of the board as a file click "Save"-button and enter a suitable name. The file extension must be 'RLE'. "RLE" is handy when you want to send patterns via email. To learn it and other file formats used in "Life" and in other cellular automata you may visit here.
"Bbc" transforms the current pattern to its bounding box complement. Bounding box is the smallest rectangle containing your pattern, i.e. it is the intersection of the rectangles containing the pattern. Taking complement means here that the state of every cell is flipped. "Skip" lets you bypass repainting a number of generations. Writing some long running boat designs would have been much harder without this feature. To see how it works load for example "bd-9574.RLE", click "Skip" and enter "8000" into the inputdialog. Wait till skipping is finished and then click "Start".
"Sym" menu lets you transform the current pattern more symmetrical. We transform the whole grid so that the initial position of the pattern is important.This gives us more flexibility since we can move the original pattern by arrow keys. Another possibility would be to transform the pattern "in place" i.e. in its bounding box. I'm going to add this feature in the next major release. Because of our rectangular board we are mainly interested in rectangle and square symmetries, but since we don't have the objects of plane geometry, for example points and segments between them at our disposal we must modify the definitions of various symmetries.(Note that in the context of "Game of Life" cells have no internal structure, they are simply live or dead.) Consider a rectangular grid where the number of rows is r and number of columns is c. By C(i,j) we denote a cell in i:th row and j:th cell. If you find it difficult to think cells to be live/dead values you may very well think them to be just black/white squares. The numbering begins at 1 so that this should be familiar to everyone who knows matrices. A mapping from the set of cells of the grid to itself is a horizontal reflexion if C(i,j) is mapped to C(i,c - j + 1) for all i,j: 1 <= i <= r, 1 <= j <= c. Consequently, a pattern is said to be horizontally symmetric if it is invariant under the horizontal reflexion, i.e. if for all i,j: C(i,j) is live exactly when C(i, c - j + 1) is. Note that if the initial pattern is not horizontally symmetric then its image under the reflection is not either. To symmetrize a pattern we combine it and its image so that in the resulting pattern a cell is alive if it is alive in the initial pattern or in its image. The finiteness of a universe causes centering problems. Let's denote width and height of a pattern by ncols and nrows, respectively. Obviously, the pattern can be centered properly only if nrows is even/odd when r is even/odd and if ncols is even/odd when c is. If you get confusing results this is the most probable cause. In these cases a possibility to symmetrize a pattern "in place" would be useful. If you want symmetrize your pattern "in place" you can do that by resizing the board properly. Vertical reflection maps C(i,j) to C(r - i + 1, j) and the corresponding symmetry is defined accordingly. Diagonal reflection is a bit different. It maps C(i,j) to C(j,i) or the grid is "transposed" in matrix language. While horizontal and vertical symmetries are rectangle symmetries this corresponds to a square symmetry and it can be always performed only if r equals c. However, since we are interested only in live cells we try to perform the operation when it is possible. If you are interested in the exact conditions take a look at the source ( function 'pdSymmetrize()'in "jlife.java" or in "life.cpp"). In antidiagonal reflection C(i,j) is mapped to C(c - j + 1, r - i + 1) or the reflection axis is the minor diagonal. The corresponding method in the source is 'mdSymmetrize()'. Choosing a rotation by 90 degrees doesn't result in a pattern that is invariant under this rotation. This is because the order of the transform is four and not two as is the case with the above reflections. In this rotation C(i,j) is mapped to C(c - j + 1, i) If you want a pattern to be invariant under rotations by 90 degrees choose first rotation by 90 degrees and then by 180 degrees in "Sym" menu. Rotation by 180 degrees maps C(i,j) to C(r - i + 1, c - j + 1) and is always possible, contrary to the former rotation. The resulting pattern is also invariant under rotations by 180 degrees since the order of this rotation is two (applying this rotation twice results in rotating the pattern 360 degrees, which is the identity transformation). A rotation by 270 degrees is very similar to a rotation by 90 degrees, the pattern is just rotated 90 degrees clockwise. If you wonder why a pattern and its image are combined here is an explanation: Running a pattern and for example, its horizontally mirrored image results in two patterns that are each other's horizontal mirror images (at least in torus, but this is not true in general).
In "Edit" dialog you can delete and move subpatterns. To select a subpattern encircle the cells with a broken line of red cells by dragging with mouse. The algorithm that checks whether a given cell is inside the encircling line is quite simple and it works correctly only if the line is closed and as convex as possible. You shouldn't try to select too complex a pattern but to do the job in several small steps instead. When deleting the default is that the cells outside the contour line are deleted but you can control that with dialog's radiobuttons. You can always cancel your selection by clicking "Cancel" button. To move a subpattern select it first and then press one of the arrow keys. This turns the selected cells red and you can now move the cells into the position of your choice. Clicking "Cancel" cancels your selection and the moved cells are integrated into the grid. If you want to drop a copy of the selected subpattern in an intermediate position keep "Ctrl" key pressed down when you press an arrow key. Close the dialog by clicking the "Close" button. Both "Sym" and "Edit" are little tested. Please, be cautious.