翻牌記憶遊戲
Published in
Mar 9, 2021
Concentration App
一個寫了三遍的翻牌遊戲,卡著找不到解答的時候就重來吧🥲
寫第一遍時花了好幾天還寫不完,翻閱前人的作品也是邊看邊歪頭(?),寫第二遍時花了大半天,但卡在“翻牌show結果”(下圖),舉了白旗向彼得潘求救,最後使用DispatchQueue.main.asyncAfter
延遲宣告,得救! 第三遍從頭來過,1.5小時完成翻牌記憶遊戲app。
1. 建立IBOutlet
UIView 顯示Time的View
UILabel 倒數時間&配對成功label
[UIButton] 顯示卡片翻轉圖片的Btns
使用struct紀錄卡牌的資訊:
- 卡片名稱、卡片圖片、Bool表示卡片正反面
2. viewDidLoad( )
Timer 倒數咪牌時間,及遊戲時間
time = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDown), userInfo: nil, repeats: true)
timeInterval 每間隔幾秒執行一次
self 執行對象
selector 執行哪個func :@objc func
userInfo傳入nil
repeats 重複執行與否
#selector執行之@objc function
執行UIView.transition
翻牌效果&DispatchQueue.main.asyncAfter
延遲宣告
📒翻牌效果: UIView.transition
UIView.transition(with: cardBtns[i], duration: 0.5, options: .transitionFlipFromRight, animations: nil, completion: nil)
📒延遲宣告: DispatchQueue.main.asyncAfter
//0.3秒後執行以下動作
DispatchQueue.main.asyncAfter(deadline: .now()+0.3) {
執行之動作
}
3. 建立IBAction
UIButton flipCard 判斷卡牌是否配對
設定卡牌判斷正反面
判斷卡牌:(完整程式碼請至文末GitHub)
📍卡牌相同則,配對成功(該兩張牌無法再被點選),如六組卡牌完成配對跳出GameCompleteAlert
📍卡牌不相同則翻回背面