C语言课程设计报告-小熊寻宝.doc

上传人:来看看 文档编号:3257949 上传时间:2019-08-06 格式:DOC 页数:29 大小:145.54KB
返回 下载 相关 举报
C语言课程设计报告-小熊寻宝.doc_第1页
第1页 / 共29页
C语言课程设计报告-小熊寻宝.doc_第2页
第2页 / 共29页
C语言课程设计报告-小熊寻宝.doc_第3页
第3页 / 共29页
C语言课程设计报告-小熊寻宝.doc_第4页
第4页 / 共29页
C语言课程设计报告-小熊寻宝.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《C语言课程设计报告-小熊寻宝.doc》由会员分享,可在线阅读,更多相关《C语言课程设计报告-小熊寻宝.doc(29页珍藏版)》请在三一文库上搜索。

1、小熊寻宝学 号_10072127_姓 名_指导教师_ _2010年12月1需求分析.31.1功能与数据需求.31.2界面需求.41.3开发与运行环境需求.52概要设计.52.1主要数据结构.52.2程序总体结构.63详细设计.64测试.265用户手册.276总结提高.281 需求分析我所做的课程设计是小熊寻宝,是一款可以放松人心情的游戏程序,并且可以锻炼人的反应能力1.1 功能与数据需求基本功能:用户控制小熊,小熊共有三条命,地图上会出现墙和4种随机出现的物品,有三种物品是加分的(分别为1,2,3分),还有一种是障碍物,小熊通过用户按上下左右键在地图范围内移动,根据位置是空白,宝物,围墙,还是

2、障碍物做出相应操作,当生命值为0时Game Over,游戏退出。扩展功能:暂停功能,调节速度功能1.1.1提供图形界面游戏主界面为一封闭的围墙,屏幕右上角显示生命值和分数,围墙为矩形小方块(中间画有横线),初始化小熊,宝物,障碍物的位置,小熊为粉红色实心圆,三种宝物分别为绿色实心圆,黄色实心圆和蓝色实心圆,障碍物为灰色实心圆1.1.2键盘控制游戏及计分机制用上下左右键控制小熊,如果碰到宝物(障碍物),宝物(障碍物)消失,更新分数和生命值,并在其他位置随机产生宝物(障碍物),如果不按任何键,小熊自行在当前方向上移动,当游戏者按有效的方向键后,小熊根据指示进行移动。1.1.3宝物(障碍物)的随机产

3、生利用random()函数定时产生随机数并将随机数缩小到符合场景大小的范围中,以此作为宝物(障碍物)位置的横纵坐标。若随机产生的位置和小熊的身体有冲突,则重新产生1.1.4结束判断如果生命值降为0,则游戏结束,出现Game Over图形界面,随之关闭图形系统1.1.5暂停功能在游戏中,如果玩家按下F1键,则进入暂停模式,若玩家再按一下26个字母的其中一个键,则恢复游戏1.1.6速度调节功能当玩家的得分超过10分时,小熊移动速度会加快一倍,若玩家得分继续超过50分时,小熊移动速度又会加快一倍1.2 界面需求(四号字、黑体)第一个图形界面上方介绍了4种宝物(障碍物)的特征,下方为游戏名称“xiao

4、 xiong xun bao”,背景色为黑色第二个图形界面为游戏界面,小熊的移动区域分为8*8的方格,背景色为黑色,字符颜色为红色,围墙的长度为10个方格的长度第三个图形界面为游戏结束界面,背景色为黑色,中央显示出Game Over字样1.3 开发与运行环境需求TC3.0,运行环境为windows xp2 概要设计2.1 主要数据结构struct FOODint x4;/*4种食物的横坐标*/int y4;/*4种食物的纵坐标*/int flag;/*是否需要出现新食物*/food;/*食物的结构体/struct BEARint x1;/*熊的横坐标*/int y1;/*熊的纵坐标*/int

5、dir;/*熊的方向*/int life;/*熊的生命*/int grade;/*分数*/bear;/*熊的结构体*/2.2 程序总体结构void gameover()/*游戏结束函数*/void dwall()/*画地图函数*/void tishijiemian()/*显示提示界面函数*/void play()/*游戏函数*/3详细设计#include#include#include#include#include#include#include#include#define LEFT 0x4b00#define RIGHT 0x4d00#define UP 0x4800#define DO

6、WN 0x5000#define F1 0x3b00int key;/*接受返回键码的变量*/struct FOODint x4;int y4;int flag;food;struct BEARint x1;int y1;int dir;int life;int grade;bear;char buf100;/*显示字符所需的字符型数组*/char word220=Game Over!;char word320=grade+1;char word420=HP:;char word520=grade:;char word620=grade+2;char word720=grade+3;char

7、word820=grade-1,life-1;char word920=Xiao Xiong Xun Bao;void gameover()settextstyle(0,0,3);/*字符显示模式*/outtextxy(200,200,word2);/*输出字符*/delay(1000);/*延迟1000后退出*/void dwall()int a;setbkcolor(BLACK);/*设置黑色背景色*/setcolor(RED);/*设置红色前景色*/settextstyle(0,0,1);rectangle(0,0,710,510);/*画一个长710,宽510的矩形*/for(a=50

8、;a550;a=a+50)line(a,0,a,500);/*每隔50长度画一个竖线*/for(a=10;a50;a=a+10)line(a,0,a,500);/*每隔10长度画一个竖线*/for(a=50;a500;a=a+50)line(0,a,500,a); /*每隔50长度画一个横线*/for(a=10;a50;a=a+10)line(0,a,500,a); /*每隔10长度画一个横线*/for(a=460;a500;a=a+10) line(a,0,a,500); /*每隔10长度画一个竖线*/for(a=460;a500;a=a+10) line(0,a,500,a); /*每隔1

9、0长度画一个横线*/void tishijiemian()setbkcolor(BLACK);settextstyle(0,0,3);setcolor(RED);setfillstyle(SOLID_FILL,YELLOW);/*用黄色实心填充*/circle(30,30,20);/*画一个圆心(30,30),半径20的圆*/floodfill(31,31,RED);/*将圆填充为黄色*/outtextxy(55,30,word3);/*输出word3的字符*/setfillstyle(SOLID_FILL,BLUE);circle(30,100,20);floodfill(31,101,RE

10、D);outtextxy(55,100,word6);setfillstyle(SOLID_FILL,GREEN);circle(30,170,20);floodfill(31,171,RED);outtextxy(55,170,word7);setfillstyle(SOLID_FILL,DARKGRAY);circle(30,220,20);floodfill(31,221,RED);outtextxy(55,220,word8);settextstyle(0,0,2);outtextxy(120,320,word9);delay(4000);cleardevice();/*将图形全部清空

11、*/void play()int a,b=0,c1,c2,c3,c4,d=1,x=200;char z;dotextcolor(RED);/*将字符颜色设置为红色*/textbackground(BLUE);/*将背景颜色设置为蓝色*/outtextxy(515,15,word4);outtextxy(515,35,word5);bar(530,12,540,22);/*填充一个矩形*/sprintf(buf,%2d,bear.life);/*显示熊的生命*/outtextxy(530,15,buf);bar(560,30,575,40);sprintf(buf,%2d,bear.grade)

12、; /*显示熊的分数*/outtextxy(560,35,buf);for(;b4;b+)/*将四种宝物的坐标随机产生*/dofood.xb= random(400)+26;food.yb=random(400)+26; while(food.xb%25!=0|food.yb%25!=0);/*保证图像出现在格内*/ if(food.xb%50=0) food.xb+=25; if(food.yb%50=0) food.yb+=25; food.flag=3;if(food.flag=3)/*如果宝物数为4个*/ /*将4种宝物显示在屏幕上*/c1=0;setcolor(RED);setfil

13、lstyle(SOLID_FILL,YELLOW);circle(food.xc1,food.yc1,20);floodfill(food.xc1+1,food.yc1+1,RED);c2=1;setcolor(RED);setfillstyle(SOLID_FILL,BLUE);circle(food.xc2,food.yc2,20);floodfill(food.xc2+1,food.yc2+1,RED);c3=2;setcolor(RED);setfillstyle(SOLID_FILL,GREEN);circle(food.xc3,food.yc3,20); floodfill(foo

14、d.xc3+1,food.yc3+1,RED);c4=3;setcolor(RED);setfillstyle(SOLID_FILL,DARKGRAY);circle(food.xc4,food.yc4,20);floodfill(food.xc4+1,food.yc4+1,RED);switch(bear.dir)/*判断熊当前的方向,case1,2,3,4的功能都近似,因此只解释case1*/case 1:while(!kbhit()&bear.x1475)/*如果无键盘响应,熊向右走并且熊的横坐标小于475*/bear.x1+=50;/*熊横坐标+50*/*清除熊上一坐标的图像,并把熊图

15、像在现坐标显示*/setcolor(RED);setfillstyle(SOLID_FILL,BLACK);circle(bear.x1-50,bear.y1,20);floodfill(bear.x1-49,bear.y1+1,RED);setcolor(BLACK);setfillstyle(SOLID_FILL,BLACK); circle(bear.x1-50,bear.y1,20);delay(100);setcolor(RED);setfillstyle(SOLID_FILL,LIGHTMAGENTA);circle(bear.x1,bear.y1,20);floodfill(be

16、ar.x1+1,bear.y1+1,RED);delay(x); /*判断熊是否吃到宝物*/for(d=0;d25)bear.x1-=50; setcolor(RED);setfillstyle(SOLID_FILL,BLACK);circle(bear.x1+50,bear.y1,20);floodfill(bear.x1+51,bear.y1+1,RED);setcolor(BLACK);setfillstyle(SOLID_FILL,BLACK); circle(bear.x1+50,bear.y1,20);delay(100);setcolor(RED);setfillstyle(SO

17、LID_FILL,LIGHTMAGENTA);circle(bear.x1,bear.y1,20);floodfill(bear.x1+1,bear.y1+1,RED);delay(x);for(d=0;d25)bear.y1-=50;setcolor(RED);setfillstyle(SOLID_FILL,BLACK);circle(bear.x1,bear.y1+50,20);floodfill(bear.x1+1,bear.y1+49,RED);setcolor(BLACK);setfillstyle(SOLID_FILL,BLACK); circle(bear.x1,bear.y1+

18、50,20);delay(100);setcolor(RED);setfillstyle(SOLID_FILL,LIGHTMAGENTA);circle(bear.x1,bear.y1,20);floodfill(bear.x1+1,bear.y1+1,RED);delay(x);for(d=0;d4;d+)if(bear.x1=food.xd&bear.y1=food.yd)setcolor(RED);setfillstyle(SOLID_FILL,BLACK);floodfill(bear.x1-24,bear.y1-24,RED);dofood.xd= random(400)+26;fo

19、od.yd=random(400)+26; while(food.xd%25!=0|food.yd%25!=0); if(food.xd%50=0) food.xd+=25; if(food.yd%50=0) food.yd+=25;if(d=3)bear.life-=1;if(d=0)bear.grade+=1;if(d=1)bear.grade+=2;if(d=2)bear.grade+=3; break;case 4:while(!kbhit()&bear.y1475)bear.y1+=50;setcolor(RED);setfillstyle(SOLID_FILL,BLACK);cir

20、cle(bear.x1,bear.y1-50,20);floodfill(bear.x1+1,bear.y1-51,RED);setcolor(BLACK);setfillstyle(SOLID_FILL,BLACK); circle(bear.x1,bear.y1-50,20);delay(100);setcolor(RED);setfillstyle(SOLID_FILL,LIGHTMAGENTA);circle(bear.x1,bear.y1,20);floodfill(bear.x1+1,bear.y1+1,RED);delay(x);for(d=0;d4;d+)if(bear.x1=

21、food.xd&bear.y1=food.yd)setcolor(RED);setfillstyle(SOLID_FILL,BLACK);floodfill(bear.x1-24,bear.y1-24,RED);dofood.xd= random(400)+26;food.yd=random(400)+26; while(food.xd%25!=0|food.yd%25!=0); if(food.xd%50=0) food.xd+=25; if(food.yd%50=0) food.yd+=25;if(d=3)bear.life-=1;if(d=0)bear.grade+=1;if(d=1)b

22、ear.grade+=2;if(d=2)bear.grade+=3; break; /*如果熊撞墙*/if(bear.x1=475)if(bear.dir=1)bear.life-=1;if(bear.y1=475)if(bear.dir=4)bear.life-=1;if(bear.life=0)/*如果熊生命值为0*/break;/*游戏结束*/key=bioskey(0);/*用键盘响应来控制小熊上下左右移动*/ switch(key) case UP:bear.dir=3; break; case DOWN:bear.dir=4; break; case RIGHT:bear.dir=

23、1; break; case LEFT:bear.dir=2; break; case F1:/*暂停功能,按F1暂停*/ z=getch();/*再按26个字母的任意一个取消暂停*/ break; if(bear.grade10)/*如果熊得分超过十分*/x=100;/*速度加倍*/if(bear.grade50)x=50;while(1);/*如果小熊生命值不为零,则一直循环*/main()int graphdrive=DETECT,graphmode;initgraph(&graphdrive,&graphmode,C:TC30BGI);/*定义图形模式*/cleardevice();t

24、ishijiemian();dwall();food.flag=3;bear.life=3;bear.dir=1;bear.x1=75;bear.y1=75;bear.grade=0;play();cleardevice();gameover();closegraph();/*关闭图形界面*/4测试5用户手册(1)应用程序运行环境要求:目前只在windows xp系统中测试过,能正常使用(2)应用程序的安装与启动方法:用TC3.0启动bowen.cpp文件(3)程序的界面,交互方式,和操作方法:玩家用上下左右键控制小熊移动,通过吃掉地图中的宝物来获得分数,灰色圆为障碍物(小熊吃掉会减生命)右上

25、角显示HP值和分数,小熊共有3条命,生命值为零时game over6 总结提高6.1 课程设计总结通过为期一周的课程设计,我们对C语言这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们信息与计算科学专业的学习中占据着十分重要的地位。同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。运用C语言中的基本知识,编写一个小熊寻宝游戏。通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的结构体,进一步熟悉数组的建立运用和函数的调用等。6.2 对本课程意见与建议- 29 -

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1