#8 甜蜜的 Apple Pie (恐怖的 Hangman)
Published in
6 min readJul 9, 2017
先模仿製作類似的功能跟畫面,然後再參考 Apple 的範例寫法。
畫面 & 功能
猜單字 App。蘋果樹上有 7 個蘋果,點擊畫面上的 26 個英文字母猜單字。
規則如下:
- 畫面下方以 _ 顯示要猜的單字,比方單字是 peter,一開始將顯示
_ _ _ _ _,五個底線。 - 如果猜的字母沒有在單字裡,將會掉一顆蘋果,如果七顆蘋果掉光光的話,你就輸了。(不過掉蘋果也不錯,說不定可以產生七個改變世界的牛頓)
- 如果猜的字母在單字裡,原本顯示的 _ 將變成猜的字母,比方單字是 peter,當我們猜了 p 跟 e,畫面下方將顯示 p e _ e _。
- 猜過的字母不能再按。
- 有多個單字可猜,最下方將顯示單字猜對的次數,比方猜對 3 次,猜錯 1 次。
- 猜完一個單字後,更新最下方的猜對次數,繼續猜下一個單字,此時蘋果會回到七個,全部字母也會重新變成可以按。
範例來源: Develop in Swift Fundamentals
範例下載。
Apple 官方進階版
加上計分機制,猜對字母跟猜對完整的單字都有分數。
彼得潘擴充版
- 加上音效,掉蘋果時有音效。
- 計時制,目標在愈短的時間內猜對十個單字,然後搭配排名系統,比方第一名 40 秒,第二名 60 秒。
- 使用者可選擇不同的水果。
- 改編 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()
}
}