From 8e4da928710cefec7ab273ef4c9e8e39c9eb5189 Mon Sep 17 00:00:00 2001 From: Nathan Date: Thu, 18 Jan 2018 19:52:52 -0500 Subject: [PATCH 1/2] adds a game of life example --- examples/community/game_of_life/life/grid.go | 74 ++++++++++++++++++++ examples/community/game_of_life/life/life.go | 35 +++++++++ examples/community/game_of_life/main.go | 64 +++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 examples/community/game_of_life/life/grid.go create mode 100644 examples/community/game_of_life/life/life.go create mode 100644 examples/community/game_of_life/main.go diff --git a/examples/community/game_of_life/life/grid.go b/examples/community/game_of_life/life/grid.go new file mode 100644 index 0000000..ea59cc8 --- /dev/null +++ b/examples/community/game_of_life/life/grid.go @@ -0,0 +1,74 @@ +package life + +import ( + "github.com/faiface/pixel" + "github.com/faiface/pixel/imdraw" + "golang.org/x/image/colornames" +) + +// Shamelessly taken/inspired by https://golang.org/doc/play/life.go +// Grid is the structure in which the cellular automota live +type Grid struct { + h int + cellSize int + Cells [][]bool +} + +// NewGrid constructs a new Grid +func NewGrid(h, size int) *Grid { + cells := make([][]bool, h) + for i := 0; i < h; i++ { + cells[i] = make([]bool, h) + } + return &Grid{h: h, cellSize: size, Cells: cells} +} + +// Alive returns whether the specified position is alive +func (g *Grid) Alive(x, y int) bool { + x += g.h + x %= g.h + y += g.h + y %= g.h + return g.Cells[y][x] +} + +// Set sets the state of a specific location +func (g *Grid) Set(x, y int, state bool) { + g.Cells[y][x] = state +} + +// Draw draws the grid +func (g *Grid) Draw(imd *imdraw.IMDraw) { + for i := 0; i < g.h; i++ { + for j := 0; j < g.h; j++ { + imd.Push( + pixel.V(float64(i*g.cellSize), float64(j*g.cellSize)), + pixel.V(float64(i*g.cellSize+g.cellSize), float64(j*g.cellSize+g.cellSize)), + ) + if g.Alive(i, j) { + imd.Color = colornames.Black + } else { + imd.Color = colornames.White + } + imd.Rectangle(0) + } + } +} + +// Next returns the next state +func (g *Grid) Next(x, y int) bool { + // Count the adjacent cells that are alive. + alive := 0 + for i := -1; i <= 1; i++ { + for j := -1; j <= 1; j++ { + if (j != 0 || i != 0) && g.Alive(x+i, y+j) { + alive++ + } + } + } + // Return next state according to the game rules: + // exactly 3 neighbors: on, + // exactly 2 neighbors: maintain current state, + // otherwise: off. + return alive == 3 || alive == 2 && g.Alive(x, y) +} diff --git a/examples/community/game_of_life/life/life.go b/examples/community/game_of_life/life/life.go new file mode 100644 index 0000000..2ee7fca --- /dev/null +++ b/examples/community/game_of_life/life/life.go @@ -0,0 +1,35 @@ +// Package life is the manages the "game" state +// Shamelessly taken from https://golang.org/doc/play/life.go +package life + +import "math/rand" + +// Life stores the state of a round of Conway's Game of Life. +type Life struct { + A, b *Grid + h int +} + +// NewLife returns a new Life game state with a random initial state. +func NewLife(h, size int) *Life { + a := NewGrid(h, size) + for i := 0; i < (h * h / 2); i++ { + a.Set(rand.Intn(h), rand.Intn(h), true) + } + return &Life{ + A: a, b: NewGrid(h, size), + h: h, + } +} + +// Step advances the game by one instant, recomputing and updating all cells. +func (l *Life) Step() { + // Update the state of the next field (b) from the current field (a). + for y := 0; y < l.h; y++ { + for x := 0; x < l.h; x++ { + l.b.Set(x, y, l.A.Next(x, y)) + } + } + // Swap fields a and b. + l.A, l.b = l.b, l.A +} diff --git a/examples/community/game_of_life/main.go b/examples/community/game_of_life/main.go new file mode 100644 index 0000000..11b02d6 --- /dev/null +++ b/examples/community/game_of_life/main.go @@ -0,0 +1,64 @@ +package main + +import ( + "flag" + "math/rand" + "time" + + "golang.org/x/image/colornames" + + "github.com/faiface/pixel" + "github.com/faiface/pixel/examples/community/game_of_life/life" + "github.com/faiface/pixel/imdraw" + "github.com/faiface/pixel/pixelgl" +) + +var ( + size *int + windowSize *float64 + frameRate *int64 +) + +func init() { + rand.Seed(time.Now().UnixNano()) + size = flag.Int("size", 5, "The size of each cell") + windowSize = flag.Float64("windowSize", 800, "The pixel size of one side of the grid") + frameRate = flag.Int64("frameRate", 33, "The framerate in milliseconds") + flag.Parse() +} + +func main() { + pixelgl.Run(run) +} + +func run() { + + cfg := pixelgl.WindowConfig{ + Title: "Pixel Rocks!", + Bounds: pixel.R(0, 0, *windowSize, *windowSize), + VSync: true, + } + win, err := pixelgl.NewWindow(cfg) + if err != nil { + panic(err) + } + win.Clear(colornames.White) + + // since the game board is square, rows and cols will be the same + rows := int(*windowSize) / *size + + gridDraw := imdraw.New(nil) + game := life.NewLife(rows, *size) + last := time.Now() + for !win.Closed() { + // game loop + if time.Since(last).Nanoseconds() > *frameRate { + gridDraw.Clear() + game.A.Draw(gridDraw) + gridDraw.Draw(win) + game.Step() + last = time.Now() + } + win.Update() + } +} From c1abca5cab9ffee80d9f86b65153da7654f5fdaf Mon Sep 17 00:00:00 2001 From: Nathan Date: Thu, 18 Jan 2018 20:44:54 -0500 Subject: [PATCH 2/2] addressing PR feedback --- examples/community/game_of_life/README.md | 20 +++++++++++++++++++ examples/community/game_of_life/life.png | Bin 0 -> 88480 bytes examples/community/game_of_life/life/grid.go | 8 ++++---- examples/community/game_of_life/life/life.go | 2 +- examples/community/game_of_life/main.go | 10 +++++----- 5 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 examples/community/game_of_life/README.md create mode 100644 examples/community/game_of_life/life.png diff --git a/examples/community/game_of_life/README.md b/examples/community/game_of_life/README.md new file mode 100644 index 0000000..92d1aad --- /dev/null +++ b/examples/community/game_of_life/README.md @@ -0,0 +1,20 @@ +# Conway's Game of Lfe + +Created by [Nathan Leniz](https://github.com/terakilobyte). +Inspired by and heavily uses [the doc](https://golang.org/doc/play/life.go) + +> The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970. The "game" is a zero-player game, meaning that its evolution is determined by its initial state, requiring no further input. One interacts with the Game of Life by creating an initial configuration and observing how it evolves, or, for advanced "players", by creating patterns with particular properties. The Game has been reprogrammed multiple times in various coding languages. + +For more information, please see the [wikipedia](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) article. + +## Use + + go run main.go -h + -frameRate duration + The framerate in milliseconds (default 33ms) + -size int + The size of each cell (default 5) + -windowSize float + The pixel size of one side of the grid (default 800) + +![life](life.png) diff --git a/examples/community/game_of_life/life.png b/examples/community/game_of_life/life.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8807a1fac3655960155828c617d487cfb3d781 GIT binary patch literal 88480 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 *frameRate { + select { + case <-tick: gridDraw.Clear() game.A.Draw(gridDraw) gridDraw.Draw(win) game.Step() - last = time.Now() } win.Update() }