已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2012年第二阶段课程设计报告实训项目: 程序设计基础课程设计 学号: 姓名:陈天楚专业: 计算机科学与技术实训日期:2012年6月 28 日至2012年7月9日指导教师: 焦贤沛 实训成绩: 江西财经大学信息管理学院11一、 问题概述俄罗斯方块是一款风靡全球的游戏,它由俄罗斯人阿列克谢帕基特诺夫发明。游戏在一个m*n的矩形内进行,基本规则是移动、旋转和放置游戏自动输出的方块,使其排列成完整的一行而消去得分。游戏开始后,方块会根据难度的不同而以不同的速度下降,在方块完成下落之前,玩家需要利用左右移动和旋转操作,使方块以最合适的形态下落,方块完成下落后如果拼成了没有间隙的行,这一行就会被消去,为接下来的方块提供空间。如果方块累积到游戏空间的顶层,游戏便失败而无法继续。本项目在传统的俄罗斯方块游戏的基础上,增加了多人游戏功能,多人游戏分时限模式和对战模式两种。在时限模式下,玩家分别进行游戏而不相互干涉,以指定时间内得分最高者为胜。在对战模式下,一个玩家的得分将会令其对手的游戏速度变快,从而加大另一个玩家的游戏难度,给其带来困难,以最晚结束游戏者为胜,具有一定的趣味性。多人游戏中,两个玩家通过操作不同的按键组(W、S、A、D按键组和上、下、左、右按键组)来控制各自的游戏。本项目还实现了排行榜功能,分数排名前十位的用户有机会输入其姓名并登录至排行榜中。排行榜可以在主菜单界面中选择查看。二、 系统目标综合运用所学知识,掌握Visual C+ 6.0环境下的C程序设计技术、相关库函数的功能及调用方式,完成俄罗斯方块的游戏的设计与实现。实现基本的游戏功能,完成俄罗斯方块游戏的基本算法,允许用户通过按键旋转、移动方块,并检测和预防用户非法的操作。实现多人游戏功能。完成时限模式和对战模式。维护两个玩家各自的游戏状态,并判断胜利者。实现排行榜功能。记录排名前十位的用户并显示,允许用户在将成绩登录到排行榜时输入其姓名。三、 设计的过程及步骤1、需求分析所要实现的功能如下:1 实现基本的俄罗斯方块游戏功能。实现方块的随机生成、旋转和移动并判断操作是否可行的功能,实现方块定时自动下落并随时处理玩家的按键操作的功能,实现判断玩家操作是否合法并过滤非法操作的功能,实现消除满行并更新分数的功能,实现无法放下方块时结束游戏的功能。2 实现多人游戏功能。允许两个用户使用不同的按键控制对应的游戏区域,并在游戏结束后判断胜利的一方。实现两种多人游戏模式:时限模式、对战模式。3 实现计分功能,在方块下落和满行消除成功时分别给用户加上对应的分数,在时限模式中游戏失败后会自动重置并减去特定的分数,分数高的玩家获胜。4 实现难度增加功能,在用户分数改变时修改方块下落的速度,以达到逐渐提高难度的目的,在对战模式中一方得分将会加快另一方玩家的游戏速度。5 实现排行榜功能,根据用户的成绩计算用户在排行榜中的排名,当用户的排名在前十位之内时,提示用户输入其姓名并显示在排行榜中。排行榜以二进制文件的方式保存。6 通过输出制表符在控制台中实现对话框、输入提示窗口、排行榜窗口等多种界面,允许用户使用鼠标操作。2、设计文件结构本项目中排行榜数据的结构如下所示:typedef struct char name20; /姓名 int score; /分数 NODE;static NODE top10;top数组以二进制方式保存至文件中,文件路径为当前目录下的toplist.bin。3、设计系统功能图4、函数设计游戏功能模块,实现俄罗斯方块游戏,函数在main.c中实现:void DrawBox(int x,int y,int v); /* 在屏幕指定坐标画出方框图案 */void setP(GAME_CONTEXT *c,int x,int y,int v); /* 设置一个点并更新到屏幕上 */int getP(GAME_CONTEXT *c,int x,int y); /* 获取一个点的值 */void RotateBlock(BLOCK a,BLOCK* b);/* 旋转一个方块 */int CheckBlock(GAME_CONTEXT *c,BLOCK b,int x,int y,int p,int clear);/* 当p=-1时,检查(x,y)处是否能放下方块b而不被其它方块阻挡 当p= 0时, clear=0时,将方块b在mapp中的(x,y)处清除 clear=1时,将方块b放置在mapp中的(x,y)处*/void LoadBlockFromPatterns(BLOCK* b,int p);/* 从指定的图案中装载一个方块,图案存储在全局变量patterns中 */void UpdateScore(GAME_CONTEXT *c);/* 将分数显示在屏幕上,并根据分数计算新的方块下落速度,分数越高,下落速度越快 */int CheckLine(GAME_CONTEXT *c);/* 检查满行并消除 */int myrand();/* 利用键盘按键等信息生成随机数 */void GenerateNextBlock(GAME_CONTEXT *c,int RedrawOnly);/* 随机生成下一个方块,RedrawOnly=1时只是将方块更新到屏幕上而不重新生成 */void GameOver(GAME_CONTEXT *c);/* 处理游戏结束 */int NextStep(GAME_CONTEXT *c);/* 游戏的驱动函数,生成游戏的下一个状态 */void DrawGameFrame(GAME_CONTEXT *c);/* 输出游戏的边框至屏幕上 */void Redraw(GAME_CONTEXT *c);/* 用于在暂停取消后重新绘制游戏 */void InitGameContext(GAME_CONTEXT *c,int xOffset);/* 初始化一个游戏状态 */void DispatchUpKey(GAME_CONTEXT *c);/* 处理上键 */void DispatchLeftRightKey(GAME_CONTEXT *c, int isleft);/* 处理左右键 */void DispatchDownKey(GAME_CONTEXT *c);/* 处理下键 */void DrawProgressBar(int timelimit);/* 输出计时模式中所使用的进度条至屏幕上 */void GameOverMultiplayerMode(GAME_CONTEXT* c1,GAME_CONTEXT* c2);/* 处理多人游戏中的游戏结束 */void GameLoop(int multiplayer,int gamemode);/* 游戏循环。初始化游戏状态,处理定时器、按键等事件,在游戏结束后返回。 */事件管理模块,处理Windows系统下的控制台键盘、鼠标事件,并管理定时器,在ui.c中实现:int ui_addtimer(int Id,DWORD Interval);/* 添加一个定时器 */int ui_gettimerbyid(int Id);/* 通过Id在定时器数组中查找指定的定时器 */int ui_removetimer(int Id);/* 清除指定Id的定时器 */int ui_settimerinterval(int Id,int Interval);/* 设置定时器的超时时间 */int ui_getevent(UI_EVENT* evt);/* 此函数在事件到达时才会返回,并将事件返回至*evt中 *私有函数:int ui_checktimer();/* 检查是否存在超时的定时器,如果没有返回-1 */int ui_alloctimer();/* 查找定时器数组中的一个空闲位置 */int ui_pumpevent(UI_EVENT* evt);/* 检查是否存在未处理的事件,如果没有将立即返回0 */用户界面模块,处理对话框、输入窗口等常用界面,并提供文字颜色、光标定位等函数,在ui.c和uidialog.c中实现。void ui_cls();/* 清除屏幕 */void ui_setpos(int x,int y);/* 将光标移动至(x,y)处 */void ui_drawstr(int x,int y,char* str);/* 在(x,y)处打印指定的字符串 */void ui_settextcolor(int color);/* 设置字体的颜色 */void ui_drawframe(int x,int y,int w,int h,int titlebar);/* 画出边框,titlebar指定是否含有标题栏 */void ui_drawbutton(char* text,int x,int y,int reverse);/* 画出一个按钮,reverse指定按钮是否反白显示 */int ui_msgbox(char* title,char* msg,char* btntext,int textwidth);/* 弹出一个具有标题、提示文本和按钮的消息框,在用户点击按钮后返回按钮的序号 */void ui_inputbox(char* title,char* prompt,char* str,int maxlen);/* 提示用户输入字符串的输入窗口 */排行榜模块,处理排行榜的更新、显示、保存、读取等操作,在toplist.c中实现void LoadTopList();/* 从文件中读取排行榜 */void SaveTopList();/* 将排行榜保存至文件 */void UpdateTopList(int score);/* 根据分数更新排行榜,如果能在排行榜中排上名次,提示用户输入姓名 */int GetRank(int score);/* 获取指定分数在排行榜中的排名 */void ShowTopList();/* 显示排行榜 */四、 实训成果图4-1 单人游戏运行界面经过测试,本俄罗斯方块游戏程序能够较好地满足玩家的需要,在游戏过程中可以随时按下空格键暂停,在暂停界面中可以选择继续或者退出游戏。图4-2 多人游戏运行界面(对战模式)图4-3 多人游戏运行界面(对战模式,右方玩家已结束游戏)支持多人游戏。在多人游戏中,两个玩家分别使用WSAD和上下左右方向键控制各自的游戏,多人游戏有两种规则可以选择,分别为时限模式和对战模式。两种多人游戏模式均具有一定的可玩性和趣味性,适合俄罗斯方块爱好者进行游戏。图4-4 游戏主菜单界面图4-5 游戏排行榜界面游戏提供排行榜功能,成绩排名前十位的用户可以将自己的姓名和成绩登录至排行榜中。排行榜可以在主菜单中选择查看。游戏提供菜单、对话框等界面元素,使用鼠标点击按钮进行操作,具有直观性和便利性。五、 实训心得与体会经过两个星期的上机实践,我对C语言程序设计有了更深的认识和进一步的了解。本次课程设计所实现的游戏程序,是我首次利用C语言完成的比较大的项目。在此之前,我对游戏程序的原理和基本实现方法不甚了解,不知道编写一个俄罗斯方块游戏程序时该从何开始。通过仔细对俄罗斯方块的游戏规则和状态变化规律进行分析,我最终独立完成了俄罗斯方块的游戏算法并加以实现。在完成项目的过程中我曾面临过一些困难,例如实现在方块每隔一定的时间自动下落一格(由于还要随时处理玩家的按键操作,简单的延时显然不能满足要求),以及实现在多人游戏中处理不同的玩家下落速度不一样的情况,还有实现可以接收鼠标单击事件的按钮等等。在老师的指导下,我通过阅读相关书籍和查阅MSDN等网上资料,最终实现了一个类似于Windows消息循环的事件管理机制,从而有效地解决了这些问题。在完成本项目的过程中我还出现过一些设计上的失误,并及时得到纠正。例如初期设计程序时存在不够模块化的问题,游戏状态由数量多而复杂的全局变量控制,这让我在实现多人游戏的时候遇到了不少麻烦。因此,我及时地更改了游戏的设计,把所有游戏状态相关的变量都存储至结构体中,并对相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东汕尾陆河县第四批城镇公益性岗位招聘1人笔试考试备考试题及答案解析
- 2026陕西省面向中国科学技术大学招录选调生考试笔试模拟试题及答案解析
- 2025广西防城港市防城区发展和改革局招聘1人笔试考试备考试题及答案解析
- 黑龙江省红十字会所属事业单位2025年公开招聘工作人员8人笔试考试备考题库及答案解析
- 2025云南昆明高新区高新实验高中招聘30人笔试考试参考题库及答案解析
- 2026中再资产管理股份有限公司校园招聘考试笔试备考试题及答案解析
- 2025福州工业园区开发集团有限公司勘察设计分公司招聘2人笔试考试参考题库及答案解析
- 2025福建厦门市集美职业技术学校非在编教师招聘1人笔试考试备考题库及答案解析
- 山东省菏泽市高二下学期期中考试生物试题
- 2025年新能源物流车辆新能源车辆充电安全选型与风险控制报告
- 2025年文旅短视频市场调研:内容创作、传播效果及目的地引流报告
- 雨课堂学堂在线学堂云供热工程承德石油高等专科学校单元测试考核答案
- 小学生社会情感学习与同伴关系建立的课题报告教学研究课题报告
- 2025年及未来5年市场数据中国车用尿素行业市场调查研究及投资前景预测报告
- 2025年CCUS示范工程政策支持与技术突破
- 同心共赴圆梦高考课件-山东省邹城市第一中学高三上学期期中考后家长会
- 学堂在线 心理学与生活 章节测试答案
- SURPAC软件地质建模操作步骤
- 美国药典43USP43硫酸软骨素钠
- 中国医院质量安全管理 第3-5部分:医疗保障 消毒供应 T∕CHAS 10-3-5-2019
- 2009年10月三菱维修手册ex wcr09062007288mb gr35c
评论
0/150
提交评论