翻牌記憶遊戲

Concentration App

一個寫了三遍的翻牌遊戲,卡著找不到解答的時候就重來吧🥲
寫第一遍時花了好幾天還寫不完,翻閱前人的作品也是邊看邊歪頭(?),寫第二遍時花了大半天,但卡在“翻牌show結果”(下圖),舉了白旗向彼得潘求救,最後使用DispatchQueue.main.asyncAfter延遲宣告,得救! 第三遍從頭來過,1.5小時完成翻牌記憶遊戲app。

第二張牌還沒翻完,直接show結果(悲劇)

1. 建立IBOutlet

UIView 顯示Time的View
UILabel 倒數時間&配對成功label
[UIButton] 顯示卡片翻轉圖片的Btns

使用struct紀錄卡牌的資訊:

  • 卡片名稱、卡片圖片、Bool表示卡片正反面
struct 建立卡牌資訊

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延遲宣告

Timer執行之執行之@objc function

📒翻牌效果: 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 判斷卡牌是否配對

設定卡牌判斷正反面

多次使用翻牌判斷,因此設function帶入@IBAction

判斷卡牌:(完整程式碼請至文末GitHub)

📍卡牌相同則,配對成功(該兩張牌無法再被點選),如六組卡牌完成配對跳出GameCompleteAlert
📍卡牌不相同則翻回背面

--

--