贪食蛇游戏的设计

贪食蛇游戏的设计
关于游戏的介绍:
 贪食蛇游戏是一条不停游动的蛇不断的捕食来达到自身的增长,但是若蛇碰到自身的身体或者碰到了任何障碍物,则游戏结束。
 在该篇文章中,我并不讨论游戏的规则,而只是实现一个游动的蛇。通过该实现来看关于面向对象的设计。
寻找规律,建立对象模型:
 首先从物理的角度来分析蛇得运动规律。它是蠕动的,像水一样流动。他有个特性就是身体的每一个点都经过他头部所在的点,他每一个时刻骨节所要运动的目的地是他前一个骨节所在的位置。
 不难看出,其中的对象模型为
蛇,骨骼,骨节,头
抽象的接口为
 蛇,骨骼,骨节,头,图元
结构图:

接口结构图
骨骼骨骼
 
对象结构图
 
给接口添加行为:
图元(GraphicObject)
绘画:进行图元自身的绘画操作
 当前矩形:得到图元当前所在的矩形,也可考虑使用region,这样使得对图元范围得描述更加具体。
骨节(Condyle)
 前一个骨节:提供前序访问
 后一个骨节:提供后序访问
 流动:进行骨节运动诡计得计算。
骨骼(Cadre)(管理骨节链)
 得到头:得到蛇头
 得到尾:得到蛇尾
 新增骨节:在骨节链中新增骨骼
 删除骨节:在骨节链中删掉指定骨节
头(head)
 方向:能够设定和访问当前运动方向。
蛇(Snake)
 增长:蛇进行自身得增长
完善模型,引入访问者模式
存在的问题:
 当前是由具体的骨骼对象来负责图元的绘画以及处理流动的,而骨骼只是管理骨节,没有提供任何访问骨节的方法,我们应该怎样访问骨节呢?比如我们要每个骨节画出自己的形态,我们可能会这样做。在骨骼上提供一个绘画方法,然后通过遍历骨节链,调用每个骨节的绘画方法。这样似乎可以解决问题。那么,我们要进行骨节流动计算呢?我们再在骨骼上提供流动方法,然后同样的遍历骨节,调用每个的流动方法。我们要是加入统计骨节个数功能呢?我们要是加入其他的需要遍历骨骼的方法呢?……
 这样做的缺点是什么?
1、 相似的代码有多份
2、 如果骨节的访问结构发生变化,后果会怎样?
3、 有新功能需要遍历骨节链该怎么办?
这样会迫使我们拷贝代码.
解决办法,引入访问者模式:
新增加接口如下:
 
加入行为:
访问者:(空,无方法,属性)
被访问者:
 接受访问者
骨节访问者:继承自访问者
 访问骨节

完整的结构图:
接口结构图
 
对象结构图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值