Conway's Game of Life XL Screen - Raspberry Pi Project

by lonesoulsurfer in Circuits > Microcontrollers

4985 Views, 26 Favorites, 0 Comments

Conway's Game of Life XL Screen - Raspberry Pi Project

Conways Game of Life - Handheld Colour V3
MAEU7411.JPG
ODCK4183.JPG
NKPH4912.JPG
RHAI4561.JPG
UFBO4238.JPG
YBPS9553.JPG
VFNX1441.JPG
YEHH4877.JPG
REQT4373.JPG
1.jpg

I'm back again with a new and improved version of my Conway's Game of Life Coloured Version. This biggest and most obvious improvement is the size of the TFT screen. The Game of Life is meant to be played on a large field and this screen measures 3.5" compared to 2" which is what I used in the last coloured screen build.

For those wondering what the hell is Conway's Game of Life - here's a description I used in my last build

The Game of Life is a cellular automation created by mathematician John Conway. It's what is known as a zero player game, meaning that its evolution and game play is determined by its initial state and requires no further input. You interact with the Game of Life by creating an initial configuration and observing how it evolves.

The game itself is based on a few, simple, mathematical rules consisting of a grid of cells that can either live, die or multiply. When the game is run, the cells can give the illusion that they are alive which is what makes this game so interesting.

So what do you get in this build?

My Game of Life Colour Arcade is a feature-rich cellular automaton and arcade gaming console built on a Raspberry Pi Pico (RP2040) with a 3.5" 480×320 colour TFT display and six buttons.

At its core is Conway's Game of Life (GOL), but the project goes far beyond the classic GOL— it includes over a dozen simulation modes and 13 preset patterns, from iconic spaceships like the Coe Ship and MWSS to methuselahs like Acorn and R-Pentomino, glider guns, and oscillators. A custom edit mode lets you draw your own starting patterns cell by cell.

Beyond Conway's rules, the device runs six alternative cellular automata: Day & Night, Seeds, Brian's Brain, Cyclic CA, Wireworld, and Langton's Ant, as well as Wolfram's 1D elementary automata with all 255 rules. A GOL Rule Explorer lets you define custom birth and survival conditions and watch them evolve in real time.

Visual features include age-based colour gradients, soft fade trails, grid overlay, a population counter, and three cell sizes. Settings like brightness, speed, and sound are all adjustable in-game.

On top of all the simulations, the device doubles as a mini arcade cabinet with three games — a Star Wars game of my own design, Breakout Beyond, and Gyruss — all navigated from a clean scrolling menu system.


Supplies

IMG_E3437.JPG
IMG_E3492.JPG
IMG_E3450.JPG
IMG_E3455.JPG
IMG_E3462.JPG
IMG_E3447.JPG
IMG_E3440.JPG
IMG_E3482.JPG

I have included a PDF of the parts list with links for all of the parts which you can find on this step in case you want to print it out etc. Unlike the last build, I have used more through hole components. Firstly, to make it easier to build, and second, I have included a back to this now which covers the solder joints.

The PCB and front panel information can be found on the next step

PARTS:

Raspberry Pi Pico Zero X 1 - Ali Express

Charging & voltage step-up module X 1 - Ali Express

TFT Display 3.5inch ST7796S/ST7796U LCD Display 1 - Ali Express

Battery - I like to recycle old mobile batteries on these builds. You can also buy them and this one would work fine - Ali Express

Momentary switches X 6 - Ali Express

On/Off Switch X 2 - Ali Express

Buzzer - Ali Express

Micro Momentary Switch - Ali Express

Male Pin Headers - Ali Express

Low profile female pin headers - Ali Express

M2 Screws - Ali Express

M2 Spacers - Ali Express

Downloads

Getting the PCB & Front + Back Panels Printed

IMG_E3429.JPG
IMG_E3432.JPG
Front Panel - Kicad 3D.png
Schematic.png
Board.png

We all have different levels of knowledge, so when it comes to a build like this I want to make sure that I'm providing enough information so anyone with basic soldering skills can make it. That includes ensuring there are instructions on how to get your own PCB's printed (which is super easy!).

So with that said, the first thing you will need to do is to get the front panel and PCB printed. I use JLCPCB (not affiliated) to get this done. The front and back panel are actually just PCB's without any components included! The design on the panels is done in a program called Inkscape (available free) and the actual panel itself (the outline, drilled holes etc) is done in Fusion 360 (also free for now...)

The files that you need to build your own Game of Life can be found in my GitHub page. This includes the parts list, Gerber files for the PCB & front panel, schematic, Code etc. Download all the files to your computer

STEPS:

  1. Download all of the files from my GitHub page to your computer and send the zipped Gerber files off to the PCB manufacturer of choice such as JLCPCB who will print the PCB and front panel for you.
  2. If you have no idea what any of the above means , then check out the Instructable I made on how to get your broads printed which can be found here.

A Note on Changes to Design

Presentation1.png

This build is the first iteration and I have made a number of improvements to the design which I have listed below.

PCB and Panels

  1. I have included 2 extra screw connections in both the top corners. This helps makes the build a lot secure and stronger.
  2. Moved components where possible, away from the edge of the PCB. I thought that this might help if someone wants to look at 3D print a case. Switches etc all remain easily accessable
  3. I changed the orientation of the charging module
  4. Moved the slide switch to isolate the charging module to the side of the panel

Adding the Screen to the Front Panel

YECW5123.GIF
IMG_E3458.JPG
QEGC8576.GIF
GNRB9599.GIF
AYPG5889.GIF
IMG_E3460.JPG
IMG_E3465.JPG
IMG_E3476.JPG
CVVJ2322.GIF
DOBC9281.GIF
FDNB6008.GIF
KWUL7492.GIF

The following step ensures that you can remove the front panel easily and without having to de-solder anything. This is important, especially for maintenance, battery changes, troubleshooting etc. You may notice that in the images, the screws I used are quite long. I changed these out to shorter ones that just managed to fit. You can use long ones but you will need to trim them at some stage.

STEPS:

  1. First, trim the tops of the header pins where they are soldered. You just want to remove a small bit of the top of the header pin so they won’t interfere with the front panel.
  2. In the front panel, there are 4 holes where the TFT screen will be attached. Add a 20mm M2 screw (I like to use hex socket head screws) to each and then add a M2 nut to secure the screws into place
  3. Now, place the screen on top of the screws and align it to the front panel. The screen should sit flat to the front panel as the nuts you added earlier act like spacers.
  4. Now - you need to add a small M2 spacer (5mm) to each of the screws. Use the smallest one in the assorted pack that I have recommended to get in the parts list
  5. Remove the plastic section off the male header pin. This will ensure that they fir right in the female header pin
  6. You can now add the low profile female header pins to the male ones on the TFT screen and do a test fit. You will need to trim the male header pins a little in order for them to sit right in the female header. What I usually do here is, lay a female header pins on top of the male ones and mark out how much to cut of the male header pins. It probably about 3mm that you need to remove.
  7. Don’t solder the female header pins yet to the PCB, we’ll do that near the end


Adding the Raspberry Pi Zero

IMG_E3479.JPG
IMG_E3480.JPG

STEPS:

  1. This is straight forward. Add male header pins to the Pi. I like to solder 1 leg into place for each side before I commit to soldering the rest.
  2. You can then add it to the PCB and solder the rest of the pins to the Pi. This will ensure all of the pins are straight
  3. Now you can solder the Pi to the PCB

Adding the Switches & Buzzer

IBYM8149.GIF
IMG_E3486.JPG
IMG_E3484.JPG
IMG_E3485.JPG
IMG_E3488.JPG
IMG_E3489.JPG
CNMG8303.GIF

STEPS:

  1. First, solder both the slide switches to the PCB. you might be wondering why I have added 2 slide switches? One is an on/off switch and isolates the battery. The other is used when charging and isolates the Raspberry Pi. If I just had the switch to the Raspberry Pi, then the voltage regulator used in this build would slowly drain the battery as it draws a very small amount of power in standby.
  2. Now you can add the momentary switches. I have changed these from being tactile to silent momentary buttons. Tactile ones can hurt your fingers are some time and the ones in this build are softer and I think gives the game a better finish.
  3. There is also a SMD momentary switch that is included to reset the Pi. you don't really have to include this if you don't want to - up to you.
  4. Place the buzzer into the holes in the PCB, making sure that it is orientated right ( there is a plus symbol on top of the buzzer which needs to be on the left when soldering it into place.
  5. Do a test fit here as well just to make sure everything is going right.

Adding the Charging/boost Module

IMG_E3495.JPG
RHRH7743.GIF
IMG_E3497.JPG
UZTI2680.GIF

The charging and voltage booster module is a great little board. It allows you to add say a 3.6V battery like a mobile one, and you can increase the output voltage via a small potentiometer located on the board.


STEPS:

  1. First, lets set the output voltage to 5V from the Charging & voltage booster module. Connect the module up to a power source (this could be mobile phone battery, variable power source or whatever you have around, as long as it is lower than 5V’s)
  2. Now with a multimeter, check the voltage output. You need to try and get as close as possible to 5V’s so turn the potentiometer until you reach 5Vs.
  3. Now you can add the module to the PCB. I added a little superglue to the bottom of the board to ensure it was secured into place
  4. Add some solder to each of the solder points on the module and then add some wire from a resistor leg to each solder point.
  5. Bend the wire down so it is touching the solder pad on the PCB and trim.
  6. Add solder to the solder pad on the PCB and connect the wire to each. This will give you a good strong connection.


Adding the Battery

IMG_E3441.JPG
IMG_E3498.JPG
IMG_E3510.JPG

Now you can go ahead and add the rest of the components to the PCB

STEPS:

  1. To add the battery, first add some solder to the positive and negative solder points on the battery. Make sure your soldering iron is hot when doing this
  2. Now add a resistor leg to each solder point and bend so they are lying flat with the battery.
  3. Add a little superglue to the battery and glue into place.
  4. Trim the wire if necessary and then solder onto the solder points on the PCB

Soldering the Female Header for the Screen to the PCB

FZS49D7MMTQWNMW.jpg
EWQD7764.GIF

Ok - nearing the end now of the build. The last thing to do is to solder the female pins for the screen to the PCB.

STEPS:

  1. Carefully place the front panel into place. Make sure that the screws align to the holes in the PCB and once pushed into place, ensure the pins on the female header pins (which should be on the male header pins connected to the TFT screen) align to the holes into the PCB. You might need to push them slightly with a small screwdriver to align them.
  2. add 6 X nuts to each of the screws to secure the front panel to the PCB. You will be adding the back panel in the next step
  3. Once the screen is in place, do a final check of everything before soldering the female header to the PCB.
  4. Now you can solder the legs into place.
  5. Before you start to think about adding the bottom panel and adding nuts to the screws, lets go and add the code to the Pi

Adding the Back Panel

IMG_E3503.JPG
IMG_E3504.JPG
OMOP6962.GIF

In this build, I added a back panel. So in total there is a front panel, PCB and back panel. I did this for a couple reasons. first, it ensures that non of the solder points are being touched with your fingers which can cause shorts, it is more comfortable to hold and I wanted to make this easier to build then the version beforehand which had a lot of SMD parts. The only concern is the additional cost of getting the back panel printed. However - I think it is worth it.

STEPS:

  1. The screws used should just have enough thread left after you add the back panel to attached a nut
  2. Carefully screw a nut to each of the ends of the screws. I found that 2 of the screws were just too short so I didn't bother adding a nut to these. The back cover is securely on so it won't matter.
  3. The other option is to add longer screws and then cut them to size.

How to Upload to Raspberry Pi Zero

Screenshot 2026-03-19 171858.png

Download the GitHub Files.

If you haven't installed Arduino on your computer, then this is the first thing you should do. Just follow the below instructions which are straight forward and you wont have any issues with loading the code to the Raspberry Pi Zero. If you find that you are having issues, then ask Claude (AI) for help. This is what I do when I get stuck and it always manages to sort it out for me!

STEPS:

  1. Install Arduino IDE. Download from https://www.arduino.cc/en/software
  2. Install version 2.0 or newer (recommended)
  3. Install RP2040 Board Support
  4. Open Arduino IDE
  5. Go to File → Preferences
  6. In "Additional Board Manager URLs", add:

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

  1. Click OK
  2. Go to Tools → Board → Boards Manager
  3. Search for "pico"
  4. Install "Raspberry Pi Pico/RP2040" by Earle F. Philhower
  5. Install Required Libraries
  6. Go to Sketch → Include Library → Manage Libraries and install:
  7. Adafruit GFX Library
  8. Adafruit ST7735 and ST7789 Library
  9. Time to upload the code
  10. Select the Board
  11. Go to Tools → Board → Raspberry Pi RP2040 Boards
  12. Select "Waveshare RP2040-Zero"
  13. Configure Settings. These need to be set under tools before you upload the sketch
  14. Tools → CPU Speed: 133 MHz (default)
  15. Tools → Optimize: Small (-Os) (default)
  16. Tools → USB Stack: "Pico SDK"
  17. Connect Your Board to the computer
  18. Plug USB cable into RP2040-Zero
  19. Board should appear as a COM/serial port
  20. Select Port
  21. Go to Tools → Port
  22. Select the port that appears (usually shows as "RP2040" or similar)
  23. Click the Upload button (right arrow icon)
  24. Wait for "Done uploading" message

In Depth Review of All the Game Functions

LDAD7848.GIF
EKFB7789.JPG

In-Game Controls (All Simulation Modes)

Up - Increase simulation speed

Down - Decrease simulation speed

Left - Cycle cell size (Small 3px → Normal 4px → Large 8px)

Right - Reset / regenerate the current pattern

Up + Down - colour mode

SET (hold) - Start simulation from edit mode

SET (hold, running) - Return to edit mode (Custom/Seeds/Brian's Brain only)

B (short press) - Return to menu

B (hold ~1 second) - Show/hide rules and information panel


Tools Menu

  1. Grid Lines — overlays a faint grid matching the current cell size
  2. Population Counter — shows live cell count and generation number during simulation
  3. Trail Mode — dying cells leave a soft 20-step fade trail rather than disappearing instantly
  4. Colour Mode — age-based colouring (young cells are one colour, older cells shift through the spectrum)
  5. Toroidal World — when on, edges wrap around so the board is a torus; when off, edges are hard boundaries
  6. Brightness — four levels (25%, 50%, 75%, 100%)
  7. Auto-Cycle / Screensaver — automatically switches to a random game mode or Wolfram rule every 300 generations; useful as a display piece
  8. Sound settings (enabled/disabled, three volume levels) are also accessible here and saved to EEPROM.


Hardware & Setup

The device runs on a Raspberry Pi Pico / RP2040 connected to a 3.5" ST7796S/ST7796U TFT display (480×320 pixels) via SPI. Six buttons handle all navigation and gameplay — Up, Down, Left, Right, SET (A), and B. A buzzer on GPIO 26 provides sound effects and music. Display brightness is PWM-controlled, and all settings (sound, volume, brightness) are saved to EEPROM so they persist between power cycles.

Main Menu

On startup the device boots directly into the main scrolling menu with eight sections:

  1. Presets — hand-crafted Conway's Life patterns
  2. Random — randomised Conway's Life
  3. Symmetric — procedurally generated symmetric patterns
  4. Custom — draw your own pattern
  5. Rule Explorer — define custom birth/survival rules
  6. Alt Games — alternative cellular automata
  7. Tools — display and simulation settings
  8. Arcade — three built-in arcade games

Navigate with Up/Down, select with SET, go back with B.

Conway's Life Modes

Presets (13 patterns)

Each preset loads a famous Life pattern centred on screen. Press SET once to open it, then A to start the simulation. While paused you can press Left to change cell size (the pattern rescales and redraws) or Right to reset it back to its starting state.

1 - Coe Ship. Puffer-type spaceship that leaves debris trails

2 - Gosper Gun. The first glider gun ever discovered — period 30

3 - Diamond. Symmetric expanding diamond pattern

4 - Achim p144. Rare period-144 oscillator

5 - 56P6H1V0. High-period spaceship

6 - LWSS Convoy. Three Lightweight Spaceships in formation

7 - MWSS. Middleweight Spaceship — 8 cells, speed c/2

8 - Pulsar. Period-3 oscillator with 4-fold symmetry, 48 cells

9 - Pentadecathlon. 15 oscillator made from a modified 10-cell row

10 - R-Pentomino. 5-cell seed that runs for 1,103 generations

11 - Acorn. 7-cell methuselah running 5,206 generations

12 - Simkin Gun. Smallest known glider gun — 36 cells, period 120

13 - Queen Bee. Period-30 oscillator, the first of its kind ever found


Random

Fills the board with random live cells at approximately 30% density. Immediately starts running. Press Right to re-randomise.

Symmetric

Generates a random pattern with one of three symmetry types — vertical, horizontal, or rotational — in small, medium, or large sizes. Good for producing interesting structured chaos.

Custom

Puts the board into edit mode with a blinking red crosshair cursor. Move the cursor with Up/Down/Left/Right. Press SET to toggle a cell on or off. When happy with your pattern, hold SET for about a second to start the simulation. Hold SET again to return to edit mode. Press B to go back to the menu.

Rule Explorer

Lets you define your own cellular automaton by setting custom Birth (B) and Survival (S) rules — the same notation used by Life (B3/S23). Choose from 12 built-in rule presets or enter your own bit-by-bit. The simulation runs with your rules applied to a random starting board.

Included preset rules:

  1. High Life, 34 Life, Diamoeba, Replicator, Long Life, Maze, Coral, 2x2, Dry Life, Amoeba, Coagulate, Gnarl

Alternative Cellular Automata (Alt Games)

Brian's Brain

A three-state automaton (On, Dying, Off) producing a constantly moving stream of light-speed "signals." Choose from small, medium, large, or random seedings, or draw a custom starting pattern.

Day & Night (B3678/S34678)

A symmetric ruleset where dead and live regions are interchangeable. Dense regions survive and grow in a way that mirrors the original — creating organic, blob-like patterns.

Seeds (B2/S)

Every live cell dies every generation but any dead cell with exactly two live neighbours is born. Creates explosive, constantly moving patterns that never stabilise.

Cyclic CA

A multi-state automaton where cells cycle through states 0→1→2→…→N→0. Cells advance only when they have a neighbour in the next state. Produces stunning rotating spiral waves. Choose small, medium, or large seedings.

Wireworld

A four-state automaton (Empty, Wire, Electron Head, Electron Tail) that models digital logic circuits. Electrons travel along wires, interact at junctions, and can form AND gates and clocks. The built-in demo includes a working circuit layout.

Langton's Ant

A single ant on a grid follows two rules: turn right on a white cell (flip it black), turn left on a black cell (flip it white). After ~10,000 chaotic steps it spontaneously builds a repeating diagonal "highway." Toggle age-colour mode with Up+Down to see a heat map of how often each cell has been visited.

Wolfram 1D Automata

One-dimensional elementary cellular automata — a single row of cells evolves downward according to one of 255 possible rules. Each rule produces a unique pattern, from pure chaos (Rule 30) to the Sierpinski triangle (Rule 90) to a Turing-complete system (Rule 110). Seven named presets are provided or you can enter any rule number direct


Arcade Games

Accessed from main menu item 8. Three games are available. In all three, press A + B together at any time to exit directly back to the main menu.

Star Wars

A first-person Star Wars game inspired by the 80's arcade game. Progress through multiple stages: Womp Rat Training, Space Battle, Death Star Approach, Surface Run, and the Exhaust Port shot. Features full Star Wars music (Main Theme, Binary Sunset, Imperial March, Victory Fanfare), sound effects, TIE fighters, laser cannons, proton torpedoes, and a dramatic finale sequence. Press B on the title screen to exit.

Controls:

  1. Up/Down/Left/Right — move crosshair / pilot ship
  2. SET — fire
  3. A + B — exit to main menu
  4. Up + Down - in start up screen will take you into a games menu where you can play any of the games or watch the cinematic shorts

Breakout Beyond

A feature-rich Breakout variant with a neon aesthetic. The paddle sits at the bottom, bricks at the top. Features include combo multipliers, spin physics, multiball, shield power-ups, bomb bricks, and hard bricks across 20 levels.

Controls:

  1. Left/Right — move paddle
  2. B — speed boost
  3. SET — launch ball / pause
  4. A + B (hold) — exit to main menu

Gyruss

A circular shoot-em-up inspired by the 1983 Konami arcade classic. Your ship orbits around the edge of the screen shooting inward at waves of enemies that fly in formation patterns.

Controls:

  1. Left/Right — rotate ship around the ring
  2. SET or B — fire
  3. Up (hold) — smart bomb
  4. A + B (hold) — exit to main menu