mirror of
https://codeberg.org/scip/golsky.git
synced 2025-12-16 20:20:57 +01:00
8241cf83f28817326c8c778fdb1fe0025710ff7b
Conway's game of life
I wanted to play around a little bit with GOL in golang and here's the result. It's a simple game using ebitengine.
Features
- flexible parameters as grid and cell size
- colors can be inverted
- game grid lines can be enabled or disabled
- game speed can be adjusted on startup and in-game
- you can zoom in and out of the canvas and move it around
- game can be paused any time
- it can be run step-wise
- game state can be saved any time and loaded later on startup
- various Life rules can be used, the rule format
B[0-9]+/S[0-9]+is fully supported - game patterns can be loaded using RLE files, see https://catagolue.hatsya.com/home
- you can paint your own patterns in the game
- the game can also be started with an empty grid, which is easier to paint patterns
Build and install
Just execute: go build . and use the resulting executable.
You'll need the golang toolchain.
Usage
The game has a couple of commandline options:
Usage of ./gameoflife:
-c, --cellsize int cell size in pixels (default 8)
-d, --debug show debug info
-D, --density int density of random cells (default 10)
-e, --empty start with an empty screen
-H, --height int grid height in cells (default 40)
-i, --invert invert colors (dead cell: black)
-l, --load-state-file string game state file
-n, --nogrid do not draw grid lines
-p, --paused do not start simulation (use space to start)
-f, --rle-file string RLE pattern file
-r, --rule string game rule (default "B3/S23")
-s, --show-evolution show evolution tracks
-t, --ticks-per-generation int game speed: the higher the slower (default: 10) (default 10)
-v, --version show version
-W, --width int grid width in cells (default 40)
While it runs, there are a couple of commands you can use:
- left mouse click: set a cell to alife (also pauses the game)
- right mouse click: set a cell to dead
- space: pause or resume the game
- while game is paused: press n to forward one step
- page up: speed up
- page down: slow down
- Mouse wheel: zoom in or out
- move mouse while middle mouse button pressed: move canvas
- escape: reset to 1:1 zoom
- s: save game state to file (can be loaded with -l)
- q: quit
Report bugs
Please open an issue. Thanks!
License
This work is licensed under the terms of the General Public Licens version 3.
Author
Copyleft (c) 2024 Thomas von Dein
Languages
Go
93.7%
Makefile
2.9%
C
2%
Shell
1.4%