貓咪三消遊戲 — Match 3 Game App

ytchao
海大 SwiftUI iOS / Flutter App 程式設計
6 min readMay 10, 2022

功能需求

  • 開發類似 Candy Crush,神魔之塔的三消遊戲,將三個一樣的東西消除。
  • 修課的大學生須以 SwiftUI 製作。
  • 設計有趣的消除物,比方消除寶石,動物,水果等。
  • 以拖曳手勢移動東西,可跟上、下、左、右的東西互換位置。
  • 如果換了之後能達成連線(至少 3 個),將可消除東西並獲得分數。如果換了之後無法連線,東西將回到原本的位置。
  • 東西消除後將自動加入東西填滿格子,若是剛好有三個以上連在一起的東西將自動消除加分,然後再填滿格子,直到沒有三個以上連在一起為止。
dragGesture 中執行 game.judge()
判斷交換方塊後是否可以消除方塊
若可以消除方塊,則 dragGesture 中會收到回傳值 true
否則再次進行 game.swapGrid() 使方塊回到原位
game.judge() 中會持續進行消除方塊及填補方塊(game.dropDown())
每次消除方塊將以 game.property.combo 記錄消除次數
直到沒有可消除方塊時,將 game.property.combo 進行加權
並加入 game.property.score 累計成績
  • 東西交換和達成連線消除時必須有動畫效果。
  • 點選 Random 會將畫面重新隨機填滿東西。
  • 倒數計時制,時間到時遊戲結束,比方限時 60 秒。畫面上顯示目前剩餘的秒數,顯示數字和長條 bar 。
  • 記錄玩家的最高分。

加分功能

  • combo 特別加分,比方交換後消除多條連線時會額外加分。
game.judge() 中會持續進行消除方塊及填補方塊(game.dropDown())
每次消除方塊將以 game.property.combo 記錄消除次數
直到沒有可消除方塊時,將 game.property.combo 進行加權
並加入 game.property.score 累計成績
  • 玩家反應遲鈍,過了一段時間還是找不到可消除的東西時,提示玩家可消除的東西。
timer 中計算上次成功交換並消除方塊到現在相差多久時間
若超過 game.property.hintInterval ( 設定為3秒 )
且目前動畫效果已結束
則提示可消除方塊的位置
  • 分不同關卡, 每關有特別的關卡形狀。
  • 自動檢查畫面是否無解,若沒有可三消的東西將重新填滿東西,讓畫面永遠保持可三消的狀態。
game.setMatchHint() 中製作 checkList
checkList: 存放數個可能被消除的三缺一組合
checkList = [
[ 方塊0類型A, 方塊1類型A, 方塊2, 方塊3, 方塊4, ... ],
...
]
其中 方塊2 為欲交換的方塊 ( 缺角 )
方塊3、方塊4、...為可與 方塊2 交換,且非 方塊0 與 方塊1 的方塊
且可能沒有可與 方塊2 交換的方塊 ( 特殊形狀棋盤 )
根據 checkList 找到交換後確實能消除的組合
三個一組存入 hintList
1. 若 hintList 中有值,則隨機擇一作為提示
2. 否則若 checkList 中有可能被消除的三缺一組合
則強制更改成確實能消除的組合並作為提示
(強制更改後會檢查是否出現三連線
出現時會重新執行 game.setMatchHint())
3. 否則重新填滿棋盤並重新檢查棋盤

--

--