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

先模仿製作類似的功能跟畫面,然後再參考 Apple 的範例寫法。

畫面 & 功能

猜單字 App。蘋果樹上有 7 個蘋果,點擊畫面上的 26 個英文字母猜單字。

規則如下:

  1. 畫面下方以 _ 顯示要猜的單字,比方單字是 peter,一開始將顯示
    _ _ _ _ _,五個底線。
  2. 如果猜的字母沒有在單字裡,將會掉一顆蘋果,如果七顆蘋果掉光光的話,你就輸了。(不過掉蘋果也不錯,說不定可以產生七個改變世界的牛頓)
  3. 如果猜的字母在單字裡,原本顯示的 _ 將變成猜的字母,比方單字是 peter,當我們猜了 p 跟 e,畫面下方將顯示 p e _ e _。
  4. 猜過的字母不能再按。
  5. 有多個單字可猜,最下方將顯示單字猜對的次數,比方猜對 3 次,猜錯 1 次。
  6. 猜完一個單字後,更新最下方的猜對次數,繼續猜下一個單字,此時蘋果會回到七個,全部字母也會重新變成可以按。

範例來源: Develop in Swift Fundamentals

範例下載。

Apple 官方進階版

加上計分機制,猜對字母跟猜對完整的單字都有分數。

彼得潘擴充版

  1. 加上音效,掉蘋果時有音效。
  2. 計時制,目標在愈短的時間內猜對十個單字,然後搭配排名系統,比方第一名 40 秒,第二名 60 秒。
  3. 使用者可選擇不同的水果。
  4. 改編 Apple Pie,以吊死鬼(Hangman)的方式呈現,畫面可參考以下連結:

4. 研究 App Store 上的 Hangman App,設計一個類似的 App。

Apple 範例程式重點

使用 auto layout & stack view 製作畫面

Game.swift

  • 在型別 Game 定義遊戲的相關功能

比方判斷點選的字母是否正確,儲存目前猜過的字母等。

internal struct Game {
internal var word: String
internal var incorrectMovesRemaining: Int
internal var guessedLetters: [Character]
internal var formattedWord: String { get }
internal mutating func playerGuessed(letter: Character)
}
  • 在 Game 裡定義 computed property formattedWord,將尚未猜到的字母顯示底線
var formattedWord: String {
var guessedWord = ""
for letter in word {
if guessedLetters.contains(letter) {
guessedWord += "\(letter)"
} else {
guessedWord += "_"
}
}
return guessedWord
}

ViewController.swift

  • 字母 buton 連到 controller 的 outlet collection。
@IBOutlet var letterButtons: [UIButton]!
  • 使用 property observer didSet,在 totalWins & totalLosses 改變時觸發 newRound,猜下一個單字。
var totalWins = 0 {
didSet {
newRound()
}
}

var totalLosses = 0 {
didSet {
newRound()
}
}

學生作品

--

--

彼得潘的 iOS App Neverland
彼得潘的 100 道 Swift iOS App 謎題

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com