【问题标题】:Hangman Program刽子手计划
【发布时间】:2017-03-09 16:05:12
【问题描述】:

我正在开发 iOS 上的 Hangman 单视图应用程序游戏,但一直卡在“letterButton”代码上。我打算做的是将viewDidLoad函数中生成的破折号替换为用户将通过字母按钮输入的内容(所有字母按钮都分组在letterButton下)。

我尝试用字母数组替换破折号数组,但它只是告诉我字母数组太大了。我尝试将字母数组转换为字符串,然后用它替换破折号数组,但这也不起作用。所以现在我被卡住了,我不知道该怎么做才能用字母输入替换破折号数组。

请帮忙(这是我的代码;请忽略我拼命尝试的dashArray [n]部分):

class ViewController: UIViewController {
    @IBOutlet var letters: [UIButton]!
    var wordArray: [String] = ["cat", "dog", "hamster", "lizard"]
    var letterArray: [String] = ["Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M"]
    var randomValue: Int = 0
    var word: String = ""

    @IBOutlet weak var wordLabel: UILabel!

    override func viewDidLoad()
    {
        randomValue = Int(arc4random_uniform(UInt32(wordArray.count)))
        word = wordArray[randomValue]
        letterArray = Array(arrayLiteral: word)

        let amount = word.characters.count
        let dashArray = Array(count: amount, repeatedValue: "_")
        let dashString = dashArray.joinWithSeparator(" ")

        wordLabel.text = dashString

        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

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

    @IBAction func letterButton(sender: UIButton)
    {
        let amount = word.characters.count

        var dashArray = Array(count: amount, repeatedValue: "_")

        dashArray [0] =
        dashArray [1] =
        dashArray [2] =
        dashArray [3] =
        dashArray [4] =
        dashArray [5] =
        dashArray [6] =

        let dashString = dashArray.joinWithSeparator(" ")
        wordLabel.text = dashString
    }

    @IBAction func resetButton(sender: UIButton)
    {
        let amount = word.characters.count
        let dashArray = Array(count: amount, repeatedValue: "_")
        let dashString = dashArray.joinWithSeparator(" ")

        wordLabel.text = dashString
    }
}

【问题讨论】:

    标签: ios arrays swift swift2


    【解决方案1】:

    如果我没看错,您需要从点击的按钮中取出一个字母,然后用这个字母替换相应的破折号。

    @IBAction func letterButton(sender: UIButton)
    {
        guard let letterIndex = letters.indexOf(sender) else { return }
    
        let letter = letterArray[letterIndex]
    
        var dashString = wordLabel.text
        dashString[letterIndex] = letter
        wordLabel.text = dashString
    }
    

    编辑感谢您的澄清,在阅读了游戏规则之后,您想要实现的目标变得更加清晰。当前的问题是您将letterArray 重写为viewDidLoad。我的修正建议,可能出现的错误请见谅:

    class ViewController: UIViewController {
         @IBOutlet var letterButtons: [UIButton]!
         @IBOutlet weak var wordLabel: UILabel!
         var words: [String] = ["cat", "dog", "hamster", "lizard"]
         var letters: [String] = ["Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M"]
         var word: String = ""
    
         override func viewDidLoad()
         {
             super.viewDidLoad()
    
             let randomValue = Int(arc4random_uniform(UInt32(words.count)))
             word = wordArray[randomValue]
    
             let amount = word.characters.count
             let dashArray = Array(count: amount, repeatedValue: "_")
             wordLabel.text = dashArray.joinWithSeparator(" ")
         }
    
         @IBAction func letterButton(sender: UIButton)
         {
             guard let letterIndex = letters.indexOf(sender) else { return }
    
             let letter = letterArray[letterIndex]
             guard let indexInWord = word.characters.indexOf(letter) else {
                 print("no such letter in this word")
                 return
             }
    
             // since we have spaces between dashes, we need to calc index this way
             let indexInDashedString = indexInWord * 2
    
             var dashString = wordLabel.text
             dashString[indexInDashedString] = letter
             wordLabel.text = dashString
         }
    
         @IBAction func resetButton(sender: UIButton)
         {
             let amount = word.characters.count
             let dashArray = Array(count: amount, repeatedValue: "_")
             wordLabel.text = dashArray.joinWithSeparator(" ")
         }
    }
    

    【讨论】:

    • 谢谢,但是当我将代码实现到视图控制器中时,虽然您的代码没有任何错误,但每次我按下 iphone 刺激器中的按钮时,它都会说:“致命错误:索引出范围”在控制台中,即使它们的大小完全相同:let letter = letterArray[letterIndex]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2018-10-20
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2015-02-03
    相关资源
    最近更新 更多