Я изо всех сил пытался найти пример как мой, но хотя куча вопросов очень похожа, я не смог понять, что я делаю неправильно.
Я очень плохо знаком с Голангом и пытаюсьреализовать игру жизни.
вот часть моего кода
// Species struct
type Species struct {
xPos int32
yPos int32
isAlive bool
willChangeState bool
rect sdl.Rect
neighbours []Species
}
type Ecosystem struct {
community []Species
}
func (ecos *Ecosystem) addSpecies(sp Species) {
ecos.community = append(ecos.community, sp)
}
func (s *Species) addNeigbour(neigbour Species) {
s.neighbours = append(s.neighbours, neigbour)
}
Я хочу распределить соседей, как в этой функции
func (ecos *Ecosystem) distributeNeighbours() {
for _, species := range ecos.community {
for _, potentionalNeighbour := range ecos.community {
if math.Abs(float64(species.xPos-potentionalNeighbour.xPos)) <= speciesSize && math.Abs(float64(species.yPos-potentionalNeighbour.yPos)) <= speciesSize {
if species.xPos == potentionalNeighbour.xPos && species.yPos == potentionalNeighbour.yPos {
continue
}
species.addNeigbour(potentionalNeighbour)
}
}
fmt.Println(len(species.neighbours)) // works here
}
for _, s := range ecos.community {
fmt.Println(len(s.neighbours)) //prints 0
}
}
Так что я долженуправляйте этим с помощью указателей - некоторые проблемы, такие как виды в первом цикле, являются копиями этих видов в сообществе, поэтому оригинальные виды не получают соседей.Но я не знаю, как это исправить.