ImageVerifierCode 换一换
格式:DOCX , 页数:50 ,大小:133.04KB ,
资源ID:11472501      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11472501.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北京工业大学 c语言课程设计 报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北京工业大学 c语言课程设计 报告.docx

1、北京工业大学 c语言课程设计 报告扫雷学 号_110703xx_ 姓 名_xxx_指导教师_xx_2011年12月1 需求分析 31.1 功能与数据要求 31.1.1游戏功能介绍 4 1.2 界面需求 41.3开发与运行环境需求 62 概要设计 72.1主要数据结构 82.2程序总体结构 92.2.1 函数调用说明 92.2 .2其余子函数说明 10 3 详细设计 114 测试 334.1鼠标响应测试 334.2游戏各项数据测试 344.3游戏时间测试 344.4游戏界面跳转测试 345 用户手册 356总结提高 36 1需求分析游戏名称:挖雷游戏(MineSweeper)这是一款益智动脑游戏

2、。玩家只要利用鼠标点击,将随机出现在游戏区中的所有雷挖出来,即可获得游戏胜利。 1.1 功能与数据要求基本功能:1. 初始界面由控制区和游戏区两部分组成。游戏区有一个9*9的深颜色不透明方阵,内有若干个不可见的地雷,随机分布在方格中。随机产生雷的同时随机产生几个“秘密武器”:防雷服或探测仪,如果挖到一个防雷服,挖雷员增加一条命;如果挖到探测仪,使用探测仪探测时,点击方格,可显示本方格以及周围八个方格里是否有雷。使用探测仪的方法是:用鼠标右键单击方格。一个探测仪只能使用一次。2程序启动后,单击“开始”按钮,则从键盘输入用户名,然后游戏开始。3 用鼠标选中任一方格,如果不是地雷,方格颜色变为浅色;

3、如果是“秘密武器”,方格变为浅色同时工具可以使用,并在游戏信息区显示“秘密武器”的标志(例如:红色的圆圈表示防雷服,等等)及个数;如果是地雷则爆炸,减少一条命(也即减少一个防雷服),所有命消耗完毕则游戏结束。4每个挖雷员初始分数为0。每标记一个非雷方格得一分。在控制区显示当前挖雷员的当前得分。5游戏设置时间设置,或称生命值。时间用完则游戏结束。6游戏可有以下结束方式: 成功结束:当前所有非雷区都被标出,程序自动把有雷的方格标为红色,游戏结束,并显示当前玩家分数。 失败结束:情况1:当时间全部用完,而界面仍有非雷方格未标出,则游戏结束。 情况2:遇到雷爆炸并已经用完所有防雷服,则游戏结束。 情况

4、3:游戏过程中,按结束按钮,强行终止。7设置游戏的排行榜,显示玩家排名。拓展功能:1增加时间显示。每一局限定在同一个预先设置的时间段内完成,动态记时并显示,当某一局到达限定时间,则游戏结束(但保留主界面)。2探测仪功能增加为点击本格翻开周围的8个格子。3当游戏成功结束后,可以进行下一局游戏。4 设计一种方法,可以显示非雷方格周边的地雷数。1.1.1游戏功能介绍(1) 通过visual studio 2010进入扫雷游戏界面。(2) 进入游戏控制区域。点击开始,输入用户名,开始计时,同时游戏开始。(3) 成功完成游戏的标志是:在规定时间内 ,挖开所有的非雷方格。三种情况视为失败: 情况1:当时间

5、全部用完,而界面仍有非雷方格未标出,则游戏结束。 情况2:遇到雷爆炸并已经用完所有防雷服,则游戏结束。 情况3:游戏过程中,按结束按钮,强行终止。 1.2 界面需求游戏欢迎界面中:程序运行后,即出现欢迎界面,并显示作者姓名学号,采用闪动字体的形式,使画面生动,按任意键进入游戏。游戏初始界面:游戏界面分为控制区,信息区,游戏区,此时可以点击开始,进入游戏。游戏进行中:游戏以失败结束画面:1.3开发与运行环境需求开发环境:Visual studio 2010运行环境: Win7 2概要设计 游戏流程图: 2.1主要数据结构设计:2.1.1二维数组1、 记录每个方格中信息的二维数组mine992、

6、记录每个方格中信息作为备用的二维数组mine2993、 记录每个方格中信息作为备用的二维数组mine3992.1.2全局变量1 int mine99记录每个方格中信息的二维数组2 int mine299记录每个方格中信息作为备用的二维数组3、int life记录该游戏进行中玩家生命值。4、int mark当前玩家的得分5、time_t start初始时间6、time_t now当前时间7、int time1记录暂停时间8、int b;用于游戏信息区探测仪数量变化统计9、 int k;用于游戏信息区防雷服数量变化统计10、int n;探测仪数量11、int q;用于游戏信息记录中玩家信息的记录1

7、2、typedef struct rankinglist char name100;int score;INFO;玩家信息结构体,用于记录玩家信息。13、INFO s10;定义排行榜最大信息保存数为102.2程序总体结构:2.2.1 函数调用说明main()功能:主函数 调用: jiemian(); hitKS(); minefield(); mousemsg(); gameover();功能:游戏失败结束 pause(); 功能:暂停 closeJM();功能:关闭界面jiemian()功能:绘制游戏界面 调用: Life(); Mark(); welcome();hitKS()功能:点击开

8、始调用: Start();mousemsg() 功能:鼠标响应调用: time();zuojianleishutongji(int i,int j);zuojianFLF_TCY(int i,int j); Mark(); Life(); gamewin();pause()功能:暂停游戏调用: mousemsg(); pause();closeJM()功能:关闭界面调用: goodbye();2.2.2 其余子函数功能概要说明Start() 功能:接收玩家姓名Life()功能:刷新游戏生命值Mark() 功能:刷新游戏当前得分time() 功能:记录游戏用时zuojianleishutongj

9、i(int i,int j) 功能:左键雷数统计zuojianFLF_TCY(int i,int j) 功能:左键点出防雷服,探测仪gamewin() 功能:游戏胜利结束界面gameover() 功能:游戏失败结束界面minefield()功能:初始化方格信息welcome(); 功能:浮现欢迎界面goodbye(); 功能:退出游戏界面 3详细设计3.1welcome函数功能:产生一个欢迎界面,显示游戏名,作者。使用户界面更加友好。void welcome() char buf12100=设计人:11070322 丛义昊; / 输出屏幕提示 cleardevice(); setcolor(Y

10、ELLOW); setfont(90, 0, 黑体); outtextxy(160, 50, 挖雷游戏); setcolor(WHITE); setfont(16, 0, 宋体); outtextxy(240,240,buf12); / 实现闪烁的“按任意键继续” int c=255; while(!kbhit() setcolor(RGB(c, 0, 0); outtextxy(255, 400, 按任意键进入游戏 ); c -= 8; if (c 0) c = 255; Sleep(20); getch(); cleardevice();3.2界面函数功能:构造游戏初始界面,包括了游戏界面

11、,字体,线,填充颜色,字符输出等各方面的设计。void jiemian() initgraph(640,480);/欢迎界面 welcome(); initgraph(900,650);/初始化图形方式 int i,j; /定义变量 char buf1100=开始; char buf2100=暂停; char buf3100=结束; char buf4100=防雷服:; char buf5100=探测仪:; setlinestyle(PS_SOLID,NULL,3);/更改线的粗细为3 setfont(20,0,黑体); /字体设为黑体 cleardevice(); setfillstyle(

12、LIGHTGRAY,SOLID_FILL); rectangle(100,100,800,600); rectangle(100,100,350,450); /游戏控制区 rectangle(100,450,350,600); /游戏信息区 rectangle(150,150,300,200); /开始框 rectangle(150,250,300,300); /暂停框 rectangle(150,350,300,400); /结束框 outtextxy(210,167,buf1); /指定位置输出字符串 outtextxy(210,267,buf2); outtextxy(210,367,b

13、uf3); outtextxy(130,460,buf4); outtextxy(130,480,buf5); Life(); /初始化生命显示 Mark(); /初始化得分显示 setfillstyle(BLUE,SOLID_FILL); for(i=0;i9;i+) /画9x9的雷阵并涂色 for(j=0;j150&m.x150&m.y0); do i=rand()%9; /随机位置产生防雷服 j=rand()%9; if(mineij=0) mineij=2; mine2ij=2; mine3ij=2; flfNUM-; while(flfNUM0); do i=rand()%9; /随

14、机位置产生探测仪 j=rand()%9; if(mineij=0) mineij=3; mine2ij=3; mine3ij=3; tcyNUM-; while(tcyNUM0);3.7Life Mark函数功能:由于life ,mark为全局变量,将Life Mark函数嵌套在任意一个可以影响life ,mark值变化的子函数中,即可实现游戏信息区生命值,得分的实时更新。void Life() /刷新游戏信息区的生命值显示 char buf6100; sprintf(buf6,生命值:%d,life); outtextxy(130,500,buf6);void Mark() char buf

15、8100; sprintf(buf8,当前得分:%d,mark); outtextxy(130,520,buf8); /输出当前得分3.8 pause函数功能:嵌套在mousemsg函数中,通过用户点击暂停键区域,即可实现结束mousemsg函数的作用,在主函数中,由于pause函数在mousemsg之后,所以紧接着执行pause函数,最终通过再次点击暂停判断条件中的两个函数相互调用,达到可以反复暂停的效果。if(m.x150&m.y250&m.x300&m.y300) /点击暂停 time1=time1+(int)difftime(start,now); return 0;int pause

16、() if(life=70) return 0; if(mark=71) return 0; MOUSEMSG m=GetMouseMsg(); while (true) if(MouseHit() m=GetMouseMsg(); switch (m.uMsg)/达到暂停游戏效果 case WM_LBUTTONDOWN: if(m.x150&m.y250&m.x300&m.y=70) return 0; /时间到,游戏以失败结束 if(MouseHit() /获取鼠标信息 m=GetMouseMsg(); switch (m.uMsg) case WM_LBUTTONDOWN: setfil

17、lstyle(LIGHTBLUE,SOLID_FILL); for(i=0;i9;i+) for(j=0;j(400+i*40)&m.x(170+j*40)&m.y0) bar(191+(k-1)*20,459,209+(k-1)*20,475); /游戏信息区防雷服减少显示一个 k-; setfillstyle(LIGHTBLUE,SOLID_FILL); floodfill(406+i*40,176+j*40,WHITE); if(life150&m.y250&m.x300&m.y150&m.y350&m.x300&m.y=71) /胜利条件之一,成功翻开所有格子 gamewin(); r

18、eturn 0; break; 由于四边及四角的特殊性,需要考虑到mineij中i,j的具体取值,所以需要分类讨论,鉴于有雷格子的特殊性,需要将其翻过后另赋为一个特殊值6,以便与翻过的其他格子区分开。 case WM_RBUTTONDOWN: /右键为探测仪功能,翻开本格周围9个格子,并显示雷数,标识雷的位置 for(i=0;i9;i+) for(j=0;j(400+i*40)&m.x(170+j*40)&m.y0) /当有探测仪时,点击生效 if(b0) /控制游戏信息区的防雷服显示 setfillstyle(BLACK,SOLID_FILL); bar(190+(b-1)*20,477,2

19、11+(b-1)*20,497); b-; /防雷服显示减一个 if(mineij=0) setfillstyle(LIGHTBLUE,SOLID_FILL); floodfill(406+i*40,176+j*40,WHITE); mineij=5; mark+; if(mineij=2) setfillstyle(LIGHTBLUE,SOLID_FILL); floodfill(406+i*40,176+j*40,WHITE); setfillstyle(GREEN,SOLID_FILL); circle(200+k*20,467,7); floodfill(201+k*20,468,WHITE); circle(420+i*40,190+j*40,15); floodfill(421+i*40,191+j*40,WHITE); mineij=5; life+; mark+; Life(); k+; if(mineij=3) setfillstyle(LIGHTBLUE,SOLID_FILL); floodfill(406+i*40,176+j*40,WHITE); setfillstyle(RED,S

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1