课程设计报告样板.docx
- 文档编号:6492928
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:17
- 大小:312.35KB
课程设计报告样板.docx
《课程设计报告样板.docx》由会员分享,可在线阅读,更多相关《课程设计报告样板.docx(17页珍藏版)》请在冰豆网上搜索。
课程设计报告样板
南昌航空大学信息工程学院
课程设计说明书
课程名称:
C语言课程设计
设计题目:
扫地雷游戏
专业:
计算机科学与技术班级:
100451
姓名:
章梦依学号:
10045104_
评分:
指导教师:
张永、蔡虹
2011年9月15日
1游戏设计的背景介绍
当前随着计算机的深入普及,越来越多的人有了个人电脑,人们运用计算机完成许多重要的工作,计算机在人们的生活中变的越来越来重要。
随着计算机的应用和发展计算机已经不单纯是一个工作工具,人们越来越重视计算机的娱乐性了,近年来游戏产业规模持续成长,全球每年游戏业总产值已经突破200亿美金,远远超越好莱坞电影产业以及音乐娱乐事业,而成为目前娱乐事业的最大主流。
不过游戏产业光鲜亮丽的背后,却也隐含着高风险、高成本的危机,显示游戏产业慢慢步入“微利时代”。
目前整个游戏产业的运作模式已经跟好莱坞电影产业的运作模式相同,电影产业有制片、发行、宣传等分工,游戏产业亦同,由专业的游戏研发小组负责研发游戏,也有如微软这类国际级大厂负责游戏发行,甚至连“游戏制作人”也被培养成明星一样成为一种招牌.明确的游戏产业分工的确有助于游戏产业的规模发展与进化,但也无形中让游戏开发成本大增。
为了降低游戏开发成本,开发娱乐性强成本低的游戏就成为当前的主要课题,在这种趋势下各种小型的低成本的游戏软件应运而生。
在这其中,系统自带的小游戏也占据了相当重要的地位,与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。
这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。
这些小游戏包括扫雷,弹球,纸牌等等。
而本课题就是扫雷游戏的设计。
·设计环境
游戏硬件要求能运行Windows2000/XP操作系统的微机系统。
C语言程序设计及相应的开发环境。
2游戏设计目的
本课题要求利用TurboC编写与它功能相仿的扫雷游戏,寓学于乐。
程序的功能要求随机生成地雷数,通过鼠标操作玩游戏,不接受键盘,按任意键结束程序。
单击屏幕上的笑脸可以重新开始游戏。
所有地雷标出后胜利,当鼠标左键单击到地雷时失败。
3功能模块设计
1系统模块图
本程序包括3个子模块,分别是主界面显示模块、格子翻动模块、游戏胜负判断模块。
如图所示。
各个功能模块的功能描述如下:
1)主界面显示模块。
该模块主要是实现初始化时界面的设计结构。
基本的图形及鼠标。
2)格子翻动模块。
该模块主要计算格子周围的雷数,实现格子显示功能。
3)游戏胜负判断模块。
该模块主要是对玩家进行胜负的判断。
包括胜负功能后有特殊效果出现。
2任务执行流程图
1统计每个格子周围雷数,主要包括特殊格子周围雷数的统计和普通格子周围雷数的统计。
特殊格子有左上角、右上角、左下角、右下角、左边第一列、右边第一列、第一行、最后一行格子统计。
2显示无雷区空白部分的流程图,若该格子已经标记为红旗或格子已经处理过了,则返回。
否则,继续判断。
若格子周围没有雷,且该格子不处于是雷状态,显示(画)空格,否则,输出雷数。
4数据结构设计
1设置全局变量
定义一维数组charrandmineNUM[3],用来显示数字的字符串。
intgameAGAIN=0是表示是否重来的变量。
intgamePLAY=0是否是第一次玩游戏的标志。
intmineNUM统计处理过的格子数。
2定义结构体
struct
{
intnum;
introundnum;
intflag;
}Mine[10][10];
定义结构体变量使用了结构体数组。
Mine[10][10]。
num表示格子当前处于什么状态,num=1表示格子周围有雷,num=0表示已经显示过数字或者空白格子。
用roundnum统计格子周围有多少雷。
flag是右键按下显示红旗的标志,flag=0没有红旗标志,flag=1有红旗标志.
5函数功能描述
1line()
原型:
line(intx1,inty1,intx2,inty2)
功能:
在两点之间画一条线
2circle()
原型:
通过给定的圆心和半径画圆
功能:
circle(intx,inty,intr)
3getpixel()
功能:
该函数检索指定坐标点的像素的RGB颜色值。
原型:
;COLORREFGetPixel(HDChdc,intnXPos,intnYPos)
4registerbgidriver()
功能:
登录已连接进来的图形驱动程序代码
原型:
intregisterbgidriver(void(*driver)(void))
5closegraph()
功能:
关闭图形系统
用法:
voidfarclosegraph(void)
6 kbhit()(VC++6.0下为_kbhit())
功能及返回值:
检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
原型:
intkbhit(void)
包含头文件:
include
7setcolor()
功能:
设置当前画笔颜色
原型:
voidsetcolor(intcolor)
8cleardevice()
功能:
清除图形画面
原型:
voidcleardevice(void)
9setfillstyle()
功能:
设置填充模式的式样和颜色
原型:
voidsetfillstyle(intpattern,intcolor)
10bar()
功能:
画填充矩形
原型:
voidbar(intleft,inttop,intright,intbottom)
11fillellipse()
功能:
画出以(x,y)为中心点,xradius为横轴半径,yradius为纵轴半径的填充椭圆。
原型:
voidfillellipse(intx,inty,intxradius,intyradius)
12putpixel()
功能:
在指定位置上画一个像素
原型:
voidputpixel(intx,inty,intcolor)
13settextstyle()
功能:
设置当前文本属性
原型:
voidsettextstyle(intfont,intdirection,intcharsize)14
14outtextxy()
功能:
图形模式下在指定位置输出一个字符串
原型:
voidouttextxy(intx,inty,charfar*string)
15randomaize()
功能:
随机数初始化生成器
原型:
voidrandomaize()
16getch()
功能:
从控制台读取一个字符,并且不在屏幕上显示出来。
原型:
intgetch(void)
头文件:
conio.h
17delay()
功能:
以毫秒为单位中断执行一段时间
原型:
voiddelay(time)
头文件:
dos.
函数调用图
下面分别是显示空格函数ShowWhite()和烟花设计函数Drawfierwork()的函数调用情况。
6功能模块的设计与实现
6.1主函数
主要定义常用到的常量,全局变量,有关的函数原形说明。
然后随机布雷,统计好每个格子周围的雷数,画扫雷游戏界面,游戏接受鼠标操作,按任意键结束游戏,关闭图形系统,程序结束。
voidmain(void)
{
Init();;
MouseMath();
Control();
Close();
}
6.2主界面显示设置(部分)
voidDrawfirework()
{inta[8],b[8],x,y,i,j,c;
randomize();
for(;!
kbhit();)
{y=rand()%100+300;
x=rand()%500+80;
a[0]=x;
b[0]=y-10;
a[1]=a[0]+5;
a[2]=a[1]+5;
a[3]=a[1];
a[4]=a[0];
a[5]=a[0]-5;
a[6]=a[5]-5;
a[7]=a[6]+5;
for(j=1;j<5;j++)
b[j]=b[j-1]+5;
for(j=5;j<8;j++)
b[j]=b[j-1]-5;
for(j=0;j<6;j++)
{
for(i=0;i<8;i++)
{
c=rand()%13;
setcolor(c);
circle(a[i],b[i],1);
delay(100);
setcolor(c);
circle(a[i],b[i],1);
}
delay(1000);
b[0]-=10;
a[1]+=5;
b[1]-=5;
a[2]+=10;
a[3]+=5;
b[3]+=5;
b[4]+=10;
a[5]-=5;
b[5]+=5;
a[6]-=10;
a[7]-=5;
b[7]-=5;
}
}
getch();
}
6.3格子翻动模块
intMineStatistics(inti,intj)
{
intnNUM=0;
if(i==0&&j==0)
{
if(Mine[0][1].num==1)
nNUM++;
if(Mine[1][0].num==1)
nNUM++;
if(Mine[1][1].num==1)
nNUM++;
}
else
if(i==0&&j==9)
{
if(Mine[0][8].num==1)
nNUM++;
if(Mine[1][9].num==1)
nNUM++;
if(Mine[1][8].num==1)
nNUM++;
}
else
if(i==9&&j==0)
{
if(Mine[8][0].num==1)
nNUM++;
if(Mine[9][1].num==1)
nNUM++;
if(Mine[8][1].num==1)
nNUM++;
}
else
if(i==9&&j==9)
{
if(Mine[9][8].num==1)
nNUM++;
if(Mine[8][9].num==1)
nNUM++;
if(Mine[8][8].num==1)
nNUM++;
}
elseif(j==0)
{
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i-1][j+1].num==1)
nNUM++;
if(Mine[i+1][j+1].num==1)
nNUM++;
}
elseif(j==9)
{
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i-1][j-1].num==1)
nNUM++;
if(Mine[i+1][j-1].num==1)
nNUM++;
}
elseif(i==0)
{
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i+1][j-1].num==1)
nNUM++;
if(Mine[i+1][j+1].num==1)
nNUM++;
}
elseif(i==9)
{
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i-1][j-1].num==1)
nNUM++;
if(Mine[i-1][j+1].num==1)
nNUM++;
}
else
{
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i-1][j+1].num==1)
nNUM++;
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i+1][j+1].num==1)
nNUM++;
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i+1][j-1].num==1)
nNUM++;
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i-1][j-1].num==1)
nNUM++;
}
return(nNUM);
}
intShowWhite(inti,intj)
{
if(Mine[i][j].flag==1||Mine[i][j].num==0)
return;
mineNUM--;
if(Mine[i][j].roundnum==0&&Mine[i][j].num!
=1)
{
DrawEmpty(i,j,1,7);
Mine[i][j].num=0;
}
else
if(Mine[i][j].roundnum!
=0)
{
DrawEmpty(i,j,0,15);
sprintf(randmineNUM,"%d",Mine[i][j].roundnum);
setcolor(13);
MouseOff();
outtextxy(225+j*20,65+i*20,randmineNUM);
MouseGetXY();
MouseOn(MouseX,MouseY);
Mine[i][j].num=0;
return;
}
if(i!
=0&&Mine[i-1][j].num!
=1)
ShowWhite(i-1,j);
if(i!
=0&&j!
=9&&Mine[i-1][j+1].num!
=1)
ShowWhite(i-1,j+1);
if(j!
=9&&Mine[i][j+1].num!
=1)
ShowWhite(i,j+1);
if(j!
=9&&i!
=9&&Mine[i+1][j+1].num!
=1)
ShowWhite(i+1,j+1);
if(i!
=9&&Mine[i+1][j].num!
=1)
ShowWhite(i+1,j);
if(i!
=9&&j!
=0&&Mine[i+1][j-1].num!
=1)
ShowWhite(i+1,j-1);
if(j!
=0&&Mine[i][j-1].num!
=1)
ShowWhite(i,j-1);
if(i!
=0&&j!
=0&&Mine[i-1][j-1].num!
=1)
ShowWhite(i-1,j-1);
}
}
7程序运行结果
7.1初始界面
7.2游戏过程
7.3游戏失败界面
7.4游戏成功界面
8结论
经过四个多月的调查、学习、研究和设计,系统的制作接近了尾声。
在这里我将系统设计做如下总结。
1)本系统为基于PHP的房屋租赁管理系统,系统的功能已经达到设计的要求,系统中各个模块的功能均已实现,为整体系统的构建奠定了基础。
2)系统模块的功能可以被进一步扩展。
例如,系统中还可以增加房屋、二手房出售等功能。
系统的页面可以设计的更加精美。
3)系统中模块划分明确,模块功能设计有较强的针对性。
4)系统的设计遵循软件开发的全过程,使我对软件系统的开发过程有了更深刻的认识。
5)设计体现出了所使用的编程技术的优点,设计中结合了JavaScript。
6)在系统的设计中能够灵活运用PHP的对象技术,并且使用有效的MySQL语言操作后台数据库。
软件的设计没有完美无缺的,这个系统在某些地方可能存在不足,还需要我们进一步的改进和完善。
在这段时间里,我受益匪浅,不仅将所学的知识运用到实践,而且更进一步学习了软件开发技术,增强了PHP开发技术的语法基础,能够将其比较灵活地运用到开发中去。
将这个作品投入使用是我们的期望,系统功能会在实践中不断的摸索,达到最佳的使用效果。
参考文献
1姜灵芝,余健编著的《C语言课程设计案例精编》清华大学出版社
2郭翠英编著的《C语言课程设计》中国水利水电出版社
3譚浩强《C程序设计》(第四版)清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 样板