Game of Life

Overview

Game of Life is an interactive cellular automata playground built to explore algorithmic simulation and front-end performance together. I used Conway’s Game of Life as a known problem space, then treated the project like a production-style app with a modular architecture, automated tests, and continuous deployment to GitHub Pages.

Key Features

I built a playable simulation app with controls, diagnostics, and pattern workflows:

  • Start, pause, single-step, reset, and speed controls for generation playback.
  • Pattern loading and custom board editing for quick experimentation.
  • URL state sharing so current board state can be copied and reopened.
  • Rule toggles (survival/birth variants) to inspect behavior changes.
  • Stats and diagnostics (live cells, births, deaths, generations) surfaced during execution.
  • Theming and localization support in the app shell for a more complete UX.

Screenshots

Conway’s Game of Life

Rules

The universe of the Game of Life is an infinite, two-dimensional orthogonal grid of square cells, each of which is in one of two possible states, live or dead (or populated and unpopulated, respectively). Every cell interacts with its eight neighbours (its Moore neighborhood), which are the cells that are horizontally, vertically, or diagonally adjacent. At each step in time, the following transitions occur:

  1. Underpopulation
  2. Survival
  3. Overpopulation
  4. Reproduction
Game state key
  • Live cell
  • Dead cell
  • Birth (becomes live)
  • Death (becomes dead)

1. Underpopulation

Any live cell with fewer than two live neighbours dies, as if by underpopulation.

Two neighboring live cells die from underpopulation.
Before
Transform
Final
An isolated live cell dies immediately from underpopulation.
Before
Transform
Final
A horizontal pair dies because each cell has too few neighbors.
Before
Transform
Final

2. Survival

Any live cell with two or three live neighbours lives on to the next generation.

A blinker rotates while the center cell survives.
Before
Transform
Final
An L-shape grows into a stable 2x2 block.
Before
Transform
Final
A 2x2 block remains stable across generations.
Before
Transform
Final

3. Overpopulation

Any live cell with more than three live neighbours dies, as if by overpopulation.

A plus pattern overpopulates at the center and expands outward.
Before
Transform
Final
A dense cluster sheds overcrowded center cells.
Before
Transform
Final
A crowded corner cluster loses overpopulated cells.
Before
Transform
Final

4. Reproduction

Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.

Three neighbors reproduce a new center cell.
Before
Transform
Final
A diagonal trio reproduces at center while isolated cells die.
Before
Transform
Final
The mirrored diagonal trio reproduces at center while isolated cells die.
Before
Transform
Final

Patterns

Patterns are organized using the same category model as the live app pattern library, with examples aligned to the Conway wiki taxonomy.

Still Life

Still lifes are stable patterns that remain unchanged from one generation to the next.

Pattern Notes Animated Example
BlockMinimal 2x2 stable structure.
Generation: 0
BeehiveCommon 6-cell still life.
Generation: 0
LoafStable asymmetric 7-cell form.
Generation: 0
BoatCompact 5-cell stable pattern.
Generation: 0
Tub4-cell diamond still life.
Generation: 0
PondLarger stable hollow shape.
Generation: 0

Oscillator

Oscillators repeat a fixed cycle of states over a predictable period.

Pattern Notes Animated Example
BlinkerPeriod-2 line flip.
Generation: 0
ToadPeriod-2 six-cell oscillator.
Generation: 0
BeaconPeriod-2 corner interaction.
Generation: 0

Spaceship

Spaceships translate across the grid while repeating their shape after a set number of generations.

Pattern Notes Animated Example
GliderCanonical diagonal spaceship.
Generation: 0
LWSSLightweight orthogonal spaceship.
Generation: 0

Methuselah

Methuselahs begin as small seeds but evolve for many generations before stabilizing or vanishing.

Pattern Notes Animated Example
R-pentominoClassic long-running seed.
Generation: 0
DiehardDies out after many generations.
Generation: 0
AcornSmall seed with long evolution.
Generation: 0

Additional wiki categories for advanced exploration:

  • Guns: Gosper glider gun, Simkin glider gun
  • Puffers: puffer train variants
  • Breeders: puffer-type breeder constructions