Pico-8 Game of life
The Pico-8 is a 'fantasy console' built by Lexaloffle. It's a program that runs on your computer that lets you write an play small games written in Lua. I recently implemented Conway's Game of Life for Pico-8 and it was a fun and rewarding experience. You can play with my implementation here.
This post contains some thoughts I had while making the game.
Lua
This was my first time writing Lua and found it easy to pick up. It's similar to other scripting languages, including Python, which I've written extensively. I like that Lua's fundamental data type is the hash table - they're useful for a large number of problems.
Pico-8 standard library isn't Lua's standard library
This tripped me up a bit - I'd get something working using Stack Overflow answers and the Lua REPL to find that it wouldn't work in Pico-8. This GitHub Gist outlines the discrepancies.
Performance matters
The Pico-8 runtime is CPU and memory restricted. This means the algorithmic
complexity of your game update function actually matters. My initial, naive,
Game of Life implementation ran in O(n^2)
time, where n^2
is the number of
pixels on the board. This was too slow to run smoothly, so I had to rewrite it,
and ended up with a O(m)
implementation, where m
is the number of 'alive'
pixels on the board. Usually, m << n^2
.
I round this limited runtime fun to work with. Most code I write is performance-limited by network latency, so its algorithmic complexity doesn't matter as much. It was rewarding to have to write fast code.
Debugging
You can access live Memory and CPU usage with the builtin stat
function. I
used this to print out debug information when trying to get my frame rate high
enough:
-- debug printing
debug = false
function _draw()
-- ...
if debug then
print(stat(0))
-- you want this to be below than 1. Greater than 1 means you're
-- dropping frames
print(stat(1))
end
end
You can find out more about the stat
function
here.
Overall
Pico-8 is cute, fun platform to develop for. The challenges you face are different to those faced in day-to-day programming, and I'd recommend having a go at it!