双人版俄罗斯方块实验报告.doc_第1页
双人版俄罗斯方块实验报告.doc_第2页
双人版俄罗斯方块实验报告.doc_第3页
双人版俄罗斯方块实验报告.doc_第4页
双人版俄罗斯方块实验报告.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京邮电大学信息与通信工程学院程序设计实践设计报告课题名称: 双人版俄罗斯方块 学生姓名: 王子轩 班 级: 2014211118 班内序号: 02 学 号: 2014210504 日 期: 6/30 1 课题概述 1.1课题目标和主要内容本课题在控制台下设计并实现一个俄罗斯方块的游戏。这是一款桌面游戏,最终要写成一个双人模式和选择难度的俄罗斯方块游戏,涉及到了控制台图形界面和多线程编程。对于每个俄罗斯方块模块来说,中间是工作区,右边是记录当前游戏的级别和分数。游戏开始后,自动播放背景音乐,通过键盘的W、S、A、D和上、下、左、右来控制方块的旋转、下移、左移、右移,ESC键退出。本课题的开发环境为Visual Studio 2012集成开发环境,工程类型为Win32 Console Application。 1.2系统的主要功能 基本功能:双人版俄罗斯方块 扩展功能:背景音乐、游戏分级、存储显示最高分2. 系统设计 2.1 系统总体框架 开始界面打开背景音乐显示两个游戏界面初始化各项数值(分数和等级)两位玩家操作游戏一个玩家失败时游戏结束 2.2 系统详细设计 1 模块划分图及描述1. void Init(int, int mapMAPHMAPW);初始化给定的工作区并调用show函数。2. void Turn(int mapMAPHMAPW, int a4, int w, int h, int *x, int y);实现方块的旋转。3. bool IsAvailable(int mapMAPHMAPW, int a, int x, int y, int w, int h);判断方块在工作区的下一个位置上是否存在其他方块,若不存在则返回TRUE,否则返回FALSE。4. void DrawBlocks(int a, int w, int h, int x, int y, WORD wColors, int nColors, int dx, int dy);显示方块和边界。5. void ClearSquare(int a, int w, int h, int x, int y, int dx, int dy);实现擦除方块的功能。6. void GameOver();实现游戏结束界面的相关功能。7. void DeleteLine(int mMAPW, int row, int dx, int dy); 实现方块满一行后消除一行的效果。 8. int main()主函数,启动整个程序。9. DWORD WINAPI WriteThread(LPVOID lpParam)线程1,用于显示玩家1的界面,处理玩家1的游戏进程,包括方块下落、变换、消行、更新分数、技能效果等。包括处理玩家二的键盘输入信息。10. 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(mapij & aw*(i-y)+j-x)return 0;return 1; 算法2: void DrawBlocks 1 算法功能 显示边界和方块 2 算法基本思想 遍历数组的每一个元素,若元素值不是0,则显示一个基本方块,否则不显示,同时根据计算出来的temp值决定显示方块还是边界。 3 算法空间、时间复杂度分析 4 代码逻辑(可用伪代码描述)void DrawBlocks(int a,int w,int h,int x,int y,WORD wColors,int nColors)int temp;for(int i=0;ih;i+)for(int j=0;j0)if(temp=-3)textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,);else if(temp=-2)textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,);else if(temp=-1)textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,);else if(temp=1)textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,); 算法3: void Turn 1 算法功能 旋转方块 2 算法基本思想 按行从下向上,按列从左往右扫描,如果是有效点则进行90度翻转,即行列对调 3 算法空间、时间复杂度分析 4 代码逻辑(可用伪代码描述)void Turn(int a4,int w,int h,int *x,int y)int b44=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;int sign=0,line=0;for(int i=h-1;i=0;i-)for(int j=0;jw;j+)if(aij)bjline=aij;sign=1;if(sign) line+;sign=0;for(int i=0;i4;i+)if(IsAvailable(b0,*x-i,y,w,h)*x-=i;for(int k=0;kh;k+)for(int j=0;jw;j+)akj=bkj;break; 算法4: void ClearSquare 1 算法功能 擦除方块 2 算法基本思想 与Drawblocks类似,只不过不显示方块而是显示空格。 3 算法空间、时间复杂度分析 4 代码逻辑(可用伪代码描述)void ClearSquare(int *a,int w,int h,int x,int y)WORD wColors1=0;for(int i=0;ih;i+)for(int j=0;j0 & (i+y0)textout(handle,2*(x+j)+dx,y+i+dy,wColors,1, ); 算法5: void DeleteLine 1 算法功能 消除一行 2 算法基本思想 按行扫描,利用clearsquare实现擦除 3 算法空间、时间复杂度分析 4 代码逻辑(可用伪代码描述)void DeleteLine(int mMAPW,int row)WORD wColors1=FOREGROUND_RED| FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,2+dx,row+dy,wColors,1,);_sleep(100);for(int i=row;i1;i-)ClearSquare(&mi1,MAPW-2,1,1,i);for(int j=1;jMAPW-1;j+)mij=mi-1j;if (mij = 0)wColors0 = 0;elsewColors0 = SQUARE_COLORmij-1;DrawBlocks(&mij,1,1,j,i,wColors,1);for(int i=1;iMAPW-1;i+)m1i=0; 算法6: void GameOver 1 算法功能 实现结束界面 2 算法基本思想 利用记录分数的变量score1和score2来打印比分和比赛结果。 3 算法空间、时间复杂度分析 4 代码逻辑(可用伪代码描述)void GameOver()WORD wColors1=FOREGROUND_RED| FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,7+dx,10+dy,wColors,1,GAME OVER);exit(EXIT_SUCCESS);3. 程序运行结果分析 包括输入数据来源和格式、输出显示方式、主要界面、操作流程、响应时间,运行效果等。4. 总结 4.1课题的难点和关键点在写本程序的过程中,出现了许多问题,如方块位置不对,方块冲突,方块卡住不动,线程没有反应等等,在调试时使用了逐过程调试的方法,一一解决了这些问题。同时,为了实现资源最大利用,调试方法、程序优化和改进等方面也需要去考虑。4.2 本课题的评价本课题实现了简单的俄罗斯方块游戏,能够实现不同颜色、不同形状的方块,加强了游戏性,游戏流畅,且基本没有bug。但是我的文件只能实现背景音乐和游戏选级两个附加功能,以后有时间会继续完善。 4.3心得体会通过本次实验我学习了在win32控制台下编写游戏程序的方法,而且主要学习了多线程编程的知识。本次游戏涉及到的新知识很多,学习编写和改进游戏用了许多

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论