Square Cell

The Program

This program was written to explore 2D cellular automata (CA) using rules from the Weighted Generations rule family and an extended 24 cell neighborhood..

The program can be used to find interesting rules. It does this by generating random rule parameters and then running the resulting rule starting with a randomly generated pattern. This process is controlled by simply clicking a New Rule menu button. Options specifying how the rule parameters are to be modified are provided.

Patterns generated by running a CA simulation can be saved to and loaded from pattern files.

The program provides controls which can be used to edit the CA simulation display and analyze the simulation patterns.

The program's main display is shown below.

The program will execute on a PC running Windows XP, is written in Delphi 5 and uses the Graphics32 library.


First download SquareCell.zip from here. The zip archive contains the program source code, the executable file SquareCell.exe and this document. Unzip the achieve into a directory of your choice and place an icon on your desktop linked to "..\Square Cell\Version 2\SquareCell.exe".

Simulation Control

A 2D cellular automaton is a collection of cells on a square grid that are colored according to their state. The cell collection evolves through a number of discrete time steps according to a set of rules based on the states of neighboring cells. The rules are applied iteratively for as many time steps as desired. The program represents a cellular automaton on a rectangular display divided uniformly into squares. Each time step the program examines each cell in turn and changes it's state by applying a rule to the cell's state and the states of it's 24 neighbors.

To get started, execute the program and click the Rule menu. This will display the Weighted Generations rule dialog set to the well known rule Star Wars. Click Ok to close the dialog . Now click the Random menu to set the cells to random states and click the Start menu to run the simulation. Stop the simulation by clicking the Stop menu and step the simulation by clicking the Step menu. Clear the display by clicking the Clear menu. This sets the state of each cell to 0.

Now click Start and repeatedly click New Rule. This simple process together with setting new rule options, described below, randomly selects new rules in the Weighted Generations rule family and runs them.

Cell patterns may be saved to a pattern file by clicking 'File | Save' and restored from a pattern file by clicking 'File | Open'. The pattern files contain the rule string and the collection of cell states.

Cell patterns may be analyzed to determine if they are ships, oscillators or are stable. The message box shown below displays the result after clicking the Analyze menu button with Conway's well known glider displayed.

The Rules

Weighted Generations

Specific rules in the family of rules called Weighted Generations are selected by setting parameters in an input dialog window shown below. This dialog window is displayed by clicking the Rule menu.

Each cell can be in one of 16 possible states in the range 0..15. Each iteration, the states of a cells 24 neighbors are multiplied by appropriate State and Position Weights and then counted. For example, if the NW neighbor is in state 3 and the State Weight corresponding to state 3 is 5 and the NW Position Weight is 2 then the NW neighbor will contribute a count of 10 (5 * 2) to the cells neighbor count. Both the State and Position Weights are in the range -10..10. If the C Position Weight is non zero then the cell may contribute to its own neighbor count. For example if the C Position Weight is -3 and the cell is in state 2 and the State Weight corresponding to state 2 is 3 then the cell's neighbor count will be decremented by 9 (3 * -3).

If a cell is in state 0 then it changes to state 1 if its neighbor count is included in the Birth Group. Otherwise the cell remains in state 0. If a cell is in state 1 then it remains in state 1 if its neighbor count is included in the Survival Group. If a cell is in state 1 and the cell's neighbor count is not included in the Survival Group and the number of states is greater than 2 then the cell's state changes to state 2, otherwise it changes to state 0. If a cell is in state n where n >= 2 and the number of states is s, then it changes to state n + 1 if n + 1 < s, otherwise the cell returns to state 0.

The Number of States, the State Weights and the Position Weights are modified by clicking the associated up or down arrow controls. The Birth and Survival Groups are provided with edit and button controls to add, delete and clear entries.

Display Editing

The State Selector popup dialog shown below is displayed by Right clicking the display with the 'Shift' key down. This dialog shows all possible cell states. To select a particular state simply click the appropriate square. Individual cells on the display may then be set to the selected state by clicking them.

A group of cells is selected by clicking the display with the 'Ctrl' key down. The first click marks a corner of the area to be selected and the second click marks an opposite corner. A third click clears the selection. A selected cell group may be manipulated by controls on the Selection Control popup dialog shown below. This dialog is displayed by Right clicking the display.

The cells inside the selecting rectangle may be set to state 0 by clicking the Clear Inside button. Similarly, the cells outside this rectangle may be set to 0 by clicking the Clear Outside button. Selected cell groups may be flipped about the X or Y axis or rotated through 90 degrees. All the cells that are not in state 0 may be selected by clicking the Select All button. As a convenience for group rotation, all cells that are not in state 0 may also be selected by surrounding them with a square by clicking the Select Square button. Control buttons are also provided to center the selected group of cells, set the selected cell states to randomly generated values and save the selected cells in a pattern file. Selected cell groups may be moved or copied by dragging them. The setting of the two radio buttons on the Selection Control dialog specify which function is active.


The Options dialog shown below is displayed by clicking the Options menu.

Each of the colors associated with the cell states, the cell grid and the cell group selector can be changed. Simply click on the appropriate square to display the color selector and choose a color.

The cell size in pixels can be set to any number in the range 1..15 using the Grid Size selector.

The number of simulation steps executed when the Step menu is clicked can be set using the Step Size edit control.

When either the display cells or a selected group of cells are set to random states (colors), the cell density can be set using the Density selector.

For the Weighted Generations family, the new rule function generates random State Weights, random Birth Counts and random Survival Counts according to the settings of the check boxes in the New Rule Controls group. If a check box is checked, random values are generated and replace the current values and if the check box is not checked the current values are unchanged.


The process of generating interesting rules by first clicking the Start menu and then repeatedly clicking the New Rule menu has worked quite well. The code executed by the New Rule function is in the GenerateNewRule procedure in the file WeightedGenerations.pas. This code is somewhat primitive. Recode this procedure to implement a more sophisticated algorithm.


  1. MCell a 1D and 2D Cellular Automata Explorer Program by Mirek Wojtowicz
  2. MCell Extensions and Pattern File Collections by Brian Prentice
  3. Tiled Cellular Automata Program by Brian Prentice
  4. Graphics32 Library


Please send any comments, suggestions or program enhancements to:

Brian Prentice.