想做一个简单的俄罗斯方块,怎么分析设计?如何结合设计模式?

chen1phy 2002-08-10 06:10:07
好多朋友都做过俄罗斯方块游戏的,一起来讨论一下吧。

我简单想到以下几点:
1、需要以下几个类:
方块类:
容器类:就是方块在其中运动的窗口
框架类:用来创建各种对象、响应玩家操作、显示积分、速度、级别等等;

2、为方块类、容器类、框架类定义接口
其中方块类接口可以这样定义:
Interface IBlock
{
显示;
移动(左、右、下);
旋转(左、右);
启动;
停止;
改变状态(启动、停止、暂停);
改变下落速度;
。。。
}

3、所有对象的创建采用创建型模式

有人感兴趣么?
...全文
209 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mis98ZB 2002-08-11
  • 打赏
  • 举报
回复
其实几个月前的《电脑编程技巧与维护》上就有。
chen1phy 2002-08-11
  • 打赏
  • 举报
回复
首先声明我是一个不折不扣的菜鸟,刚学编程不久。
因为看了一些书,但总感觉很虚,所以找了这么一个小游戏来实作一下。其实完全用面向过程的方法,比较容易完成,一个二维数组应该可以搞定。但这不是我需要的。
我只是希望通过分析和设计这个游戏,来实践一下怎么样面向接口编程,怎么样运用设计模式;
如果你有兴趣按这个思路来设计一次,可以贴出你的想法;
如果你觉得太小case,你尽可以一笑而过;

下面是我想到的改进的一些:

游戏的非正式场景:
1、方块和容器应该处于同一个坐标系统;
2、游戏开始后,框架 a 创建 容器 c;
3、a 创建方块 t,t的状态为运动,从初试坐标下落,具有速度s;
4、t在下落前,会询问c,是否可以下落;如果不可以,则t状态变为停止;
c 会检查自己的状态,给t一个回答;
5、a接收玩家的操作,通知t,t移动或者旋转;t移动前也会询问c;
6、t 在状态由运动变为停止后,会通知c,让c检查状态;c 如果发现某行或者某几行已满,会删除这几行;同时修改这几行上面行的状态;c还需要通知a,由a来改变速度、级别、积分;
7、c在检查状态的时候,如果发现最上面一行有数据,会通知a,a来终止游戏
8、t不显示自己,所有的显示操作,由c完成

方块的接口:
class ITetris
{
public:
virtual int MoveToLeft(); //左移
virtual int MoveToRight(); //右移
virtual int MoveDown(); //下移
virtual void RotateLeft(); //左旋转
virtual void RotateRight(); //右旋转
virtual int ChangeSpeed(int); //改变速度
virtual int ChangeColor(int); //改变颜色
virtual int ChangeCoord(int, int); //改变坐标
virtual int ChangeState(int); //改变状态
};

容器的接口:
class IContainer
{
virtual void ChangeSize(int, int);
virtual int CheckState();
};

框架的接口:
class IApplication
{
virtual int CreateContainer();
virtual int CreateTetris();
virtual void ChangeGameSetup(); //修改积分、速度、级别等
};

t 是不知道a的存在的,t只知道c;c需要和a交互;


sunni 2002-08-11
  • 打赏
  • 举报
回复
我觉得这么小的东西没必要兴师动众的

当然合理的对象模型,对以后的维护大有好处
weya 2002-08-11
  • 打赏
  • 举报
回复
没做过,有兴趣关注一下。
lanying 2002-08-10
  • 打赏
  • 举报
回复
不要一开始就什么设计模式
先搞清楚数据结构再说

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧