gpt4 book ai didi

Swift Hangman 程序 - 猜测字母无法正确更新/工作

转载 作者:行者123 更新时间:2023-11-30 14:11:55 25 4
gpt4 key购买 nike

我目前正在快速创建一个刽子手游戏,但是当你猜一个字母时,我在更新单词时遇到了一些问题。

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;
}

}

我知道我没有随机发生器来选择随机单词,我稍后会添加它。与将所有正确的猜测添加到数组中以修复他们是否已经猜到该字母相同。

当应用程序打开时,它会暂时设置变量/字符串字=“waffles”。然后它运行 DisplayWord 函数来显示与单词长度对应的所有下划线。

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

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

更新:Phoen1xUK 修复了有关字符串重复的错误,但它用空格替换了您猜测的字母。

最佳答案

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

您得到空格是因为您在 Submit() 内部创建了一个本地字母变量,并且没有更改将在 DisplayWord() 中使用的字母 -因此您可以从 Submit() 的第一行中删除 var

但这仍然不完整,因为每次做出正确的猜测时,所有标记为 * 的位置都将被该字母替换。相反,您应该获取替换原始单词中下划线所需的字母,而不是每次猜测的字母。然后将 if 语句更改为 test += String(originalWord[i]);

还要采用 for in 循环,在该循环中将附加到 DisplayWord() 中的 wordA,因为它每次都会被调用并不断附加到它。我建议您将其放在 viewDidLoad() 中选择单词的位置。顺便说一句,您可以使用 wordA = Array(word) 从字符串创建字符数组。或者,如果您使用的是 Swift 2:Array(word.characters)

总结一下:

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)))
word = wordlist[randomIndex]

wordA = Array(word)

DisplayWord()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func Submit(sender: AnyObject) {
let 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++){
if(wordA[i] == " "){
test += " ";
}else if(String(wordA[i]) == "*") {
test += String(Array(word)[i]);
}else{
test += "_ ";
}
}
secretWord.text = test;
}
}

mentioned by dasdom ,通常的做法是以小写字母开头的方法。

关于Swift Hangman 程序 - 猜测字母无法正确更新/工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31678764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com