91 lines
1.7 KiB
Go
91 lines
1.7 KiB
Go
|
package main
|
||
|
|
||
|
type Cell struct {
|
||
|
X int
|
||
|
Y int
|
||
|
State int
|
||
|
}
|
||
|
|
||
|
func (c *Cell) Display() rune {
|
||
|
if c.State == 1 {
|
||
|
return '\u2588'
|
||
|
} else {
|
||
|
return ' '
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *Cell) Update(g *Game) int{
|
||
|
h, w := g.Screen.Size()
|
||
|
cs := g.Cells
|
||
|
n := 0
|
||
|
if c.X == 0 {
|
||
|
if c.Y == 0 {
|
||
|
n = cs[c.X][c.Y+1].State +
|
||
|
cs[c.X+1][c.Y].State +
|
||
|
cs[c.X+1][c.Y+1].State
|
||
|
} else if c.Y < w-1 {
|
||
|
n = cs[c.X][c.Y+1].State +
|
||
|
cs[c.X+1][c.Y].State +
|
||
|
cs[c.X+1][c.Y+1].State +
|
||
|
cs[c.X][c.Y-1].State +
|
||
|
cs[c.X+1][c.Y-1].State
|
||
|
} else {
|
||
|
n = cs[c.X+1][c.Y].State +
|
||
|
cs[c.X][c.Y-1].State +
|
||
|
cs[c.X+1][c.Y-1].State
|
||
|
}
|
||
|
} else if c.X == h-1 {
|
||
|
if c.Y == 0 {
|
||
|
n = cs[c.X][c.Y+1].State +
|
||
|
cs[c.X-1][c.Y].State +
|
||
|
cs[c.X-1][c.Y+1].State
|
||
|
} else if c.Y < w-1 {
|
||
|
n = cs[c.X][c.Y+1].State +
|
||
|
cs[c.X-1][c.Y].State +
|
||
|
cs[c.X-1][c.Y+1].State +
|
||
|
cs[c.X][c.Y-1].State +
|
||
|
cs[c.X-1][c.Y-1].State
|
||
|
} else {
|
||
|
n = cs[c.X-1][c.Y].State +
|
||
|
cs[c.X][c.Y-1].State +
|
||
|
cs[c.X-1][c.Y-1].State
|
||
|
}
|
||
|
} else if c.Y == 0 {
|
||
|
n = cs[c.X-1][c.Y].State +
|
||
|
cs[c.X-1][c.Y+1].State +
|
||
|
cs[c.X][c.Y+1].State +
|
||
|
cs[c.X+1][c.Y+1].State +
|
||
|
cs[c.X+1][c.Y].State
|
||
|
} else if c.Y == w-1 {
|
||
|
n = cs[c.X-1][c.Y].State +
|
||
|
cs[c.X-1][c.Y-1].State +
|
||
|
cs[c.X][c.Y-1].State +
|
||
|
cs[c.X+1][c.Y-1].State +
|
||
|
cs[c.X+1][c.Y].State
|
||
|
} else {
|
||
|
n = cs[c.X-1][c.Y-1].State +
|
||
|
cs[c.X-1][c.Y].State +
|
||
|
cs[c.X-1][c.Y+1].State +
|
||
|
cs[c.X][c.Y-1].State +
|
||
|
cs[c.X][c.Y+1].State +
|
||
|
cs[c.X+1][c.Y-1].State +
|
||
|
cs[c.X+1][c.Y].State +
|
||
|
cs[c.X+1][c.Y+1].State
|
||
|
}
|
||
|
|
||
|
if c.State == 1 {
|
||
|
if n >= 2 && n < 4 {
|
||
|
return 1
|
||
|
} else {
|
||
|
return 0
|
||
|
}
|
||
|
} else if c.State == 0 {
|
||
|
if n == 3 {
|
||
|
return 1
|
||
|
}
|
||
|
return 0
|
||
|
} else {
|
||
|
return 0
|
||
|
}
|
||
|
}
|