2009年5月10日 星期日

魔法寶石消除演算法

現在要來稍微研究一下魔法寶石類遊戲的核心Gameplay,消除演算法。有了基本知識之後,再來用good實作一個魔法寶石遊戲。進入正題之前,先簡單介紹一下玩法。如圖中所示,這是一個典型的魔法寶石遊戲,當然還有其它不同的變形,不過這邊只提核心玩法,這是所有魔法寶石遊戲都相同的。


在一個魔法寶石的遊戲區裡可以看到一堆不同顏色的方塊。遊戲的目的很單純,想辨法不斷的消除方塊,直到無法再繼續為止(GameOver)。這邊消除的方法主要有二種,一種我稱為米字形規則,另一種我稱它為十字形規則。

十字形規則

十字形規則是以一個方塊為中心,如果包含自身在這個方塊的上下左右的相隣方塊中有四個以上相同顏色的方塊存在,則這個方塊就可以被消除。


如上圖中,可以看到要判定1號方塊是否可以消除的範圍比米字形規則大的多,依據十字規則的檢驗,最後可以找出1到4號的四個黃色方塊可以被消除。因為這次我們只要探討米字形消除規則,所以略過十字規則的研究。

米字形規則

米字形規則是以一個方塊為中心,假如在這個方塊的上下,左右,或斜向的方向上包含自己本身有超過三個以上相同顏色的方塊存在,則這個方塊就可以被消除。


上圖中間的區塊部份,中間1號方塊周圍用紅色線框框起來的四個方向,垂直(A)、水平(B)及二條斜向(C及D)。以此規則,上圖右側區塊部份中標示1到5的五個橘色方塊可以被消除。

檢查的時候,每一條方向是各自獨立的,也就是說上述超過三個以上相同顏色的方塊這個限制必須是在同一方向上才能成立。只要其中一條方向消除條件成立,剩下的方向就可以略過不作檢驗。同理在同一個方向上只要檢查出有三個以上相同方塊存在,剩下的方塊就不必一一檢查。

以垂直方向為例。

首先檢查1號方塊上方的方塊是否和1號方塊是相同顏色,假如不同的話再往上一個方塊也不需要再作檢查。假如是一樣的話就再檢查最上面那個A方塊,假如也是一樣的話,那剩下的下面二個A方塊就沒必要再檢驗了,因為已經有三個一樣的方塊存在了。

假如最上面的A方塊和1號方塊不同的話,則再檢查1號方塊下方的A方塊。假如這個方塊和1號方塊不同的話,那最下面的A方塊也不需要再多作檢查了。反過來說,假如這個方塊和1號方塊是一樣顏色的話,再加上1號方塊上面那塊就有三個一樣顏色的方塊。

同理可以推出反向及其它方向的檢驗規則,就不列虛擬碼了。

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...