1、贪食蛇游戏的设计关于游戏的介绍:贪食蛇游戏是一条不停游动的蛇不断的捕食来达到自身的增长,但是若蛇碰到自身的身体或者碰到了任何障碍物,则游戏结束。在该篇文章中,我并不讨论游戏的规则,而只是实现一个游动的蛇。通过该实现来看关于面向对象的设计。寻找规律,建立对象模型:首先从物理的角度来分析蛇得运动规律。它是蠕动的,像水一样流动。他有个特性就是身体的每一个点都经过他头部所在的点,他每一个时刻骨节所要运动的目的地是他前一个骨节所在的位置。不难看出,其中的对象模型为蛇,骨骼,骨节,头抽象的接口为蛇,骨骼,骨节,头,图元结构图:接口结构图骨骼骨骼骨骼 骨节蛇 图元头对象结构图骨骼骨节 蛇图元头骨节头骨骼 蛇
2、给接口添加行为:图元(GraphicObject)绘画:进行图元自身的绘画操作当前矩形:得到图元当前所在的矩形,也可考虑使用 region,这样使得对图元范围得描述更加具体。骨节(Condyle)前一个骨节:提供前序访问后一个骨节:提供后序访问流动:进行骨节运动诡计得计算。骨骼(Cadre) (管理骨节链)得到头:得到蛇头得到尾:得到蛇尾新增骨节:在骨节链中新增骨骼删除骨节:在骨节链中删掉指定骨节头(head)方向:能够设定和访问当前运动方向。蛇(Snake)增长:蛇进行自身得增长完善模型,引入访问者模式存在的问题:当前是由具体的骨骼对象来负责图元的绘画以及处理流动的,而骨骼只是管理骨节,没有
3、提供任何访问骨节的方法,我们应该怎样访问骨节呢?比如我们要每个骨节画出自己的形态,我们可能会这样做。在骨骼上提供一个绘画方法,然后通过遍历骨节链,调用每个骨节的绘画方法。这样似乎可以解决问题。那么,我们要进行骨节流动计算呢?我们再在骨骼上提供流动方法,然后同样的遍历骨节,调用每个的流动方法。我们要是加入统计骨节个数功能呢?我们要是加入其他的需要遍历骨骼的方法呢?这样做的缺点是什么?1、 相似的代码有多份2、 如果骨节的访问结构发生变化,后果会怎样?3、 有新功能需要遍历骨节链该怎么办?这样会迫使我们拷贝代码.解决办法,引入访问者模式:新增加接口如下:访问者 被访问者骨节访问者加入行为:访问者:(空,无方法,属性)被访问者:接受访问者骨节访问者:继承自访问者访问骨节完整的结构图:接口结构图骨骼 骨节蛇 图元头访问者 被访问者骨节访问者对象结构图骨骼骨节蛇图元头骨节头骨骼 蛇被访问者黄造军,,2003/8/25