#8 甜蜜的 Apple Pie (恐怖的 Hangman)

程式碼 View controller.swift

import UIKitclass ViewController: UIViewController {var listOfWords = [ “swift” , “glorious” , “buccaneer” , “incandescent” , “bug” , “program” ] //答案let incorrectMovesAllowed = 7 //猜7次var totalWins = 0 { //總贏數,贏了就下一題didSet {newRound()}}var totalLesses = 0 { //總輸數 ,輸了就下一題didSet {newRound()}}var currentGame : Game! //不知道物件實體內容所以先給值@IBOutlet weak var treeImageView: UIImageView!@IBOutlet weak var correctLabel: UILabel!@IBOutlet weak var scoreLabel: UILabel!@IBOutlet var letterButtons: [UIButton]!@IBAction func buttonPressed(_ sender: UIButton) {sender.isEnabled = false //是否啟用let letterString = sender.title(for: .normal)! //標題正常顯示(大寫)let letter = Character(letterString.lowercased()) //轉成小寫self.currentGame.playerguessed(letter: letter) //猜的玩家 猜一個變一個小寫updateGameState() //更新畫面輸幾分,贏幾分}override func viewDidLoad() {super.viewDidLoad()newRound() //重新開始}func newRound () { //是否空的 如果是空的的相反 就是有值 就啟用if !self.listOfWords.isEmpty {let newWord = self.listOfWords.removeFirst()self.currentGame = Game.init(word: newWord, incorrectMovesRemaining: self.incorrectMovesAllowed, guessedLetters: [])enableLetterButtons(true)updateUI()}else {enableLetterButtons(false)}}func updateUI () {var letters : [String] = [“”]for letter in self.currentGame.formattedWord { //轉型成Stringletters.append(String(letter))}let wordWithSpacing = letters.joined(separator: “ “) //再加空格self.correctLabel.text = wordWithSpacingself.scoreLabel.text = “Wins: \(self.totalWins) Lesses: \(self.totalLesses) “ //顯示輸贏self.treeImageView.image = UIImage(named: “Tree \(self.currentGame.incorrectMovesRemaining)”) //顯示剩幾次機會}func updateGameState() {if self.currentGame.incorrectMovesRemaining == 0 {self.totalLesses += 1}else if self.currentGame.word == self.currentGame.formattedWord {self.totalWins += 1}else {updateUI()}}func enableLetterButtons ( _ enable: Bool ) { //把isEnabled 寫在同一個方法比較清楚for button in self.letterButtons {button.isEnabled = enable}}}

程式碼 Game.swift

import Foundationstruct Game {var word : String //答案題目var incorrectMovesRemaining : Int //幾次機會var guessedLetters : [ Character ] //猜的字母mutating func playerguessed ( letter : Character ) { //玩家猜的字母轉成小寫self.guessedLetters.append(letter) //依序放進猜字母裡面if !self.word.contains(letter) { //如果題目裡面沒有包含猜的字母就減一self.incorrectMovesRemaining -= 1}}var formattedWord : String { //正確顯示,錯誤空格var guessedWord = “”for letter in self.word {if self.guessedLetters.contains(letter) {guessedWord += “\(letter)”}else {guessedWord += “_”}}return guessedWord}}

--

--