- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
双人版俄罗斯方块实验报告
程序设计实践
设
计
报
告
课题名称: 双人版俄罗斯方块
学生姓名: 王子轩
班 级: 2014211118
班内序号: 02
学 号: 2014210504
日 期: 6/30
课题概述
1.1课题目标和主要内容
本课题在控制台下设计并实现一个俄罗斯方块的游戏。这是一款桌面游戏,最终要写成一个双人模式和选择难度的俄罗斯方块游戏,涉及到了控制台图形界面和多线程编程。对于每个俄罗斯方块模块来说,中间是工作区,右边是记录当前游戏的级别和分数。游戏开始后,自动播放背景音乐,通过键盘的W、S、A、D和上、下、左、右来控制方块的旋转、下移、左移、右移,ESC键退出。
本课题的开发环境为Visual Studio 2012集成开发环境,工程类型为Win32 Console Application。
1.2系统的主要功能
基本功能:双人版俄罗斯方块
扩展功能:背景音乐、游戏分级、存储显示最高分
2. 系统设计
2.1 系统总体框架
开始界面??打开背景音乐??显示两个游戏界面??初始化各项数值(分数和等级)??两位玩家操作游戏??一个玩家失败时游戏结束
2.2 系统详细设计
[1] 模块划分图及描述
void Init(int, int map[MAPH][MAPW]);初始化给定的工作区并调用show函数。
void Turn(int map[MAPH][MAPW], int a[][4], int w, int h, int *x, int y);实现方块的旋转。
bool IsAvailable(int map[MAPH][MAPW], int a[], int x, int y, int w, int h);判断方块在工作区的下一个位置上是否存在其他方块,若不存在则返回TRUE,否则返回FALSE。
void DrawBlocks(int a[], int w, int h, int x, int y, WORD wColors[], int nColors, int dx, int dy);显示方块和边界。
void ClearSquare(int a[], int w, int h, int x, int y, int dx, int dy);实现擦除方块的功能。
void GameOver();实现游戏结束界面的相关功能。
void DeleteLine(int m[][MAPW], int row, int dx, int dy); 实现方块满一行后消除一行的效果。
int main()主函数,启动整个程序。
DWORD WINAPI WriteThread(LPVOID lpParam)线程1,用于显示玩家1的界面,处理玩家1的游戏进程,包括方块下落、变换、消行、更新分数、技能效果等。包括处理玩家二的键盘输入信息。
DWORD WINAPI WriteThread1(LPVOID lpParam)线程2,用于显示玩家2的界面,处理玩家2的游戏进程,包括方块下落、变换、消行、更新分数、技能效果等。包括处理玩家二的键盘输入信息。
[2] 类关系图及描述
[3] 程序流程图及描述
2.3 关键算法分析
算法1:bool IsAvailable
[1] 算法功能
判断方块是否可以移动
[2] 算法基本思想
判断方块在工作区的下一个位置上是否存在其他方块,若不存在则返回TRUE否则返回FALSE。
[3] 算法空间、时间复杂度分析
[4] 代码逻辑(可用伪代码描述)
bool IsAvailable(int a[],int x,int y,int w,int h)
{
for(int i=y;iy+h;i++)
for(int j=x;jx+w;j++)
if(map[i][j] a[w*(i-y)+j-x])
return 0;
return 1;
}
算法2: void DrawBlocks
[1] 算法功能
显示边界和方块
[2] 算法基本思想
遍历数组的每一个元素,若元素值不是0,则显示一个基本方块,否则不显示,同时根据计算出来的temp值
您可能关注的文档
最近下载
- 中医内科学课件 肺胀.ppt VIP
- 美罗培南治疗新生儿脓毒症的临床实践指南(2024年版).pptx
- 难点微专题4测声速问题(解析版).docx VIP
- 幼儿园组织与管理(第2版)课件 第七章 幼儿园总务管理.pptx
- 2025内蒙古维拉斯托矿业有限公司招聘6人笔试参考题库附答案解析.docx VIP
- 难点微专题1听到几次声音问题(解析版).docx VIP
- 普发涡轮分子泵Hipace 300 ZH说明书.pdf VIP
- 难点微专题7烧杯中放试管问题(解析版).docx VIP
- 难点微专题1杠杆转动时拉力大小变化问题(解析版).docx VIP
- 难点微专题6测不准的温度计(解析版) .docx VIP
文档评论(0)