optimize code
This commit is contained in:
parent
a5408e152b
commit
8f465a4a50
2 changed files with 23 additions and 18 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
gol
|
||||||
38
main.go
38
main.go
|
|
@ -11,10 +11,13 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
// Grid size
|
||||||
//size = 150
|
//size = 150
|
||||||
size = 30
|
size = 30
|
||||||
|
// Image zoom value
|
||||||
zoom = 8
|
zoom = 8
|
||||||
fps = 2
|
// Generations per second
|
||||||
|
gps = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
type Grid struct {
|
type Grid struct {
|
||||||
|
|
@ -111,18 +114,17 @@ func max(i int) int {
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GOL) Check(x, y int) {
|
func (g *GOL) check(x, y int) {
|
||||||
n := 0
|
n := 0
|
||||||
for i := min(x - 1); i <= max(x+1); i++ {
|
for i := min(x - 1); i <= max(x+1); i++ {
|
||||||
for j := min(y - 1); j <= max(y+1); j++ {
|
for j := min(y - 1); j <= max(y+1); j++ {
|
||||||
if g.grid1.G[i][j] {
|
if g.grid1.G[i][j] {
|
||||||
if !(i == x && j == y) {
|
|
||||||
n++
|
n++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if g.grid1.G[x][y] {
|
if g.grid1.G[x][y] {
|
||||||
|
n--
|
||||||
switch n {
|
switch n {
|
||||||
case 0, 1:
|
case 0, 1:
|
||||||
g.grid2.G[x][y] = false
|
g.grid2.G[x][y] = false
|
||||||
|
|
@ -138,7 +140,7 @@ func (g *GOL) Check(x, y int) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GOL) Grid() (gr *Grid) {
|
func (g *GOL) grid() (gr *Grid) {
|
||||||
gr = new(Grid)
|
gr = new(Grid)
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
gr.G[i] = g.grid1.G[i]
|
gr.G[i] = g.grid1.G[i]
|
||||||
|
|
@ -147,6 +149,15 @@ func (g *GOL) Grid() (gr *Grid) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GOL) Calc() (gr *Grid) {
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
for j := 0; j < size; j++ {
|
||||||
|
g.check(i, j)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g.Gen++
|
||||||
|
return g.grid()
|
||||||
|
}
|
||||||
func main() {
|
func main() {
|
||||||
gol := NewGOL()
|
gol := NewGOL()
|
||||||
gc := make(chan *Grid, 10)
|
gc := make(chan *Grid, 10)
|
||||||
|
|
@ -159,8 +170,7 @@ func main() {
|
||||||
case img = <-ic:
|
case img = <-ic:
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
err := jpeg.Encode(os.Stdout, img, &o)
|
if jpeg.Encode(os.Stdout, img, &o) == nil {
|
||||||
if err == nil {
|
|
||||||
os.Stdout.Sync()
|
os.Stdout.Sync()
|
||||||
}
|
}
|
||||||
time.Sleep(time.Millisecond * 16)
|
time.Sleep(time.Millisecond * 16)
|
||||||
|
|
@ -170,13 +180,13 @@ func main() {
|
||||||
s := size * zoom
|
s := size * zoom
|
||||||
r := image.Rect(0, 0, s, s)
|
r := image.Rect(0, 0, s, s)
|
||||||
for {
|
for {
|
||||||
img := image.NewNRGBA(r)
|
img := image.NewGray(r)
|
||||||
grid := <-gc
|
grid := <-gc
|
||||||
x := 0
|
x := 0
|
||||||
y := 0
|
y := 0
|
||||||
|
var c color.Color
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
for j := 0; j < size; j++ {
|
for j := 0; j < size; j++ {
|
||||||
var c color.Color
|
|
||||||
if grid.G[i][j] {
|
if grid.G[i][j] {
|
||||||
c = color.Black
|
c = color.Black
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -197,14 +207,8 @@ func main() {
|
||||||
}()
|
}()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
for i := 0; i < size; i++ {
|
gc <- gol.Calc()
|
||||||
for j := 0; j < size; j++ {
|
|
||||||
gol.Check(i, j)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gc <- gol.Grid()
|
|
||||||
gol.Gen++
|
|
||||||
fmt.Fprintf(os.Stderr, "\rGeneration: %d", gol.Gen)
|
fmt.Fprintf(os.Stderr, "\rGeneration: %d", gol.Gen)
|
||||||
time.Sleep(time.Second / fps)
|
time.Sleep(time.Second / gps)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue