1 问题描述与功能需求分析
- 问题描述
游戏会不断从顶部落下游戏块,这个游戏块是由初始化七种游戏块中随机生成的一种。玩家通过按键控制其动作状态,要先利用实现了完成动作后的游戏块所在的位置判断是否可以执行相应位置,若可以实现才能让游戏块执行动作,最后其会在底部搭建成相应形状。每当有满行出现时,满行会被清除,满行上面的数据会顺势下移,每个满行的清除同时会有计分器加分,每次加10分,达到五十分后就会升一级,每升一级都会加速,升到6级为最大速度(避免太快而不能及时判断)。当区域内的BLOCK堆积到区域顶部时,游戏结束。
- 功能需求分析
- 按键实现游戏块的运动:
- 判断是否可执行该动作;
- “a”“d”左右平移;
- “w”“r”顺,逆时针旋转;
- “f”直接落地;
- “s”加速下落。
- 时间控制
- 实现游戏块的自然下落;
- 实现游戏块发生动作后的冷却时间。
- 分数等级相关功能实现
- 清理满行;
- 计算分数等级;
- 升级后游戏块加速掉落。
- 基础功能
- 生成新的游戏块;
- 更新屏幕;
- 判断游戏结束。
2 系统总体设计
- 程序的总体流程分析
首先进入游戏初始化界面绘制游戏底板,分数置零,等级为一,在顶部生成游戏块,开始计时。
判断游戏块在游戏界面上是否达到掉落时间。若否,则游戏块不动,继续检测时间;若时间到达,则判断其下一个位置是否可用,若可用,则游戏块移动;若不可用,说明已经到底,底部形状更新,则检测是否满行,进行相应的清理与计分升级。此时还需检测刚落下的游戏块是否碰到游戏界面顶部判断是否游戏结束,若碰到则游戏结束,若没碰到,则在顶部产生新的游戏块继续循环。
在游戏块掉落的整个过程中只要检测到有键盘按键,就判断当前状况下按键对应动作是否可执行,若可执行就进行动作且对游戏块冷却处理。
- 流程图
- 函数设计
3 系统详细设计
- 预处理命令
1 头文件
2 宏定义 便于后面的调用
- 定义全局变量
1typedef enum枚举 定义一种新的数据类型使其实现同样功能
2其他全局变量
- Main函数
时间控制设计:
- 初始化函数
1 void update_screen()
2 void generate()
- 功能函数
1判断动作是否可执行 int is_legal(COORD test[4])
2清理满行记录分数 void clear_row()
3判断游戏结束 int GameOver(COORD test[4])
- 动作函数
1水平移动 根据direciton值实现左移或者右移
FUNCTION_RESULT try_move_horizontal(int direction)
2旋转 分为O型、T型和其他型(利用坐标)根据direciton实现顺、逆时针选择
T型FUNCTION_RESULT t_spin(int direction)
总旋转函数 FUNCTION_RESULT try_rotate(int direction)
3加速下落函数 FUNCTION_RESULT try_move_down()
4直接到底函数 FUNCTION_RESULT try_fall()
4 测试
5 参考文献
《C语言综合程序设计》
课程设计报告评级指标如下:
评价指标 | A好 | B较好 | C一般 | D较差 | E差 | |
报告符合规定的格式 | ||||||
模块的划分合理 | ||||||
数据结构和算法的时空性能高 | ||||||
图表规范 | ||||||
代码符合规定的风格要求 | ||||||
报告总体评语(手写) |