在 SwiftUI 中更新分数标签
Updating the score label in SwiftUI
我的问题是我无法正确更新我的分数标签。当正确选择图像时,我试图添加 +1。但是它只会偶尔更新,我认为这取决于数组的随机性,但我不确定。我曾尝试更改值或事物的随机化方式,但它不会发挥作用或影响游戏所需的功能。我认为这是我盯着它看太久的事情之一。提前致谢!
@State private var targetArray = ["Target1", "Target2", "Target3", "Target4", "Target5", "Target6", "Target7", "Target8", "Target9", "Target10"]
@State private var MainTarget = Int.random(in: 0...5)
@State private var numbers = Array(0...5).shuffled()
@State private var score = 0
func buttonAction() {
// randomise the images
targetArray.shuffle()
numbers.shuffle()
self.MainTarget = Int.random(in:
0...self.numbers.count - 1)
// correct target selected
if self.MainTarget == self.numbers[0] {
self.score += 1 }
if self.MainTarget == self.numbers[1] {
self.score += 1 }
if self.MainTarget == self.numbers[2] {
self.score += 1 }
if self.MainTarget == self.numbers[3] {
self.score += 1 }
if self.MainTarget == self.numbers[4] {
self.score += 1 }
if self.MainTarget == self.numbers[5] {
self.score += 1
} // wrong target selected. Add game over
else { self.score -= 1
}
}
不确定我的问题是否正确。但它看起来像,因为您可以简单地用以下代码替换您的 if 语句(数组中的哪个元素等于 MainTarget 并不重要,因为您将 1 添加到 score 变量,而不管哪个数字与 MainTarget 匹配):
if numbers.contains(self.MainTarget) {
score += 1
} else {
score -= 1
}
您的代码存在的问题是,对于最后一个 if 语句为真的情况,您总是将 score-variable 减少 1 execpt。因此,如果您的第一个条件为真,则将分数加 1,但最后您会将分数减 1,因为最后一个 if 检查将失败...
编辑:甚至可能存在一些逻辑问题,因为数字将始终包含 MainTarget,因为 MainTarget 介于 0 和 5 之间,而数字包含从 0 到 5 的所有数字...
所以为了防止有人对未来感兴趣,我已经解决了这个问题,而不是每次按下按钮时随机化我的数组等,它现在将首先分别在每个按钮上检查获胜条件,然后随机化并更新分数标签。
self.buttonAction()
if self.MainTarget == self.numbers[0] {
self.score += 1 } else { self.score -= 1 }
// randomise the index position and index chosen
if self.MainTarget == self.numbers[0] {
self.numbers.shuffle(); self.MainTarget = Int.random(in: 0...self.numbers.count - 1) }
我的问题是我无法正确更新我的分数标签。当正确选择图像时,我试图添加 +1。但是它只会偶尔更新,我认为这取决于数组的随机性,但我不确定。我曾尝试更改值或事物的随机化方式,但它不会发挥作用或影响游戏所需的功能。我认为这是我盯着它看太久的事情之一。提前致谢!
@State private var targetArray = ["Target1", "Target2", "Target3", "Target4", "Target5", "Target6", "Target7", "Target8", "Target9", "Target10"]
@State private var MainTarget = Int.random(in: 0...5)
@State private var numbers = Array(0...5).shuffled()
@State private var score = 0
func buttonAction() {
// randomise the images
targetArray.shuffle()
numbers.shuffle()
self.MainTarget = Int.random(in:
0...self.numbers.count - 1)
// correct target selected
if self.MainTarget == self.numbers[0] {
self.score += 1 }
if self.MainTarget == self.numbers[1] {
self.score += 1 }
if self.MainTarget == self.numbers[2] {
self.score += 1 }
if self.MainTarget == self.numbers[3] {
self.score += 1 }
if self.MainTarget == self.numbers[4] {
self.score += 1 }
if self.MainTarget == self.numbers[5] {
self.score += 1
} // wrong target selected. Add game over
else { self.score -= 1
}
}
不确定我的问题是否正确。但它看起来像,因为您可以简单地用以下代码替换您的 if 语句(数组中的哪个元素等于 MainTarget 并不重要,因为您将 1 添加到 score 变量,而不管哪个数字与 MainTarget 匹配):
if numbers.contains(self.MainTarget) {
score += 1
} else {
score -= 1
}
您的代码存在的问题是,对于最后一个 if 语句为真的情况,您总是将 score-variable 减少 1 execpt。因此,如果您的第一个条件为真,则将分数加 1,但最后您会将分数减 1,因为最后一个 if 检查将失败...
编辑:甚至可能存在一些逻辑问题,因为数字将始终包含 MainTarget,因为 MainTarget 介于 0 和 5 之间,而数字包含从 0 到 5 的所有数字...
所以为了防止有人对未来感兴趣,我已经解决了这个问题,而不是每次按下按钮时随机化我的数组等,它现在将首先分别在每个按钮上检查获胜条件,然后随机化并更新分数标签。
self.buttonAction()
if self.MainTarget == self.numbers[0] {
self.score += 1 } else { self.score -= 1 }
// randomise the index position and index chosen
if self.MainTarget == self.numbers[0] {
self.numbers.shuffle(); self.MainTarget = Int.random(in: 0...self.numbers.count - 1) }