2017-08-14 4 views
0

私はコーディングが新しく、私は自分のスキルを身につけるために練習用のゲー​​ムをやっています。私はこの言葉の推測ゲームを作成しました。私は、すべての推測が使い果たされた後にゲームに言葉を見せようとしています。しかし、プログラムは、答えを表示するためにラベルを設定するために書き込むコードを読み取っていません。またすべての推測が使い切られた後、ゲームに単語を表示させるにはどうすればよいですか?

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 
    } 
} 
+0

プログラムが 'label 'をあなたが望むものに変更しないという問題はありますか? –

+0

'updateUI()'関数の終わりに 'self.setNeedsDisplay()'を呼び出すと、UIを再描画する必要があることをシステムに知らせるべきです。 –

答えて

0

あなたのUIを再描画する必要があり、これは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() 
     } 
    } 
} 
0

を得ることができます。あなたは間違って7回を推測する場合、だから、

while numberOfTimesGuessedWrong <= 7{ 

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

を8時間に、それは、正しい答えが表示されます:

はwhile文を使用します。そして、あなたはこれを行うことができます。

関連する問題