我正在尝试开发一种纸牌游戏,其中 8 张庄家和闲家的牌最初面朝下。当玩家或庄家被击中或发牌时,我想“翻转”牌面朝上以显示玩家或庄家面朝下的牌。
我尝试在 SwiftUI 中使用 @ObservableObject 和 .environmentObject 来全局传递实例。有一次,我让它在原始自然中工作,但我不记得我是怎么做到的。我对 SwiftUI 还很陌生;
@State var dealerHand: [String]
@State var playerHand: [String]
@State var dealerHasCard:[Bool]
@State var playerHasCard:[Bool]
var body: some View {
HStack(spacing: -30.0) {
Spacer()
Image(dealerHasCard[0] ? "\($dealerHand[0])" : faceDown)
Image(dealerHasCard[1] ? "\($dealerHand[1])" : faceDown)
Image(dealerHasCard[2] ? "\($dealerHand[2])" : faceDown)
Image(dealerHasCard[3] ? "\($dealerHand[3])" : faceDown)
Image(dealerHasCard[4] ? "\($dealerHand[4])" : faceDown)
Image(dealerHasCard[5] ? "\($dealerHand[5])" : faceDown)
Image(dealerHasCard[6] ? "\($dealerHand[6])" : faceDown)
Image(dealerHasCard[7] ? "\($dealerHand[7])" : faceDown)
Spacer()
}
Text("You")
.font(.title)
.foregroundColor(.blue)
HStack(spacing: -30.0) {
Spacer()
Image(playerHasCard[0] ? "\($playerHand[0])" : faceDown)
Image(playerHasCard[1] ? "\($playerHand[1])" : faceDown)
Image(playerHasCard[2] ? "\($playerHand[2])" : faceDown)
Image(playerHasCard[3] ? "\($playerHand[3])" : faceDown)
Image(playerHasCard[4] ? "\($playerHand[4])" : faceDown)
Image(playerHasCard[5] ? "\($playerHand[5])" : faceDown)
Image(playerHasCard[6] ? "\($playerHand[6])" : faceDown)
Image(playerHasCard[7] ? "\($playerHand[7])" : faceDown)
Spacer()
}
}
}
func showCards(dealerHand: [String], playerHand: [String], dealerHasCards: [Bool], playerHasCards: [Bool]) -> ([String], [String], [Bool], [Bool]) {
var dealerCards:[String] = ["","","","","","","",""]
var playerCards:[String] = ["","","","","","","",""]
var dealerHasCards:[Bool] = [false,false,false,false,false,false,false,false]
var playerHasCards:[Bool] = [false,false,false,false,false,false,false,false]
for i in 0..<dealerHand.count {
if dealerHand[i] != "" {
dealerCards[i] = dealerHand[i]
dealerHasCards[i] = true
} else {
dealerCards[i] = faceDown
dealerHasCards[i] = false
}
}
for i in 0..<playerHand.count {
if playerHand[i] != "" {
playerCards[i] = playerHand[i]
playerHasCards[i] = true
} else {
playerCards[i] = faceDown
playerHasCards[i] = false
}
}
if gameOver {
message = checkResults(playerScore: playerScore, dealerScore: dealerScore)
}
return (dealerCards, playerCards, dealerHasCards, playerHasCards)
}