我們總共要寫這幾種格子類型的遊戲,像保衛蘿蔔類型的塔防,其實我個人傾向於一個經典塔防——矢量塔防,貪吃蛇,掃雷,三消(三消我就不多講了),格子類型的泡泡龍,賽車,吃豆人,坦克大戰等一系列的遊戲。這裏我就只做了幾種,至於沒做的大家可以自己去做,因爲沒那麼多時間同時也覺得沒必要。
我們現講掃雷吧,這裏我們就只用一個scence來管理這麼多個遊戲。例如這裏我們把數據封裝到了miandata裏面,對於不同的格子類型的遊戲他們的操作方法是不一樣,我說的操作是說的對miandata數據操作,同時每個格子類型的遊戲玩法也不一樣,大家先想想一個scence怎麼管理這麼多個遊戲呢,當然他們肯定是有共同點,當然也有不同點嘛。這裏我們的做法是建一個數據操作的基類,和一個玩家操作的基類。
分別如下:
這個是數據操作的基類:
public abstract class BaseAdapter
{
public virtual void InilizedByJosn()
{
}
public virtual void UpdateGridArray(ManageOnTypeTetris curTypeTetris, IUpdateUI updateUi)
{
}
public virtual void IntilizedPrefence(BasePlayer basePlayer, ISetCurTetris setCurTetris, Transform parentTransform,
IPlayAudiClip playAudiClip)
{
}
}
這個是玩家操作的基類:
public abstract class BasePlayer
{
public abstract void OnPlay();
public abstract void OnRestart();
public abstract void OnFailOver();
public abstract void OnWinOver();
public abstract void OnAwake();
public abstract void IntilizedObj(GameObject tparent, GameObject bparent);
public abstract void IntilizedPef(BaseAdapter baseAdapter, ITertrisViewBind bind, IUpdateUI ui);
}
同時我們在數據操作類主要爲玩家操作類服務的。所以主遊戲類中我們的寫法也挺簡單的,如下:
private void Update()
{
if (GameState.Playing == _curGameState)
{
_basePlayer.OnPlay();
}
else if (GameState.Restart == _curGameState)
{
_basePlayer.OnRestart();
}
else if (GameState.WinOver == _curGameState)
{
_basePlayer.OnWinOver();
}
else if (GameState.FailOver == _curGameState)
{
_basePlayer.OnFailOver();
}
}
這裏這麼多if else寫的不是很好,如果可能的話換成有限狀態機,如果我有時間的話 和大家講講有限狀態機(有限狀態機並不是大家說的 簡單的if else作用)
還有初始化的時候,對其進行初始化,如果我們這裏做掃雷的那麼我們就要開始新建2個類,一個MineAdapter類和一個 MinePlayer類,他們分別繼承BaseAdapter和BasePlayer。
首先我們先把整個雷 和數字生成出來吧,我把這個方法寫在MineAdapter類中,這裏必須放到這裏,這個類要和maindata發生交互,所以寫在這裏比較合適。這裏的格子我採用的大下是12*22格子。這個遊戲分爲3個等級,分別爲簡單,適中 困難。不同等級只是代表初始化雷的個數不同。這個生成雷的代碼就很簡單,然後根據雷生成相應的數字,例如我們掃描[0,0]的時候,先訪問8個方向格子中是否有雷,統計雷的個數,格局雷的個數來填寫相應的數字。是不是很簡單啊,接下來講講如何MinePlayer中的操作。當我們鼠標按下(或者觸屏的時候)我們通過鼠標的位置計算出我們點到格子中格子所在的行數和列數。假如求得行數爲a,列數爲b,我們首先要判斷這個格子中是否有雷
_mainData.AllInts[point.X,point.Y]=1表示有雷 否則就沒有。當我們點擊當前位置的時候,首先判斷上面是不是有標誌旗子,如果有旗子的話 我們單擊是沒有用,我們可以重新標誌數組來標記旗子的情況。如果不是旗子,判斷有沒有雷 如果有雷就直接遊戲結束,如果沒有雷 並且啥也沒有的話 我們遞歸找周圍的沒有雷知道有數字就結束遞歸。思路其實不用講大家也明白,思路其實是根據你的需求來的嘛 ,這個遊戲要這樣玩你就這樣去設計你的代碼。對於後面的遊戲我只會說思路,大家可以根據思路大家自己去寫,具體的代碼我們給大家link的。理解和敲,然後仔細品味這些東西纔是你的。