bugfix and added text mode
This commit is contained in:
parent
026a292812
commit
50d5af714d
1 changed files with 99 additions and 41 deletions
148
main.go
148
main.go
|
|
@ -1,6 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"image"
|
"image"
|
||||||
"image/color"
|
"image/color"
|
||||||
|
|
@ -114,8 +115,7 @@ func max(i int) int {
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GOL) check(x, y int) {
|
func (g *GOL) n(x, y int) (n int) {
|
||||||
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] {
|
||||||
|
|
@ -123,6 +123,11 @@ func (g *GOL) check(x, y int) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GOL) check(x, y int) {
|
||||||
|
n := g.n(x, y)
|
||||||
if g.grid1.G[x][y] {
|
if g.grid1.G[x][y] {
|
||||||
n--
|
n--
|
||||||
switch n {
|
switch n {
|
||||||
|
|
@ -136,6 +141,8 @@ func (g *GOL) check(x, y int) {
|
||||||
} else {
|
} else {
|
||||||
if n == 3 {
|
if n == 3 {
|
||||||
g.grid2.G[x][y] = true
|
g.grid2.G[x][y] = true
|
||||||
|
} else {
|
||||||
|
g.grid2.G[x][y] = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -158,57 +165,108 @@ func (g *GOL) Calc() (gr *Grid) {
|
||||||
g.Gen++
|
g.Gen++
|
||||||
return g.grid()
|
return g.grid()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var text bool
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
flag.BoolVar(&text, "text", false, "text mode")
|
||||||
|
flag.Parse()
|
||||||
gol := NewGOL()
|
gol := NewGOL()
|
||||||
gc := make(chan *Grid, 10)
|
gc := make(chan *Grid, 10)
|
||||||
ic := make(chan image.Image, 10)
|
if text {
|
||||||
go func() {
|
go func() {
|
||||||
o := jpeg.Options{100}
|
buf := make([]byte, (size*size)+size*6)
|
||||||
img := <-ic
|
for {
|
||||||
for {
|
buf[0] = '+'
|
||||||
select {
|
c := 1
|
||||||
case img = <-ic:
|
for ; c < size+1; c++ {
|
||||||
default:
|
buf[c] = '-'
|
||||||
}
|
|
||||||
if jpeg.Encode(os.Stdout, img, &o) == nil {
|
|
||||||
os.Stdout.Sync()
|
|
||||||
}
|
|
||||||
time.Sleep(time.Millisecond * 16)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
go func() {
|
|
||||||
s := size * zoom
|
|
||||||
r := image.Rect(0, 0, s, s)
|
|
||||||
for {
|
|
||||||
img := image.NewGray(r)
|
|
||||||
grid := <-gc
|
|
||||||
x := 0
|
|
||||||
y := 0
|
|
||||||
var c color.Color
|
|
||||||
for i := 0; i < size; i++ {
|
|
||||||
for j := 0; j < size; j++ {
|
|
||||||
if grid.G[i][j] {
|
|
||||||
c = color.Black
|
|
||||||
} else {
|
|
||||||
c = color.White
|
|
||||||
}
|
|
||||||
for a := 0; a < zoom; a++ {
|
|
||||||
for b := 0; b < zoom; b++ {
|
|
||||||
img.Set(x+a, y+b, c)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
y += zoom
|
|
||||||
}
|
}
|
||||||
x += zoom
|
buf[c] = '+'
|
||||||
y = 0
|
c++
|
||||||
|
buf[c] = '\n'
|
||||||
|
c++
|
||||||
|
grid := <-gc
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
buf[c] = '|'
|
||||||
|
c++
|
||||||
|
for j := 0; j < size; j++ {
|
||||||
|
if grid.G[j][i] {
|
||||||
|
buf[c] = '#'
|
||||||
|
} else {
|
||||||
|
buf[c] = ' '
|
||||||
|
}
|
||||||
|
c++
|
||||||
|
}
|
||||||
|
buf[c] = '|'
|
||||||
|
c++
|
||||||
|
buf[c] = '\n'
|
||||||
|
c++
|
||||||
|
}
|
||||||
|
buf[c] = '+'
|
||||||
|
c++
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
buf[c] = '-'
|
||||||
|
c++
|
||||||
|
}
|
||||||
|
buf[c] = '+'
|
||||||
|
c++
|
||||||
|
buf[c] = '\n'
|
||||||
|
fmt.Printf("\r%s", string(buf))
|
||||||
}
|
}
|
||||||
ic <- img
|
}()
|
||||||
}
|
} else {
|
||||||
}()
|
ic := make(chan image.Image, 10)
|
||||||
|
go func() {
|
||||||
|
o := jpeg.Options{100}
|
||||||
|
img := <-ic
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case img = <-ic:
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
if jpeg.Encode(os.Stdout, img, &o) == nil {
|
||||||
|
os.Stdout.Sync()
|
||||||
|
}
|
||||||
|
time.Sleep(time.Millisecond * 16)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
go func() {
|
||||||
|
s := size * zoom
|
||||||
|
r := image.Rect(0, 0, s, s)
|
||||||
|
for {
|
||||||
|
img := image.NewGray(r)
|
||||||
|
grid := <-gc
|
||||||
|
x := 0
|
||||||
|
y := 0
|
||||||
|
var c color.Color
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
for j := 0; j < size; j++ {
|
||||||
|
if grid.G[i][j] {
|
||||||
|
c = color.Black
|
||||||
|
} else {
|
||||||
|
c = color.White
|
||||||
|
}
|
||||||
|
for a := 0; a < zoom; a++ {
|
||||||
|
for b := 0; b < zoom; b++ {
|
||||||
|
img.Set(x+a, y+b, c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
y += zoom
|
||||||
|
}
|
||||||
|
x += zoom
|
||||||
|
y = 0
|
||||||
|
}
|
||||||
|
ic <- img
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
gc <- gol.Calc()
|
gc <- gol.Calc()
|
||||||
fmt.Fprintf(os.Stderr, "\rGeneration: %d", gol.Gen)
|
if !text {
|
||||||
|
fmt.Fprintf(os.Stderr, "\rGeneration: %d", gol.Gen)
|
||||||
|
}
|
||||||
time.Sleep(time.Second / gps)
|
time.Sleep(time.Second / gps)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue