Conway's Game of Life - Handheld COLOURED Version

by lonesoulsurfer in Circuits > Raspberry Pi

431 Views, 2 Favorites, 0 Comments

Conway's Game of Life - Handheld COLOURED Version

Conways Game of Life - Handheld Coloured Verson
MCHT5886.JPG
LGKY3402.JPG
LMKQ9188.JPG
NQJM2059.JPG

I'm back again with a new and improved version of my Conway's Game of Life - Handheld Version This version has a number of improvements including, coloured screen, more games, different cell sizes and a lot cheaper to make! See below for the full game overview

Instead of using a Adafruit Trinket M0 (which are quite expensive), I've used a Raspberry Pi Pico Zero (which are cheap as chips!). I've also used a coloured TFT screen which are also inexpensive and gives the held held game a heap more options to play around with.

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.

There are actually many types of cellular automation and I have included some in this build.

Here is what you get in this updated hand held, coloured version. see the last step for a more detailed runthrough:

Main Menu Navigation

  1. UP/DOWN: Navigate menu options
  2. A: Select menu item
  3. B: Go back to previous menu


Color Modes

  1. All game modes support color! Press UP + DOWN together to toggle.

Game Rules

  1. Hold button B down for 2 seconds in any game to bring up the rules for that game

Cell Size

  1. There are 4 different cell sizes, from tiny to Large. Whist in a game, press left to change the size of the cell

Tools

Tools Menu Breakdown

  1. Sound: ON/OFF - Toggles all game sounds on or off
  2. Volume: Low/Medium/High
  3. World: Toroid/Open - Controls what happens at the edges of the game board
  4. Toroid = Wraparound edges (cells on the left edge are neighbors with cells on right edge, top wraps to bottom)
  5. Open = Hard edges (cells at the edge have fewer neighbors, no wraparound)
  6. Applies to ALL game modes (Conway's Life, Brian's Brain, Day & Night, Seeds, Cyclic CA)
  7. Default: Toroid (wraparound)
  8. Grid: ON/OFF - Shows/hides grid lines between cells
  9. Only visible when cell size is 3px or larger (not on Tiny 2px cells)
  10. Population: ON/OFF - Shows/hides the population counter overlay during gameplay
  11. Gen: Current generation number
  12. Pop: Current number of living cells
  13. Trail Mode: ON/OFF - Shows fading trails behind cells as they die
  14. In Mono mode = Gray fading trail (white → light gray → dark gray → black over 12 frames)
  15. In Color mode = Colored fading trail using age-based colors


Game of Life Games

PRESET - Classic Patterns

  1. Coe Ship - Spaceship that travels across the board
  2. Gosper Glider Gun - Continuously spawns gliders
  3. Diamond - 4-8-12 diamond pattern that evolves
  4. Pulsar - Achim's p144 oscillator (period-144 pattern)
  5. Glider - 56P6H1V0 spaceship pattern

RANDOM - Chaotic Evolution

SYMMETRIC - Creates symmetric initial patterns with different sizes

CUSTOM - Draw Your Own games


ALT GAMES - Alternative Cellular Automata

BRIAN'S BRAIN

DAY & NIGHT - Complementary rule set where birth/survival rules mirror each other.

SEEDS - "Exploding" automaton where cells live for exactly 1 generation.

CYCLIC CA - Multi-state cellular automaton where cells cycle through 6 states.


RULE EXPLORER - Create Custom Rules

Choose from 9 famous rule variations:

  1. Conway (B3/S23) - Classic Game of Life
  2. HighLife (B36/S23) - Like Conway, with replicators
  3. Maze (B3/S12345) - Creates maze-like patterns
  4. Coral (B3/S45678) - Grows coral-like structures
  5. Seeds (B2/S) - Exploding patterns (same as Seeds mode)
  6. Replicator (B1357/S1357) - Self-replicating patterns
  7. 2x2 (B36/S125) - Stable 2x2 blocks common
  8. NoDeath (B3/S012345678) - Cells never die once born
  9. Diamoeba (B35678/S5678) - Diamond-shaped amoebas


Custom Rules - Create your own rules:

  1. Navigation:
  2. UP/DOWN: Switch between Birth and Survival rows
  3. LEFT/RIGHT: Move cursor (0-8 neighbors)
  4. A (short): Toggle number on/off
  5. B (2 seconds): Start game with custom rules
  6. B: Back to preset menu


Supplies

IMG_3470.JPG
IMG_3436.JPG
IMG_3434.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. 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 2.0 inch OLED LCD Drive IC ST7789V 240 X 320 X 1 - Ali Express

Battery -

Tactile Switch - Ali Express

On/Off Switch - Ali Express

Buzzer - Ali Express

Micro Momentary Switch - Ali Express

SMD Male Pin Headers - Ali Express

M2 Screws - Ali Express

M2 Spacers - Ali Express

Ribbon Wire - Ali Express

Downloads

Getting the PCB & Front Panel Printed

PCB - Image.png
GOL - Front Panel Kicad.png
Schematic.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 panel is actually just a PCB without any components included! The front design is done in a program called Inkscape (available free) and the panel including the drilled holes is done in Fusion 360 (also free!)

The files that you need to build your own Bleep Drum Synth can be found in my GitHub page. This includes the parts list, Gerber files for the PCB & front panel, schematic, Arduino script etc. Download the files to your computer

STEPS:

  1. Send the Gerber files to a PCB manufacturer like JLCPCB who will print the PCB and front panel for you. 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.
  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.
  3. NOTE: The manufacture will include an order number on both the PCB and front panel. It doesn't really matter where it is on the PCB but you don't want it on the front on the front panel!
  4. Over at JLCPCB you can 'specify a location' once the Gerber files have been loaded so click this for the front panel and specify in the comment section that you want the order number on the back of the panel. The manufacturer will add it to the back where indicated.


Adding the Momentary Switches

IMG_3438.JPG
IMG_3439.JPG
IMG_3442.JPG
IMG_3441.JPG

The momentary switches used are SMD ones. Actually, I've ensured that all of the components on the PCB are not through hole ones. This keeps the back of the hand held game clean, stops you from getting pricked by sharp pins etc, and stops any potential grounding of pins that shouldn't be grounded. Plus it just looks a whole lot better!

STEPS:

  1. You need to make sure that you add the ‘up’ and ‘down’ switches first. It just makes it easy if you do it in this order.
  2. Add a little solder to one of the solder pads for the ‘up’ switch.
  3. Place the switch on top of the pads and then heat up the solder to secure it into place. If it looks good, you can then secure the other 3 feet on the switch
  4. Now do the same for the down switch
  5. You can now add the left and right switches into place along with the A and B switches
  6. There is one more momentary switch to add. This is a mirco momentary switch which is to be a rest for the raspberry Pi. I added this so you could easily reset the Pi and put it in Boot mode for when you want to update the sketch


Adding the Charging/boost Module

IMG_3452.JPG
IMG_3468.JPG
IMG_3467.JPG

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 Raspberry Pi Zero

IMG_3447.JPG
IMG_3449.JPG
IMG_3463.JPG

The raspberry Pi Zero is another great little board. It has less GP pins then a normal Raspberry Pi Pico but the same amount of Ram. Plus, as I mentioned earlier, they are pretty cheap at about $4 each.


STEPS:

  1. As everything is surface mount on the PCB, you need to first solder into place some SMD header pins. Add these to both sections on the PCB
  2. Now, you can solder the Raspberry Pi Pico Zero into place on the header pins. Make sure that the USB connector is facing up.
  3. If you wanted to, you could add small, male header pins to the Raspberry Pi so it is removeable

Adding the Rest of the Components to the PCB

IMG_3443.JPG
IMG_3445.JPG
IMG_3472.JPG
IMG_3473.JPG

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

STEPS:

  1. Solder the toggle switch into place. You will note that this has 6 solder points. You can trim off the 3 solder points next to the actual switch if you want to and just solder this into place via the 3 at the back.
  2. Next, lest solder the SMD male header pins for the screen. Now, you need to make sure that you solder these on straight or they won't line up with the female header pins on the screen.
  3. Solder the buzzer into place.
  4. 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
  5. Now add a resistor leg to each solder point and bend so they are lying flat with the battery.
  6. Add a little superglue to the battery and glue into place.
  7. Trim the wire if necessary and then solder onto the solder points on the PCB


Adding the Screen to the Front Panel

IMG_3455.JPG
IMG_3460.JPG
IMG_3461.JPG
IMG_3462.JPG
IMG_3475.JPG
IMG_3478.JPG
IMG_3479.JPG
IMG_3480.JPG
IMG_3485.JPG
IMG_3487.JPG

The screenis not directly connected to the PCB! It is first connected to the front panel using the M2 screws and spacers and then ribbon wire connects the screen to the PCB. Initially I wanted to have the screen connected via header pins but I couldn't get this to work due to the header pins being SMD and the sizing of the ones I had were wrong. I think I'll re-visit this part sometime and look at including ribbon cable connectors to both the PCB and bottom side of the front panel.

STEPS:

  1. The TFT screen that I purchased had the header pins already soldered into place. You will need to remove these if yours is the same. Just heat up the solder on the pin and use a pair of pliers to pull out each of the pins. Make sure you remove as much solder from the top of the holes as well.
  2. Place the screen against the front panel and secure it into place using some M2 X 8mm screws and nuts.
  3. Now add a M2 X 6mm spacer onto each of the screws.
  4. Add an M2 X 4mm screw to the holes in each corner of the front panel in each bottom corner. Don’t add nuts to these, just add a M2 X 8mm spacer to each one.
  5. Now, to test fitment, place the PCB into place and push the screws through the holes in the PCB.
  6. If the buttons fit ok, then you can now move onto attacheding the screen to the PCB.
  7. I used computer ribbon wire to make the connections between the TFT screen and PCB. Trim the wire and tin the ends.
  8. Now make small cuts between each wire - about 8 mm should be fine.
  9. spread the wires out so they align with the solder points on the TFT screen.
  10. Add some solder to the solderpoints on thescreen and then solder each wire to the solder points.
  11. Now you can do the same thing for the solder points onthe PCB. To work out how long you need the wire, place the screen next to the PCB and then cut the wire where it meets up with the solder points on the PCB.
  12. Now test fit the front panel and PCB again. You might need to squeeze the wire and bend it so it lays flat and doesn't add to much pressure to the inside components.


Now you are ready for testing so lets go and load up the Game of Life code to the Raspberry Pi

How to Upload to Raspberry Pi Zero

Screenshot 2026-01-03 153744.png

In 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.

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" (or "Raspberry Pi Pico" if Zero isn't listed)
  13. Configure Settings. These need to be set under tools befoe youupload 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


Attaching the PCB & Front Panel Together

IMG_3493.JPG
IMG_3495.JPG
IMG_3496.JPG
IMG_3498.JPG
IMG_3499.JPG
IMG_3500.JPG
IMG_3505.JPG
IMG_3511.JPG
IMG_3513.JPG

Once the code is loaded, it’s then time to connect the front panel and PCB. Don't worry, once the front panel is connected into place, you can still access the Raspberry Pi

STEPS:

  1. Make sure that the front panel and PCB are correctly pushed together with everything lining-up right.
  2. Now you can add a 4mm M2 screw to each of the holes in the PCB and screw them into the M2 spacers.
  3. That’s it – you have now completed your very own Game of Life – Handheld game console

How to Use the Handheld Game of Life Coloured Version

WVMU0449.JPG
BMNC0044.JPG

Conway's Game of Life - Complete User Guide


Main Menu Navigation

  1. UP/DOWN: Navigate menu options
  2. A: Select menu item
  3. B: Go back to previous menu

During Gameplay

  1. UP: Increase speed (faster generations)
  2. DOWN: Decrease speed (slower generations)
  3. LEFT: Change cell size (Tiny → Small → Normal → Large)
  4. RIGHT: ReB/Regenerate current pattern
  5. UP + DOWN (together): Toggle COLOR/MONO mode
  6. B (short press): Return to menu
  7. B (2 second press): Show/hide game rules overlay

RESET Button (hold 2 seconds): Enter bootloader mode for updates


Edit Mode (Custom games)

  1. D-Pad: Move cursor
  2. A (short press): Toggle cell on/off
  3. B (2 second press): Start game
  4. B: Return to menu


Tools

Tools Menu Breakdown

  1. Sound: ON/OFF - Toggles all game sounds on or off
  2. Volume: Low/Medium/High
  3. World: Toroid/Open - Controls what happens at the edges of the game board
  4. Toroid = Wraparound edges (cells on the left edge are neighbors with cells on right edge, top wraps to bottom)
  5. Open = Hard edges (cells at the edge have fewer neighbors, no wraparound)
  6. Applies to ALL game modes (Conway's Life, Brian's Brain, Day & Night, Seeds, Cyclic CA)
  7. Default: Toroid (wraparound)
  8. Grid: ON/OFF - Shows/hides grid lines between cells
  9. Only visible when cell size is 3px or larger (not on Tiny 2px cells)
  10. Population: ON/OFF - Shows/hides the population counter overlay during gameplay
  11. Gen: Current generation number
  12. Pop: Current number of living cells
  13. Trail Mode: ON/OFF - Shows fading trails behind cells as they die
  14. In Mono mode = Gray fading trail (white → light gray → dark gray → black over 12 frames)
  15. In Color mode = Colored fading trail using age-based colors


Main Menu Options

PRESET - Classic Patterns

  1. Coe Ship - Spaceship that travels across the board
  2. Gosper Glider Gun - Continuously spawns gliders
  3. Diamond - 4-8-12 diamond pattern that evolves
  4. Pulsar - Achim's p144 oscillator (period-144 pattern)
  5. Glider - 56P6H1V0 spaceship pattern


RANDOM - Chaotic Evolution

  1. Unpredictable patterns emerge
  2. May stabilize into oscillators
  3. May die out completely
  4. Game shows statistics when it stabilizes or dies


SYMMETRIC - Creates symmetric initial patterns with different sizes

CUSTOM - Draw Your Own

  1. Step 1: Choose Cell Size
  2. Tiny (2px cells): 160x120 grid
  3. Small (3px cells): 106x80 grid
  4. Normal (4px cells): 80x60 grid
  5. Large (8px cells): 40x30 grid
  6. Step 2: Edit Mode
  7. Red crosshair shows cursor position
  8. Cursor blinks at 4Hz for visibility
  9. White cells = alive, Black = dead
  10. Move with D-pad, toggle cells with B
  11. Step 3: Run
  12. Hold B for 2 seconds to start
  13. While running, hold B for 800ms to return to edit mode
  14. Press B to return to menu


ALT GAMES - Alternative Cellular Automata

  1. BRIAN'S BRAIN
  2. Small: Compact symmetric cluster
  3. Medium: Larger symmetric pattern (35% density)
  4. Large: Very large sparse pattern (18% density)
  5. Random: Scattered center-weighted distribution
  6. Custom: Draw your own pattern
  7. DAY & NIGHT - Complementary rule set where birth/survival rules mirror each other.
  8. Very stable, creates intricate patterns
  9. Day/Night metaphor in color mode
  10. Often runs indefinitely
  11. SEEDS - "Exploding" automaton where cells live for exactly 1 generation.
  12. Random: Auto-generated 4-way symmetric pattern
  13. Custom: Draw your own (choose cell size first)
  14. CYCLIC CA - Multi-state cellular automaton where cells cycle through 6 states.
  15. VrtclSym: Vertical mirror symmetry
  16. 4WayRot: 4-way rotational symmetry
  17. Random: Random pattern type and size


RULE EXPLORER - Create Custom Rules

  1. Choose from 9 famous rule variations:
  2. Conway (B3/S23) - Classic Game of Life
  3. HighLife (B36/S23) - Like Conway, with replicators
  4. Maze (B3/S12345) - Creates maze-like patterns
  5. Coral (B3/S45678) - Grows coral-like structures
  6. Seeds (B2/S) - Exploding patterns (same as Seeds mode)
  7. Replicator (B1357/S1357) - Self-replicating patterns
  8. 2x2 (B36/S125) - Stable 2x2 blocks common
  9. NoDeath (B3/S012345678) - Cells never die once born
  10. Diamoeba (B35678/S5678) - Diamond-shaped amoebas
  11. Custom Rules - Create your own rules:
  12. Navigation:
  13. UP/DOWN: Switch between Birth and Survival rows
  14. LEFT/RIGHT: Move cursor (0-8 neighbors)
  15. B (short): Toggle number on/off
  16. B (2 seconds): Start game with custom rules
  17. B: Back to preset menu

How It Works:

  1. Birth row: Select how many neighbors cause birth (0-8)
  2. Survival row: Select how many neighbors keep cell alive (0-8)
  3. Example: Conway's Life is B3 (birth on 3) / S23 (survive on 2 or 3)


Color Modes

  1. All game modes support color! Press UP + DOWN together to toggle.