【发布时间】:2017-05-04 23:34:31
【问题描述】:
这就是我想要做的。我正在制作一个游戏,对手猜对方的话,每个猜测都有直接和间接的命中。请参阅星号以了解我遇到问题的地方。
var directSum = 0
var indirectSum = 0
var words = ["canon", "cnams"]
var secretWord = Array(words[0].characters)
var guessWord = Array(words[1].characters)
var secretWordInd = [Character]()
var guessWordInd = [Character]()
let dir1 = secretWord[0] == guessWord[0]
let dir2 = secretWord[1] == guessWord[1]
let dir3 = secretWord[2] == guessWord[2]
let dir4 = secretWord[3] == guessWord[3]
let dir5 = secretWord[4] == guessWord[4]
if dir1 && dir2 && dir3 && dir4 && dir5 {
print ("you won!")
}
if dir1 {
directSum += 1
} else {
secretWordInd.append(secretWord[0])
guessWordInd.append(guessWord[0])
}
if dir2 {
directSum += 1
} else {
secretWordInd.append(secretWord[1])
guessWordInd.append(guessWord[1])
}
if dir3 {
directSum += 1
} else {
secretWordInd.append(secretWord[2])
guessWordInd.append(guessWord[2])
}
if dir4 {
directSum += 1
} else {
secretWordInd.append(secretWord[3])
guessWordInd.append(guessWord[3])
}
if dir5 {
directSum += 1
} else {
secretWordInd.append(secretWord[4])
guessWordInd.append(guessWord[4])
**}
for var secretLetter in secretWordInd {
for var guessLetter in guessWordInd{
if secretLetter == guessLetter {
secretWordInd.remove(at:secretWordInd.indexOf(secretLetter))
guessWordInd.remove(at:guessWordInd.indexOf(guessLetter))
indirectSum += 1
}
}
}**
var score = [directSum, indirectSum]
我需要做的是每次 Array:SecretWordInd 中有一个字符匹配 Array:guessWordInd 中的一个字符时计数,只删除这两个字符(每个字符串一个),每次发生这种情况时,indirectSum += 1 .例如,如果一个中有 2 个“a”,另一个中有 1 个,则该函数需要从每个中删除 1 个 a。 这意味着directSum函数的输出,在这种情况下indirectSum应该是[1,2],因为猜测词中的一个“n”只有一个间接命中。 这是什么让我的函数变得复杂。两个数组中的值的数量不会是恒定的。我不知道如何使用一种方法来做到这一点(.contains 仅适用于我认为的字符串)。非常感谢您的帮助!谢谢!
【问题讨论】:
-
这里不是为您完成作业的地方。 :) 发布一个关于你在实现你想做的事情时遇到的问题的具体问题。
-
这实际上是我正在构建的游戏的游戏逻辑的一部分。对不起,如果它看起来很业余,但我被卡住了
-
哈哈我绝对知道那是什么感觉。只是一个提示,先尝试实现一些东西,然后然后寻求帮助。机会是您认为非常接近您需要的东西,它使帮助更容易:)
-
是的。我尝试运行 for-in 循环,但我知道的所有属性点语法似乎都适用于字符串而不是字符。我本可以在描述方面做得更好
-
**为更好的解释而编辑