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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1扫雷学号_____110703xx___姓名_____xxx______指导教师______xx______2011年12月2目录1需求分析31.1功能与数据要求31.1.1游戏功能介绍41.2界面需求41.3开发与运行环境需求62概要设计72.1主要数据结构82.2程序总体结构92.2.1函数调用说明92.2.2其余子函数说明103详细设计114测试334.1鼠标响应测试334.2游戏各项数据测试344.3游戏时间测试344.4游戏界面跳转测试345用户手册356总结提高3631需求分析游戏名称:挖雷游戏(MineSweeper)这是一款益智动脑游戏。玩家只要利用鼠标点击,将随机出现在游戏区中的所有雷挖出来,即可获得游戏胜利。1.1功能与数据要求基本功能:1.初始界面由控制区和游戏区两部分组成。游戏区有一个9*9的深颜色不透明方阵,内有若干个不可见的地雷,随机分布在方格中。随机产生雷的同时随机产生几个“秘密武器”:防雷服或探测仪,如果挖到一个防雷服,挖雷员增加一条命;如果挖到探测仪,使用探测仪探测时,点击方格,可显示本方格以及周围八个方格里是否有雷。使用探测仪的方法是:用鼠标右键单击方格。一个探测仪只能使用一次。2程序启动后,单击“开始”按钮,则从键盘输入用户名,然后游戏开始。3用鼠标选中任一方格,如果不是地雷,方格颜色变为浅色;如果是“秘密武器”,方格变为浅色同时工具可以使用,并在游戏信息区显示“秘密武器”的标志(例如:红色的圆圈表示防雷服,等等)及个数;如果是地雷则爆炸,减少一条命(也即减少一个防雷服),所有命消耗完毕则游戏结束。4每个挖雷员初始分数为0。每标记一个非雷方格得一分。在控制区显示当前挖雷员的当前得分。5游戏设置时间设置,或称生命值。时间用完则游戏结束。6游戏可有以下结束方式:成功结束:当前所有非雷区都被标出,程序自动把有雷的方格标为红色,游戏结束,并显示当前玩家分数。失败结束:情况1:当时间全部用完,而界面仍有非雷方格未标出,则游戏结束。情况2:遇到雷爆炸并已经用完所有防雷服,则游戏结束。情况3:游戏过程中,按结束按钮,强行终止。7设置游戏的排行榜,显示玩家排名。拓展功能:1增加时间显示。每一局限定在同一个预先设置的时间段内完成,动态记时并显示,当某一局到达限定时间,则游戏结束(但保留主界面)。2探测仪功能增加为点击本格翻开周围的8个格子。3当游戏成功结束后,可以进行下一局游戏。4设计一种方法,可以显示非雷方格周边的地雷数。41.1.1游戏功能介绍(1)通过visualstudio2010进入扫雷游戏界面。(2)进入游戏控制区域。点击开始,输入用户名,开始计时,同时游戏开始。(3)成功完成游戏的标志是:在规定时间内,挖开所有的非雷方格。三种情况视为失败:情况1:当时间全部用完,而界面仍有非雷方格未标出,则游戏结束。情况2:遇到雷爆炸并已经用完所有防雷服,则游戏结束。情况3:游戏过程中,按结束按钮,强行终止。1.2界面需求游戏欢迎界面中:程序运行后,即出现欢迎界面,并显示作者姓名学号,采用闪动字体的形式,使画面生动,按任意键进入游戏。5游戏初始界面:游戏界面分为控制区,信息区,游戏区,此时可以点击开始,进入游戏。游戏进行中:6游戏以失败结束画面:1.3开发与运行环境需求开发环境:Visualstudio2010运行环境:Win772概要设计游戏流程图:欢迎界面初始界面时间到开始记录玩家名计时开始游戏进行中获胜成功翻开所有格子生命不足失败谢谢参与82.1主要数据结构设计:2.1.1二维数组1、记录每个方格中信息的二维数组mine[9][9]2、记录每个方格中信息作为备用的二维数组mine2[9][9]3、记录每个方格中信息作为备用的二维数组mine3[9][9]2.1.2全局变量1intmine[9][9]记录每个方格中信息的二维数组2intmine2[9][9]记录每个方格中信息作为备用的二维数组3、intlife记录该游戏进行中玩家生命值。4、intmark当前玩家的得分5、time_tstart初始时间6、time_tnow当前时间7、inttime1记录暂停时间8、intb;用于游戏信息区探测仪数量变化统计9、intk;用于游戏信息区防雷服数量变化统计10、intn;探测仪数量11、intq;用于游戏信息记录中玩家信息的记录12、typedefstructrankinglist{charname[100];intscore;}INFO;玩家信息结构体,用于记录玩家信息。13、INFOs[10];定义排行榜最大信息保存数为1092.2程序总体结构:2.2.1函数调用说明main()功能:主函数调用:jiemian();hitKS();minefield();mousemsg();gameover();功能:游戏失败结束pause();功能:暂停closeJM();功能:关闭界面jiemian()功能:绘制游戏界面调用:Life();Mark();welcome();hitKS()功能:点击开始调用:Start();mousemsg()功能:鼠标响应调用:time();zuojianleishutongji(inti,intj);zuojianFLF_TCY(inti,intj);Mark();Life();gamewin();pause()功能:暂停游戏调用:mousemsg();pause();closeJM()功能:关闭界面调用:goodbye();102.2.2其余子函数功能概要说明Start()功能:接收玩家姓名Life()功能:刷新游戏生命值Mark()功能:刷新游戏当前得分time()功能:记录游戏用时zuojianleishutongji(inti,intj)功能:左键雷数统计zuojianFLF_TCY(inti,intj)功能:左键点出防雷服,探测仪gamewin()功能:游戏胜利结束界面gameover()功能:游戏失败结束界面minefield()功能:初始化方格信息welcome();功能:浮现欢迎界面goodbye();功能:退出游戏界面113详细设计3.1welcome函数功能:产生一个欢迎界面,显示游戏名,作者。使用户界面更加友好。voidwelcome(){charbuf12[100]=设计人:11070322丛义昊;//输出屏幕提示cleardevice();setcolor(YELLOW);setfont(90,0,黑体);outtextxy(160,50,挖雷游戏);setcolor(WHITE);setfont(16,0,宋体);outtextxy(240,240,buf12);//实现闪烁的“按任意键继续”intc=255;while(!kbhit()){setcolor(RGB(c,0,0));outtextxy(255,400,按任意键进入游戏);c-=8;if(c0)c=255;Sleep(20);}getch();cleardevice();}3.2界面函数功能:构造游戏初始界面,包括了游戏界面,字体,线,填充颜色,字符输出等各方面的设计。voidjiemian(){initgraph(640,480);//欢迎界面welcome();initgraph(900,650);//初始化图形方式inti,j;//定义变量charbuf1[100]=开始;12charbuf2[100]=暂停;charbuf3[100]=结束;charbuf4[100]=防雷服:;charbuf5[100]=探测仪:;setlinestyle(PS_SOLID,NULL,3);//更改线的粗细为3setfont(20,0,黑体);//字体设为黑体cleardevice();setfillstyle(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,buf3);outtextxy(130,460,buf4);outtextxy(130,480,buf5);Life();//初始化生命显示Mark();//初始化得分显示setfillstyle(BLUE,SOLID_FILL);for(i=0;i9;i++)//画9x9的雷阵并涂色for(j=0;j9;j++){rectangle(400+i*40,170+j*40,400+(i+1)*40,170+(j+1)*40);floodfill(400+i*40+6,170+j*40+6,WHITE);}}3.3hitKS函数功能:控制开始键的响应,达到只有鼠标左键点击开始按钮才有反应的效果。inthitKS()//点击开始,进入游戏{MOUSEMSGm=GetMouseMsg();while(true){if(MouseHit())13m=GetMouseMsg();//获得鼠标信息switch(m.uMsg){caseWM_LBUTTONDOWN:{if(m.x150&&m.x300&&m.y150&&m.y200)//点击到开始按键,否则无反应{Start();return0;}}default:continue;}}}3.4Start函数功能:在hitKS函数执行后,跳出接受用户名的框,接受玩家从键盘输入的玩家名,并回显到游戏信息区。voidStart(){chars1[100];//定义字符串缓冲区,并接收用户输入chars2[100];InputBox(s1,100,请输入玩家姓名:);//弹出接收用户名的框sprintf(s2,玩家名:%s,s1);outtextxy(130,560,s2);//指定位置输出玩家名now=time(NULL);//初始化当前时间}3.5time函数功能:通过和鼠标响应嵌在一个永真循环中,反复调用,达到不断刷新游戏信息区时间显示的效果。voidtime(){charbuf1[100];start=time(NULL);sprintf(buf1,共70秒,已用时:%d,time1+(int)difftime(start,now));outtextxy(130,540,buf1);//不断刷新当前时间}3.6minefield函数功能:初始化雷阵方格信息,通过随机数种子控制产生不同的随机数,按照雷,防雷服,探测仪的顺序随即分配到8114个方格中。voidminefield(){inti,j,mineNUM=10,flfNUM=5,tcyNUM=5;//初始化雷数,探测仪数,防雷服数srand((int)time(0));//产生随机数do{i=rand()%9;j=rand()%9;//随机位置产生雷mine[i][j]=1;mine2[i][j]=1;mine3[i][j]=1;mineNUM--;}while(mineNUM0);do{i=rand()%9;//随机位置产生防雷服j=rand()%9;if(mine[i][j]==0){mine[i][j]=2;mine2[i][j]=2;mine3[i][j]=2;flfNUM--;}}while(flfNUM0);do{i=rand()%9;//随机位置产生探测仪j=rand()%9;if(mine[i][j]==0){mine[i][j]=3;mine2[i][j]=3;mine3[i][j]=3;tcyNUM--;}}while(tcyNUM0);}3.7LifeMark函数功

1 / 36
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功