From 8241cf83f28817326c8c778fdb1fe0025710ff7b Mon Sep 17 00:00:00 2001 From: Thomas von Dein Date: Thu, 23 May 2024 15:23:06 +0200 Subject: [PATCH] enhanced doc, fixed drawing when zooming or moving canvas --- README.md | 43 ++++++++++++++++++++++++++++++------------- game.go | 7 ++++--- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index f0e6791..357889c 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,21 @@ I wanted to play around a little bit with GOL in golang and here's the result. It's a simple game using [ebitengine](https://github.com/hajimehoshi/ebiten/). +# 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. @@ -16,19 +31,21 @@ The game has a couple of commandline options: ```default 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) - -n, --nogrid do not draw grid lines - -p, --paused do not start simulation (use space to start) - -r, --rule string game rule (default "B3/S23") - -s, --show-evolution show evolution tracks - -t, --tps int game speed in ticks per second (default 60) - -v, --version show version - -W, --width int grid width in cells (default 40) + -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: diff --git a/game.go b/game.go index 5bcbac7..316b8dd 100644 --- a/game.go +++ b/game.go @@ -243,9 +243,10 @@ func (game *Game) Update() error { // set a cell to alive or dead func (game *Game) ToggleCellOnCursorPos(alive int) { - xPX, yPX := ebiten.CursorPosition() - x := xPX / game.Cellsize - y := yPX / game.Cellsize + // use cursor pos relative to the world + worldX, worldY := game.Camera.ScreenToWorld(ebiten.CursorPosition()) + x := int(worldX) / game.Cellsize + y := int(worldY) / game.Cellsize //fmt.Printf("cell at %d,%d\n", x, y)