Добавить к структуре слайса в Голанге - PullRequest
0 голосов
/ 26 марта 2019

Я изо всех сил пытался найти пример как мой, но хотя куча вопросов очень похожа, я не смог понять, что я делаю неправильно.

Я очень плохо знаком с Голангом и пытаюсьреализовать игру жизни.

вот часть моего кода

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

Так что я долженуправляйте этим с помощью указателей - некоторые проблемы, такие как виды в первом цикле, являются копиями этих видов в сообществе, поэтому оригинальные виды не получают соседей.Но я не знаю, как это исправить.

1 Ответ

1 голос
/ 26 марта 2019

Попробуйте фрагмент указателя, например:

// Species struct
type Species struct {
    xPos            int32
    yPos            int32
    isAlive         bool
    willChangeState bool
    rect            sdl.Rect
    neighbours      []*Species
}

type Ecosystem struct {
    community []*Species
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...