首先我们在脑海中应该有一个最基本的游戏界面。我们把这个界面画在草稿纸上:
一 抽象出类
1】从图中我们可以分离出一些对象。
2个显示区
3个信息提示
一些方块实例
2】现在我们来设计游戏需要的类
1。首先实现需要显示的类
gamefield类: 2个显示区。因为他们有太多相同,除了显示面积的大小之外。
2。信息提示这些我们使用textfield
3。每一个大块是由4个小方块组成 所有我们可以定义一个块类,和一个小方块类
square类:小方块类
block 类:每个block由4个小方块组成一个图形。
blocktype类:图形分类 比如 L型 I型 Z型。(详见代码)
OK,现在看的见的东西我们都已经抽象出来了。
二 实现
这里我们使用事件机制+MVC(控制显示分离)显示对象只负责显示,其他的所有操作交给control。 进一步抽象出2个类
gameEvent类:如图形移动,游戏开始,变形等。
control类:对block实例进行控制,以及游戏状态的控制等。
三 关键算法
地图数组 map[maingamefield的高][maingamefield的宽] 为什么不是map[maingamefield的宽][maingamefield的高] ? 自己体会。
方块变形 坐标旋转公式(s,t)旋转后得到的坐标,此处采用逆时针旋90度
s = x cos(b) – y sin(b)
t = x sin(b) + y cos(b)
方块消除
1. 从最底层开始检查是否有有满的行 也就是检查map数组的是否有满的行。根据保存的小方块实例的name来删除对应的显示对象。
2. 消除方块后下移 从最底层开始检查,有空的行 row++ 当前行有小方块,所有小方块的y坐标增加row个数量级(row*方块的高)。地图坐标的行索引增加row。
(详细见代码)