快吧单机 攻略列表 《俄罗斯方块》高手心得

《俄罗斯方块》高手心得

作者: 谢前聪 2013-09-17 09:23 互联网
首先我们在脑海中应该有一个最基本的游戏界面。我们把这个界面画在草稿纸上: 一 抽象出类 1】从图中我们可以分离出一些对象。 2个显示区 3个信息提示 一些方块实例 2】现在我们来设计游戏需要的类 1。首先实现需要显示的类 gamefield类: 2个显示区。因为他们有太多相同,除了显示面积的大小之外。 2。信息提示这些我们使用textfield 3。每一个大块是由4个小方块组成 所有我们可以定义一个块 ...

首先我们在脑海中应该有一个最基本的游戏界面。我们把这个界面画在草稿纸上:

一 抽象出类

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。

(详细见代码)

精选单机游戏推荐