Я пишу карточную игру с go. У меня есть карты в матрице срезов (3 строки, n столбцов) и карты в колоде с обычным срезом
type Game struct {
Deck []Card `json:"-"`
InPlay [][]Card `json:"in_play,omitempty"`
}
type Card struct {
Number *int64 `json:"number"`
Suit *int64 `json:"suit"`
}
В определенной ситуации я хочу добавить еще один ряд карт на
func(g *Game) AddCards() {
g.InPlay[0] = append(g.InPlay[0], g.Deck[0])
g.InPlay[1] = append(g.InPlay[1], g.Deck[1])
g.InPlay[2] = append(g.InPlay[2], g.Deck[2])
g.Deck = g.Deck[3:]
}
Вместо добавления нового столбца карт это приводит к добавлению столбца, но также к изменению карт, которые у меня в игре.
1 4 7 1 4 7 10 1 4 7 10
2 5 8 becomes 10 5 8 11 instead of 2 5 8 11
3 6 9 11 6 9 12 3 6 9 12
странно, если следовать этому шаблону, если я добавлю еще один столбец
1 4 7 10 1 4 7 10 13 1 4 7 10 13
10 5 8 11 becomes 10 13 8 11 14 instead of 10 5 8 11 14
11 6 9 12 11 14 9 12 15 11 6 9 12 15
Это происходит только снизу с карточками в столбце, в 3 столбцах слева от места добавления нового столбца
EDIT
Колода создана с
func New() *Deck {
rand.Seed(time.Now().UnixNano())
deck := Deck{}
cards := []Card{}
// Constant integers
for _, number := range NUMBERS {
for _, suit := range SUITS {
card := Card{
Number: ptr.int64(number), // turns int64 to pointer
Suit: ptr.int64(suit),
}
cards = append(cards, card)
}
}
deck.Cards = cards
deck.Shuffle()
return &deck
}
, а исходная матрица с
func (g *Game) Deal() {
inPlay := [][]deck.Card{[]deck.Card{}, []deck.Card{}, []deck.Card{}}
inPlay[0] = g.Deck.Cards[0:4]
inPlay[1] = g.Deck.Cards[4:8]
inPlay[2] = g.Deck.Cards[8:12]
g.InPlay = inPlay
g.Deck.Cards = g.Deck.Cards[12:]
return
}