Trabalhando em um jogo de cartas simples. Tentando fazer a lógica funcionar para "Puxar" uma carta do baralho e adicioná-la à mão do jogador.
Aqui estão os trechos de código relevantes.
import Foundation
struct Player: Identifiable {
var id: UUID = UUID()
var name: String
var cards: [Card] = []
var plays: [Plays] = []
let human: Bool
init(name: String, human: Bool) {
self.name = name
self.human = human
}
mutating func addCard(card: Card)
{
print("Adding card \(card.id) to the players cards")
cards.append(card)
print("Player now has \(cards.count) cards")
}
}
class Game: ObservableObject {
@Published var deck:Deck = Deck()
@Published var discard: [Card] = []
@Published var players: [Player]
@Published var round: Int = 1
init(){
players = []
players.append(Player(name: "Player 1", human: false))
players.append(Player(name: "Player 2", human: false))
players.append(Player(name: "Player 3", human: false))
players.append(Player(name: "Player 4", human: true))
//self.deal()
}
func deal() {
if players[0].cards.isEmpty {
for _ in 1...7 {
players[0].addCard(card: deck.deal())
players[1].addCard(card: deck.deal())
players[2].addCard(card: deck.deal())
players[3].addCard(card: deck.deal())
}
print("All the cards are dealt and player 4 now has \(players[3].cards.count) cards")
} else {
print("Players already have 7 cards")
}
}
func discard(card: Card, player: Player) {
var selectedPlayer = players.first(where: { $0.id == player.id })
selectedPlayer?.cards.removeAll(where: { $0.id == card.id})
discard.append(card)
}
func draw(player: Player){
var selectedPlayer = players.first(where: { $0.id == player.id })
let drawnCard = deck.deal()
print("They drew the \(drawnCard.rank.name) of \(drawnCard.suit.name) with ID \(drawnCard.id)")
selectedPlayer?.addCard(card: drawnCard)
}
}
O que não consigo entender é que quando chamo player.addCard(card: card)
de dentro da deal()
função na classe Game, funciona perfeitamente e adiciona as cartas como esperado. Mas chamar a mesma função de dentro da draw
função (na parte inferior da classe game) não adiciona a carta à mão do jogador.
Posso ver pelas instruções print dentro da addCard
função que ela está sendo chamada e que o ID do cartão que ela está passando está correto (e é diferente para cada tapGesture que a inicia).
Alguma ideia do porquê o array.append()
não está realmente sendo adicionado ao array?