這是作業的猜數字喔!只是稍微調整了一下,取了個比較假掰的名字而已啦!
因為要操作,畫面錄起來時間比較長,故以影片方式呈現,有興趣的再點進去就好了,畢竟玩法跟做法跟大家都大同小異,沒有什麼特別的地方啦XD
因為這是幾週前的作業,大部分的同學都做好猜數字的檔案,並寫在Medium上了,這次也很感謝大家的教學(雙手合十)。
以下為這次的製作過程:
首先先將需要的元件排列好,元件中,我背景拉了兩個,一個是鎖著的心,一個是開鎖的心,在viewDidLoad的時候先將開鎖的心隱藏起來,等答對了再把這張圖顯示出來就可以了!
在IBOutlet上,輸入用的框框命名為nuberTF(因為少打了一個m…不然本來應該叫numberTF的…等發現以後已經來不及惹XD)
bgImage2跟messageAboutLife這兩個都只是為了要隱藏他們而拉Outlet
//在class底下先將IBOutlet拉好關聯,當然Button部分的IBAction也會順便拉好。@IBOutlet weak var nuberTF: UITextField!
@IBOutlet weak var hintLB: UILabel!
@IBOutlet weak var lifeLeft: UILabel!
@IBOutlet weak var bgImage2: UIImageView!
@IBOutlet weak var messageAboutLife: UILabel!var answerNumber = Int()
//打開app以後會隨機預設一個answerNumber,這邊先宣告一下它的類型
var guessNum = 0
//玩家猜的數字,先宣告一下他的類型
var guessChance:Int = 6
//還是宣告類型,這是你能猜的次數(給六條命很多了!)
定義好該有的類型之後先寫function,寫程式好玩的地方就在這裡,已經思考過這個app的互動會怎麼走了,所以一條一條加上對他的指令,一開始只是設定了guessNum的範圍,如果guessNum剛好等於answerNumber的時候會怎樣,又如果比answerNumber大的話呢?那剩下來的範圍就是比answerNumber小囉?就這麼白話的開始寫if... else if … else…
就在這些都設定好以後又會有其他問題,如果有白目輸入了大於我提示的數字20呢,該給他們另類提示嗎?又如果有人輸入了不是數字的…(因為已經限制keyboard是數字鍵盤,所以在手機測試的話不會有這類問題,但如果在電腦run時用非數字的輸入的話會閃退喔!)
就這樣一層一層地把if加上去,功能也越來越完整,就像原本是拿一團黏土,這邊切掉一點、那邊挖去一些,終於稍微成形了!
在寫Button的function之前,先將場景準備好,場景就是ViewDidLoad最初始的樣子:
override func viewDidLoad() {
super.viewDidLoad() bgImage2.isHidden = true//先把這張圖隱藏起來!!
hintLB.isHidden = true//把提示訊息隱藏隱藏!!
lifeLeft.isHidden = true//把生命值隱藏隱藏!!
messageAboutLife.isHidden = true//提示的東西都看不到!!
answerNumber = Int(arc4random_uniform(20))+1//亂數一個答案給我吧
nuberTF.text = ""//輸入的訊息要空下來
guessChance = 6//生命值的初始
之後在”輸入”的Button function,開始對nuberTF做限制
@IBAction func goGuess(_ sender: Any) {
hintLB.isHidden = false
lifeLeft.isHidden = false
messageAboutLife.isHidden = falseif nuberTF.text != nil {
if Int(nuberTF.text!)! <= 20 {
if Int(nuberTF.text!) == answerNumber { hintLB.text = "心鎖解開了,恭喜你"
bgImage2.isHidden = false
lifeLeft.isHidden = true
messageAboutLife.isHidden = true
}
//第一個if限制了TextFile裡必須有東西,第二個if希望TextFile內數字小於等於20,第三個if則是顯示猜中了會發生的事情:
首先是提示框框內會有恭喜你的訊息,再來就是開鎖的那張圖會顯示出來
顯示你生命值的訊息則會完全隱藏起來(反正也不需要了) else if Int(nuberTF.text!)! >= answerNumber {
hintLB.text = "太超過,這樣心鎖解不開"
guessChance -= 1
lifeLeft.text = String(guessChance)
}
//如果給的答案大於random選出來的數字,則會顯示上面那段提示,而生命值也會-1 else {
hintLB.text = "不夠啊,這樣心鎖解不開"
guessChance -= 1
lifeLeft.text = String(guessChance)
}
//這段則是指答案小於正解時會出現的狀況,一樣,生命值-1 } else{
hintLB.text = "說好是20以下,認真點解開心鎖吧"
guessChance -= 1
lifeLeft.text = String(guessChance)
}
//這段else是如果答案小於等於之外的話,會發生的事情XD
//一樣毫不留情的扣掉一次生命值喔!! if guessChance <= 0 {
rePlayAlert()
}
//這邊的條件適當生命值走到0的時候,會跳出一個警示訊息。
}
}
一層又一層的if限制完以後,把最後那段的警示訊息function寫一下
func rePlayAlert(){ let deadAlert = UIAlertController(title: "遊戲結束", message: "很遺憾,你沒能解開心鎖,心鎖密碼是\(answerNumber)", preferredStyle: .alert)
//你已經史惹,新細明體XDDD不過這邊還是會好心的告訴你你沒猜到的答案是什麼 let replayBut = UIAlertAction(title: "重來", style: .default, handler: {(action:UIAlertAction) -> () in self.viewDidLoad()
})//在Alert裡面的按鈕設定 deadAlert.addAction(replayBut) self.present(deadAlert, animated: true, completion: nil)}
//將上面的按鈕加入進Alert中
最後是重來一次的那個button的function:
@IBAction func rePlayBtn(_ sender: Any) {viewDidLoad()}//就一句話:我要你---回到初始值。
依照著這些步驟,你也可以創造你的心鎖密碼唷!^ 0 < ~*
題外話一下,這次的背景圖是用水彩手繪的唷!!希望會有人喜歡ˊ w ˋ
https://www.youtube.com/watch?v=xVTI5eSzwzQ
Peter說:別把心上鎖唷!