Swift Hangman程序 - 猜测字母没有正确更新/正常工作

时间:2015-07-28 14:08:10

标签: swift

我目前正在swift创建一个刽子手游戏,但是当你猜一封信时,我有一些更新单词的问题。

import UIKit

class ViewController: UIViewController {


@IBOutlet weak var Submit: UIButton!
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var secretWord: UILabel!

var wordlist = [String]();
var wordA = [Character]();
var randomIndex: Int = 0;
var word: String = "";



var test: String = "";

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    wordlist = ["orange juice", "waffles", "pancakes", "toast", "poptarts", "bagels", "bacon", "eggs"]

    randomIndex = Int(arc4random_uniform(UInt32(wordlist.count)))
    //var word = wordlist[randomIndex]
    word = wordlist[1];

    DisplayWord()
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
var letter: String = "";

@IBAction func Submit(sender: AnyObject) {
    var letter = textField.text;
    for(var i = 0; i < wordA.count; i++){
        if(letter == String(wordA[i])){
            wordA[i] = "*";
        }
    }
    DisplayWord();
}
func DisplayWord(){
    test = "";
    for(var i = 0; i < NSString(string: word).length; i++){
        for index in indices(word){
            wordA.append(word[index]);
        }

        if(wordA[i] == " "){
            test += "       ";
        }else if(String(wordA[i]) == "*"){
            test += letter;
        }else{
            test += "_ ";
        }
    }
    secretWord.text = test;
}

}

我知道我没有随机发生器来选择一个随机单词,我稍后会添加它。如果他们猜测已经猜到了那个字母,那么添加所有正确的猜测到一个数组来修复。

当应用程序打开时,它会设置变量/ String word =&#34; waffles&#34;目前。然后它运行DisplayWord函数以显示与单词长度相对应的所有下划线。

然后,当您单击“提交”按钮时,它会扫描该单词以查看它是否包含您猜到的单词。如果是,则将该字母设置为*。然后重新运行DisplayWord函数。它检查是否有任何字母是*,如果是*,而不是添加&#34; _&#34;对于字符串,它添加了最后输入的字母。

出于某种原因,它只是将字符串加倍,并且标签中仍然包含所有下划线。

更新:Phoen1xUK修复了字符串加倍的错误,但它用空格替换了你猜到的字母。

1 个答案:

答案 0 :(得分:0)

首先,它将字符串加倍的原因是因为每次调用test时都会附加DisplayWord()。您应该在该函数内部创建test,或者每次调用该函数时将其设置为空字符串。

您正在获取空格,因为您在Submit()内创建了一个本地字母变量而没有更改将在DisplayWord()中使用的字母 - 因此您可以删除{来自var的第一行的{1}}。

然而,这仍然是不完整的,因为每次进行正确的猜测时,所有标记为*的地方都将被该字母替换。您应该获得从原始单词替换下划线所需的字母,而不是每次猜到的字母。然后将if语句更改为Submit()

同时从test += String(originalWord[i]);中取出wordA的for循环,因为每次都会调用它并不断追加它。我建议你把它放在DisplayWord()内选择的地方。另外,您可以使用viewDidLoad()从字符串中创建一个字符数组。或者,如果您使用的是Swift 2:wordA = Array(word)

总结:

Array(word.characters)

正如mentioned by dasdom一样,通常的做法就是使用小写字母来启动方法。