代码之家  ›  专栏  ›  技术社区  ›  Asheli

在所有猜测都用完之后,我如何让游戏显示单词?

  •  0
  • Asheli  · 技术社区  · 8 年前

    所以我对编码是新手,我一直在做练习游戏来提高我的技能。我创建了这个猜字游戏,我试图让游戏在所有猜字都用光之后显示这个单词。但是,程序不会读取我编写的代码,以设置标签来显示答案。以下是我迄今为止编写的代码:

    class ViewController: UIViewController {
        var listOfWords = ["ladybug", "program", "computer", "language", "glorious", "incandescent"]
        let incorrectMovesAllowed = 7
    
        var totalWins = 0 {
            didSet {
                newRound()
            }
        }
    
        var totalLosses = 0 {
            didSet {
                newRound()
            }
        }
    
        @IBOutlet var letterButtons: [UIButton]!
        @IBAction func buttonPressed(_ sender: UIButton) {
        sender.isEnabled = false
            let letterString = sender.title(for: .normal)!
            let letter = Character(letterString.lowercased())
            currentGame.playerGuessed(letter: letter)
            updateUI()
            updateGameState()
    
        }
    
        @IBOutlet weak var scoreLabel: UILabel!
        @IBOutlet weak var correctWordLabel: UILabel!
        @IBOutlet weak var treeImageView: UIImageView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            newRound()
            // Do any additional setup after loading the view, typically from a nib.
        }
    
        func enableLetterButtons (_enable: Bool){
            for button in letterButtons {
                button.isEnabled = _enable
            }
        }
    
        var currentGame : Game!
    
        func newRound() {
            if !listOfWords.isEmpty{
               let newWord = listOfWords.removeFirst()
                currentGame = Game (word: newWord, incorrectMovesRemaining: incorrectMovesAllowed, guessedLetters: [])
                enableLetterButtons(_enable: true)
                updateUI()
            } else {
                enableLetterButtons (_enable: false)
            }
    
        }
    
        func updateUI() {
            var letters = [String] ()
            for letter in currentGame.formattedWord.characters {
                letters.append(String(letter))
            }
            let wordWithSpacing = letters.joined(separator: " ")
            correctWordLabel.text = wordWithSpacing
            scoreLabel.text = "Wins: \(totalWins), Losses:\(totalLosses)"
            treeImageView.image = UIImage (named: "Tree \(currentGame.incorrectMovesRemaining)")
        }
    
        func updateGameState(){
           var letters = [String] ()
            for letter in currentGame.word.characters {
                letters.append(String(letter))
            }
            let theAnswer = letters.joined(separator: " ")
            if currentGame.incorrectMovesRemaining == 0 {
                correctWordLabel.text = theAnswer
                Thread.sleep(forTimeInterval: 3)
                totalLosses += 1
            } else if currentGame.word == currentGame.formattedWord {
                totalWins += 1
            } else {
                updateUI()
            }
        }
    }
    

    此外,我有一个这样写的结构:

    import Foundation
    struct Game {
        var word : String
        var incorrectMovesRemaining : Int
        var guessedLetters: [Character]
        mutating func playerGuessed (letter: Character){
            guessedLetters.append(letter)
            if !word.characters.contains(letter){
                incorrectMovesRemaining -= 1
            }
        }
        var formattedWord: String {
            var guessedWord = ""
            for letter in word.characters {
                if guessedLetters.contains(letter) {
                    guessedWord += "\(letter)"
                } else {
                    guessedWord += "_"
                }
            }
            return guessedWord
        }
    }
    
    2 回复  |  直到 8 年前
        1
  •  0
  •   Dávid Pásztor    8 年前

    你需要重新绘制你的用户界面,这已经完成了 self.setNeedsDisplay() . 它通知系统需要重新绘制视图的内容。在你的 updateUI() 关于setNeedsDisplay,您可以获得更多信息 here

    class ViewController: UIViewController {
        var listOfWords = ["ladybug", "program", "computer", "language", "glorious", "incandescent"]
        let incorrectMovesAllowed = 7
        var totalWins = 0 {
            didSet {
                newRound()
            }
        }
    
        var totalLosses = 0 {
            didSet {
                newRound()
            }
        }
    
        @IBOutlet var letterButtons: [UIButton]!
        @IBAction func buttonPressed(_ sender: UIButton) {
        sender.isEnabled = false
            let letterString = sender.title(for: .normal)!
            let letter = Character(letterString.lowercased())
            currentGame.playerGuessed(letter: letter)
            updateUI()
            updateGameState()
    
        }
    
        @IBOutlet weak var scoreLabel: UILabel!
        @IBOutlet weak var correctWordLabel: UILabel!
        @IBOutlet weak var treeImageView: UIImageView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            newRound()
            // Do any additional setup after loading the view, typically from a nib.
        }
    
        func enableLetterButtons (_enable: Bool){
            for button in letterButtons {
                button.isEnabled = _enable
            }
        }
    
        var currentGame : Game!
    
        func newRound() {
            if !listOfWords.isEmpty{
               let newWord = listOfWords.removeFirst()
                currentGame = Game (word: newWord, incorrectMovesRemaining: incorrectMovesAllowed, guessedLetters: [])
                enableLetterButtons(_enable: true)
                updateUI()
            } else {
                enableLetterButtons (_enable: false)
            }
    
        }
    
        func updateUI() {
            var letters = [String] ()
            for letter in currentGame.formattedWord.characters {
                letters.append(String(letter))
            }
            let wordWithSpacing = letters.joined(separator: " ")
            correctWordLabel.text = wordWithSpacing
            scoreLabel.text = "Wins: \(totalWins), Losses:\(totalLosses)"
            treeImageView.image = UIImage (named: "Tree \(currentGame.incorrectMovesRemaining)")
            self.setNeedsDisplay()
        }
    
        func updateGameState(){
           var letters = [String] ()
            for letter in currentGame.word.characters {
                letters.append(String(letter))
            }
            let theAnswer = letters.joined(separator: " ")
            if currentGame.incorrectMovesRemaining == 0 {
                correctWordLabel.text = theAnswer
                Thread.sleep(forTimeInterval: 3)
                totalLosses += 1
            } else if currentGame.word == currentGame.formattedWord {
                totalWins += 1
            } else {
                updateUI()
            }
        }
    }
    
        2
  •  0
  •   Andy Lebowitz    8 年前

    创建一个变量,跟踪你猜错了多少次。然后你可以这样做:

    使用while语句:

     while numberOfTimesGuessedWrong <= 7{
    
    }
     //when you have guessed incorrectly 7 times, the compiler will move here:
    wordLabel.text = "\(correctAnswer)"