silverlight超小游戏开发包SmallGameLib(三)—— Mouse终极大特训

继续使用咱们的SmallGameLib开发!

这次我们做一个玩家通过鼠标控制一只老鼠,躲避来自四面八方的小虫的攻击。

若被小虫碰到,则Game Over。

 

整个游戏分为3个界面,

 

1。 难度选择

2。 游戏主界面

3。 GAMEOVER,给出得分和评价。

 

silverlight超小游戏开发包SmallGameLib(三)—— Mouse终极大特训silverlight超小游戏开发包SmallGameLib(三)—— Mouse终极大特训silverlight超小游戏开发包SmallGameLib(三)—— Mouse终极大特训

 

 

难度越大,则小虫越多。

 

首先导入我们的SmallGameLib的各个目录,修改Config下的GameStatus,根据我们的需求,修改如下:

 

    public enum GameStatus
    {
        难度选择,
        开始,
        游戏中,
        游戏结束,
    }

 

游戏过程中一共有2种物体,一种是主角(也就是老鼠),一种虫子。

那么我们需要将这两者从 BaseObj 派生,分别完成其构造函数,帧逻辑函数。

 

然后,注意,我们这里需要在游戏中进行碰撞检测,所以我们还需要重载BaseObj的getMyBounderRect()方法,来给其指定碰撞检测盒。

在调试过程中,可以将对象的 BoundVisiable 属性设成 true来观测碰撞盒。效果如下图

 

silverlight超小游戏开发包SmallGameLib(三)—— Mouse终极大特训

 

getMyBounderRect指定的是针对物体左上角点的一个矩形框。

如何检测两物体相撞呢?很简单,首先可以通过物体的 getBounderRect方法获取其包围框的绝对位置(针对于整个画布的位置)

然后通过 MathTools 的IsHit方法判断是否相撞,

 

 MathTools.IsHit( obj.getBounderRect(),mouser.getBounderRect() = true 则两者相撞

整个游戏采用一个层就够了,于是在Logic下新建Layer派生自BaseLayer。

 

下面写我们的Layer层逻辑。层逻辑实际分4步:

 

1。 向所属物体派发逻辑

2。 移除窗口外的物体

3。 随机在窗口四周生成小虫

4。 判断是否有小虫和老鼠相撞

 

 如下所示:

 

 

base类(BaseLayer)提供的 logic()即向所属物体派发逻辑, removeObjectsOutside方法可以移除窗口外的物体。

使用MathTools的IsProbEventHappen可以以一定概率发生事件。返回为true则发生,false不发生。

 

最后编写我们的游戏核心,派生自 GameEngine类,需要实现状态机以及界面调度。

 

GameCore.cs

 

 

如何在屏幕四周生成点?

 

使用MathTools提供的RandomBorderPoint()方法,可以随机生成一个处于边框位置的点。

 

最后,提供试玩地址:

 

http://218.240.31.225:902/testsilverlight/catchmouse/

 

看看你在变态难度能坚持多久~

你可能感兴趣的:(游戏,windows,.net,silverlight)