GameOfLife/cells.go
2024-05-24 23:34:56 +02:00

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
}
}