格子游戏类型实践—2"/>
格子游戏类型实践—2
我们总共要写这几种格子类型的游戏,像保卫萝卜类型的塔防,其实我个人倾向于一个经典塔防——矢量塔防,贪吃蛇,扫雷,三消(三消我就不多讲了),格子类型的泡泡龙,赛车,吃豆人,坦克大战等一系列的游戏。这里我就只做了几种,至于没做的大家可以自己去做,因为没那么多时间同时也觉得没必要。
我们现讲扫雷吧,这里我们就只用一个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的。理解和敲,然后仔细品味这些东西才是你的。
更多推荐
格子游戏类型实践—2
发布评论