GameOfLife/cells.go

91 lines
1.7 KiB
Go
Raw Permalink Normal View History

2024-05-24 22:34:56 +01:00
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
}
}