我目前正在Swift UI中完成100天的代码,我想我已经完成了第25天的挑战。然而,我的大脑现在是粉红色的糊状物,我被难住了。
我正在尝试刷新(或重新绘制(两个Text视图,这两个视图向用户提供了两条信息。我曾想过打乱(.shuffled(((岩石、纸张、剪刀数组,但作为我的if语句,它使用的数组位置会使我的逻辑在接下来的几轮中无效。
因此,当用户解除警报时,我试图将Int.random(Int..Int(重写为变量aiChooses和playerShould,但我遇到了各种问题。
非常感谢任何帮助/想法。
import SwiftUI
struct ContentView: View {
let rockPaperScissors = ["Rock", "Paper", "Scissors"]
let winLose = ["Win", "Lose"]
var aiChooses = Int.random(in: 0...2)//<-- trying to update when user dismisses alert
var playerShould = Int.random(in: 0...1)//<-- trying to update when user dismisses alert
@State private var userAnswer = 0
@State private var alertVisible = false
@State private var score = 0
@State private var scoreTitle = ""
@State private var moreInfo = ""
var body: some View {
VStack {
Spacer()
Text("I choose (rockPaperScissors[aiChooses])") //<-- Trying to get this to pull in a new value when alert dismissed
Text("You should (winLose[playerShould])") //<-- Trying to get this to pull in a new value when alert dismissed
Spacer()
HStack {
Spacer()
Section {
Button(action: {
// your action here
self.playerTapped(playerChose: 0, winning: self.playerShould)
}) {
Text("Rock")
}
Spacer()
Button(action: {
// your action here
self.playerTapped(playerChose: 1, winning: self.playerShould)
}) {
Text("Paper")
}
Spacer()
Button(action: {
// your action here
self.playerTapped(playerChose: 2, winning: self.playerShould)
}) {
Text("Scissors")
}
Spacer()
}
.alert(isPresented: $alertVisible) {
Alert(title: Text(scoreTitle), message: Text(moreInfo), dismissButton: .default(Text("Ok")) {
self.nextRound() //<--- call func (below) to refresh starting question
})
}
}
// Picker("Choose Win or Lose", selection: $userAnswer){
// ForEach(0..<rockPaperScissors.count){
// Text(self.rockPaperScissors[$0])
// }
// }
// .pickerStyle(SegmentedPickerStyle())
Spacer()
Text("Score: (score)")
}
}
func playerTapped(playerChose: Int, winning: Int) {
let aiChose = aiChooses
let rock = 0
let paper = 1
let scissors = 2
if winning == 0 {
if playerChose == aiChose {
// score == score
scoreTitle = "Draw!"
moreInfo = "You seleted the same as me!"
}
else if playerChose == rock && aiChose == paper {
score -= 1
scoreTitle = "WRONG!"
moreInfo = "You seleted Rock, I picked Paper!"
}
else if playerChose == rock && aiChose == scissors {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You seleted Rock, I picked Scissors!"
}
else if playerChose == paper && aiChose == scissors {
score -= 1
scoreTitle = "WRONG!"
moreInfo = "You seleted Paper, I picked Scissors!"
}
else if playerChose == paper && aiChose == rock {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You selected Paper, I selected Rock!"
}
else if playerChose == scissors && aiChose == paper {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You seleted Scissors, I picked Paper!"
}
else if playerChose == scissors && aiChose == rock {
score -= 1
scoreTitle = "WRONG!"
moreInfo = "You selected Scissors, I selected Rock!"
}
// trying to lose
else if winning == 1 {
if playerChose == aiChose {
// score == score
scoreTitle = "DRAW!"
moreInfo = "You seleted the same as me!"
}
else if playerChose == rock && aiChose == paper {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You selected the wrong answer, which is RIGHT!"
}
else if playerChose == rock && aiChose == scissors {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You selected the wrong answer, which is RIGHT!"
}
else if playerChose == paper && aiChose == scissors {
score += 1
scoreTitle = "CORRECT"
moreInfo = "You selected the wrong answer, which is RIGHT!"
}
else if playerChose == paper && aiChose == rock {
score -= 1
scoreTitle = "WRONG!"
moreInfo = "You selected the right answer, which is WRONG!"
}
else if playerChose == scissors && aiChose == paper {
score += 1
scoreTitle = "CORRECT"
moreInfo = "You selected the wrong answer, which is RIGHT!"
}
else if playerChose == scissors && aiChose == rock {
score += 1
scoreTitle = "CORRECT!"
moreInfo = "You selected the wrong answer, which is RIGHT!"
}
}
}
alertVisible = true
}
func nextRound() { // <-- when alert is dismissed, update vars for top two text views to update
aiChooses = Int.random(in: 0...2)
playerShould = Int.random(in: 0...1)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
如果您希望SwiftUI在属性更改时更新/重新绘制视图,则需要将其设置为@State
属性:
@State var aiChooses = Int.random(in: 0...2)
@State var playerShould = Int.random(in: 0...1)