mirror of
https://codeberg.org/scip/golsky.git
synced 2025-12-16 20:20:57 +01:00
enhanced doc, fixed drawing when zooming or moving canvas
This commit is contained in:
43
README.md
43
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:
|
||||
|
||||
7
game.go
7
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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user