当前位置:首页 > 俄罗斯方块-C语言教学文案
精品文档
历时两天,我确定好了整个项目的功能模块,做好了整体规划,也选好了开发工具。接下来我将要步入总体设计阶段。
1.3 总 体 设 计
经过总体构成功能的分析后,接下来就可以根据各构成功能模块进行对应的总体设计处理。主要包括两个方面:
? 运行流程分析;
? 核心处理模块分析。
1.3.1 运行流程分析
2004年7月6日,上午,阳光明媚
了整个游戏的具体运作流程图。
游戏的具体运作流程如图1-4所示,用左移VK_LEFT、右移VK_RIGHT、下移VK_DOWN、旋转VK_UP和退出VK_Esc键判断键值。上述几个按键移动处理的具体说明如下。
? VK_LEFT:调用MoveAble( )函数,判断是否能左移,如果可以则调用
EraseBox函数,清除当前的游戏方块。并在下一步调用show_box( )函数,在左移位置显示当前游戏的方块。
? VK_RIGHT:右移处理,与上面的VK_LEFT处理类似。 ? VK_DOWN:下移处理,如果不能再移,必须将flag_newbox标志设置为1。 ? VK_UP:旋转处理,首先判断旋转动作是否执行,在此需要满足多个条件,
如果不合条件,则不予执行。
? VK_Esc:按Esc键后将退出游戏。
精品文档
精品文档
图1-4 游戏运行流程
1.3.2 核心处理模块分析
2004年7月6日,下午,多云,还有很长的路要走 1.方块预览
新游戏的方块将在4×4的正方形小方块中预览,使用随机函数rand( )可以产生1-19之间的游戏方块编号,并作为预览的方块编号。其中品尼高正方形小方块的大小由BSIZE×BSIZE来计算。
2.游戏方块控制处理
方块的移动控制是整个游戏的重点和难点,具体信息如下。 1) 左移处理 处理过程如下。
(1) 判断是否能够左移,判断条件有两个:左移一位后方块不能超越游戏底板的左边线,否则将越界;并且在游戏方块有值(值为1)的位置,游戏底板不能是被占用的(占
精品文档
精品文档
用时值为1)。
(2) 清除左移前的游戏方块;
(3) 在左移一位的位置处,重新显示此游戏的方块。 2) 右移处理 处理过程如下。
(1) 判断是否能够右移,判断条件有两个:右移一位后方块不能超越游戏底板的右边线,否则将越界;游戏方块有值位置,游戏底板不能被占用;
(2) 清除右移前的游戏方块;
(3) 在右移一位的位置处,重新显示此游戏的方块。 3) 下移处理 处理过程如下。
(1) 判断是否能够下移,判断条件有两个:下移一位后方块不能超越游戏底板的底边线,否则将越界;游戏方块有值位置,游戏底板不能被占用。满足上述两个条件后,可以被下移处理。否则将flag_newbox设置为1,在主循环中会判断此标志;
(2) 清除下移前的游戏方块;
(3) 在下移一位的位置处,重新显示此游戏的方块。 4) 旋转处理 处理过程如下。
(1) 判断是否能够旋转,判断条件有两个:旋转后方块不能超越游戏底板的底边线、左边线和右边线,否则将越界;游戏方块有值位置,游戏底板不能被占用;
(2) 清除旋转前的游戏方块;
(3) 在游戏方块显示区域(4×4)的位置,使用当前游戏方块的数据结构中的next值作为旋转后形成的新游戏方块的编号,并重新显示这个编号的游戏方块。
3.更新显示
当游戏中的方块在进行移动处理时,要清除先前的游戏方块,用新坐标重绘游戏方块。当消除满行后,要重绘游戏底板的当前状态。清除游戏方块的方法是先画轮廓再填充,具体过程如下:绘制一个轮廓,使用背景色填充小方块,然后使用前景色画一个游戏底板中的小方块。循环此过程,变化当前坐标,填充并画出19个这样的小方块,从而在游戏底板中清除此游戏方块。
精品文档
精品文档
4.游戏速度和分数更新处理
当行满后,积分变量score会增加一个固定的值,然后将等级变量level和速度变量speed相关联,实现等级越高速度越快的效果。
2004年7月6日,晚上,总体设计的重要性 数据结构设计
1.4 数 据 结 构
2004年7月7日,上午,阳光充足 我就设计好了系统所需要的数据结构。 1.游戏底板结构体
此处的游戏底板结构体是BOARD,具体的代码如下。
struct BOARD /*游戏底板结构,表示每个点所具有的属性*/ {
int var; /*当前状态只有0和1,1表示此点已被占用*/ int color; /*颜色,游戏底板的每个点可以拥有不同的颜色,增强美观性*/
}Table_board[Vertical_boxs][Horizontal_boxs];
其中,BOARD结构体表示了游戏底板中每个小方块的属性,var表示了当前的状态,为0时表示未被占用,为1时表示已经被占用。
2.游戏方块结构体
此处的游戏方块结构体是SHAPE,具体的代码如下。
struct SHAPE{
/*一个字节是8位,用每4位表示游戏方块中的一行,例如:box[0]=\表示的是: 1000 1000 1100 0000*/
char box[2]; int color; /*每个方块的颜色*/ int next; /*下个方块的编号*/ };
精品文档
共分享92篇相关文档