C语言课程设计报告小熊回家.docx

上传人:b****8 文档编号:10962739 上传时间:2023-02-24 格式:DOCX 页数:17 大小:51.32KB
下载 相关 举报
C语言课程设计报告小熊回家.docx_第1页
第1页 / 共17页
C语言课程设计报告小熊回家.docx_第2页
第2页 / 共17页
C语言课程设计报告小熊回家.docx_第3页
第3页 / 共17页
C语言课程设计报告小熊回家.docx_第4页
第4页 / 共17页
C语言课程设计报告小熊回家.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告小熊回家.docx

《C语言课程设计报告小熊回家.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告小熊回家.docx(17页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告小熊回家.docx

C语言课程设计报告小熊回家

 

小熊回家

 

2008年1月

 

需求分析

基本功能要求

1.小熊回家的路程在屏幕上水平方向。

游戏过程中,出现的地雷、坠落物的个数是随机的。

2.开始游戏时要给小熊一定数量的生命值,当遇到某种伤害时,根据所受伤害的类别如被地雷炸伤等减少一定数量的生命值。

小熊成功回家之后就获得一定的经验,这些经验可以换成一定数量的生命值。

生命值的变化要在画面上用图形和数字加以显示。

当小熊没有到达目的地,二生命值为0时,回家失败。

3.游戏拟用←、→、↑、↓键控制小熊移动,移动步长及速度要设置合理。

4.采用不同的形状代表小熊、地雷、坠落物等,游戏画面要能够显示出小熊向前进,道路向后退的效果。

5.坠落物速度也应设置合理,并可以根据游戏级别不同,设置不同的坠落速度。

6.提供游戏初始界面,其中包括游戏管理按钮:

包括“开始”,“操作说明”,:

“等级选择”,“退出”。

游戏过程中,也要在画面合适区域内有游戏管理按钮,包括“出现开始”,“暂停”,“退出”等。

7.“级别选择”即游戏难易程度的选择,系统给出几种级别,由玩家进行选择。

8.文件保存用户名和该用户成功完成游戏的最短时间记录,并可显示排行榜。

 

需要处理数据

小熊,地雷,石头,键盘响应。

 

程序开发环境

TC30

 

用户界面设计

设置开始界面

设置选择难度和说明界面

 

游戏开始界面

退出时输入姓名

 

概要设计

数据结构:

通过指针,函数调用实现程序。

程序整体结构:

键盘响应函数:

实现键盘操作,主函数:

实现程序主体,小熊函数:

画小熊。

 

详细设计

 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#defineENTER0x0d

#defineESC27

#defineLEFT_ARROW0x4b00

#defineRIGHT_ARROW0x4d00

#defineUP_ARROW0x4800

#defineF20x3c00

#defineF30x3d00

#defineF40x3e00

#defineF50x3f00

doubler1=10.0,x1=90.0,y1=400.0;

voidbear();

intall_key()

{

intkeycode;

keycode=bioskey(0);

if(bioskey

(2)&0x04){

returnkeycode;

}

returnkeycode&0xff?

keycode&0xff:

keycode;

}

inti=0;

main()

{

intgraphdrive=DETECT,graphmode;

intl;

longsize1,size2,size3,size4,size5;

void*buf1,*buf2,*buf3,*buf4,*buf5;

intle;

unsignedintkeycode;

doubler3=5.0,x3,y3=10.0;

doubler2=5.0,x2,y2=400.0;

doubler4=5.0,x4,y4=400.0;

doubler5=5.0,x5,y5=10.0;

charlevel[3];

intp=0;

charword1[20]="BEARGOHOME";

charword2[150]="error,thelevelwillbenormal";

charword3[150]="pleaseenterLEFT,RIGHT,UPtocontrolthebear,F5toback";

charword4[100]="pleasechoosethelevel:

\neasy=e,normal=n,hard=h";

charword5[100];

charword6[100]="[ENTER}tostart,[F5]toexit";

charword7[50]="NAME:

LIUXINYI";

charclear[50]="";

charname[20];

charopenname[200];

charlife[50];

FILE*fp;

initgraph(&graphdrive,&graphmode,"d:

\\TC30\\BGI");

/*thefirstview*/

setbkcolor(BLACK);

setcolor(RED);

rectangle(10,10,630,470);

settextstyle(1,0,5);

settextjustify(0,1);

outtextxy(180,210,word1);

settextstyle(0,0,1);

settextjustify(0,1);

sprintf(word5,"pleaseenter[ENTER]forstart");

outtextxy(200,400,word5);

outtextxy(250,420,word7);

getchar();

if((keycode=all_key())==ESC){

closegraph();}

if((keycode=all_key())==F2){

cleardevice();

rectangle(10,10,630,470);

fp=fopen("name.txt","r");

fgets(openname,200,fp);

outtextxy(30,30,openname);

fclose(fp);}

/*thesecondview*/

if((keycode=all_key())==ENTER){

cleardevice();

setbkcolor(BLACK);

rectangle(10,10,630,470);

floodfill(11,11,BLUE);

settextstyle(1,0,3);

settextjustify(0,1);

outtextxy(10,300,word4);

getche();

if(((keycode=all_key())!

=F2)&&((keycode=all_key())!

=F4)&&((keycode=all_key())!

=F3)){

outtextxy(50,100,word2);

le=20;}

if((keycode=all_key())==F2){

sprintf(level,"easy");

outtextxy(50,100,level);

le=30;}

if((keycode=all_key())==F3){

sprintf(level,"normal");

outtextxy(50,100,level);

le=20;}

if((keycode=all_key())==F4){

sprintf(level,"hard");

outtextxy(50,100,level);

le=10;}

}

l=le+80;

if((keycode=all_key())==ESC){

closegraph();}

if((keycode=all_key())==ENTER){

rectangle(10,10,630,470);

outtextxy(10,20,word3);}

if((keycode=all_key())==ESC){

closegraph();}

 

if((keycode=all_key())==ENTER)

 

cleardevice();

size1=imagesize(1,1,2*r1,2*r1);

buf1=malloc(size1);

size2=imagesize(1,1,2*r2,2*r2);

buf2=malloc(size2);

size3=imagesize(1,1,2*r3,2*r3);

buf3=malloc(size3);

size4=imagesize(1,1,2*r4,2*r4);

buf4=malloc(size4);

size5=imagesize(1,1,2*r5,2*r5);

buf5=malloc(size5);

 

randomize();

x3=1.0*random(610);

x2=1.0*random(610);

x4=1.0*random(610);

x5=1.0*random(610);

 

while

(1)

{

clrscr();

setbkcolor(BLUE);

rectangle(1,1,630,470);

line(1,411,630,411);

outtextxy(5,421,word6);

textcolor(YELLOW);

textbackground(BLUE);

sprintf(life,"thelifeis%d",l);

outtextxy(30,30,life);

getimage(x1-10.0,y1-10.0,x1+10.0,y1+10.0,buf1);

getimage(x2-r2,y2-r2,x2+r2,y2+r2,buf2);

getimage(x3-r3,y3-r3,x3+r3,y3+r3,buf3);

getimage(x4-r4,y4-r4,x4+r4,y4+r4,buf4);

getimage(x5-r5,y5-r5,x5+r5,y5+r5,buf5);

setcolor(RED);

setfillstyle(SOLID_FILL,RED);

/*thefirstdilei*/

circle(x2,y2,r2);

floodfill(x2,y2,RED);

 

/*thefirststone*/

circle(x3,y3,r3);

floodfill(x3,y3,RED);

/*theseconddilei*/

circle(x4,y4,r4);

floodfill(x4,y4,RED);

/*thesecondstone*/

circle(x5,y5,r5);

floodfill(x5,y5,RED);

 

/*thebear*/

circle(x1,y1,r1);

floodfill(x1,y1,RED);

if(sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))<15.000){

 

l=l-10;

sound(1000);

delay(50);

nosound();

}

if(sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1))<15.000){

 

l=l-10;

sound(1000);

delay(50);

nosound();

}

if(sqrt((x4-x1)*(x4-x1)+(y4-y1)*(y4-y1))<15.000){

 

l=l-10;

sound(1000);

delay(50);

nosound();

}

if(sqrt((x5-x1)*(x5-x1)+(y5-y1)*(y5-y1))<15.000){

l=l-10;

sound(1000);

delay(50);

nosound();

}

if(l==0){

closegraph();

printf("GAMEOVER");

printf("\npleaseenteryourname:

");

printf("\npleaseentera[SPACE]afteryourname:

");

gets(name);

fp=fopen("name.txt","a");

fputs(name,fp);

fclose(fp);

free(buf2);

free(buf1);

free(buf3);

getch();}

 

while

(1)

{

intkey;

if(bioskey

(1))

key=bioskey(0);

else

break;

key=bioskey(0);

switch(key)

{

caseUP_ARROW:

{

sound(400);

delay(30);

nosound();

while(y1>300){

circle(x1,y1,r1);

delay(le*1);

putimage(x1-r1,y1-r1,buf1,0);

y1=y1-10.0;

x1+=2.0;

bear();

}

while(y1<400){

circle(x1,y1,r1);

delay(le*1);

putimage(x1-r1,y1-r1,buf1,0);

y1=y1+10.0;

x1+=2.0;

bear();}

break;

}

caseLEFT_ARROW:

{sound(400);

delay(30);

nosound();

delay

(1);

putimage(x1-r1,y1-r1,buf1,0);

x1=x1-15.0;

bear();

if(x1<=15.0){

x1=600.0;}

break;

}

caseF5:

{

closegraph();

printf("pleaseenteryourname:

");

printf("\npleaseentera[SPACE]afteryourname:

");

gets(name);

fp=fopen("name.txt","a");

fputs(name,fp);

fclose(fp);

free(buf2);

free(buf1);

free(buf3);

getch();

break;

}

caseRIGHT_ARROW:

{sound(400);

delay(30);

nosound();

delay

(1);

putimage(x1-r1,y1-r1,buf1,0);

x1=x1+15.0;

bear();

if(x1>=600.0){

x1=25.0;

i++;}

if(i==3){

closegraph();

printf("youwin");

printf("\npleaseenteryourname:

");

printf("\npleaseentera[SPACE]afteryourname:

");

gets(name);

fp=fopen("name.txt","a");

fputs(name,fp);

fclose(fp);

free(buf2);

free(buf1);

free(buf3);

getch();}

break;}

}

}

delay(le*10);

putimage(x2-r2,y2-r2,buf2,0);

x2=x2-13.0;

if(x2<=20.0){

x2=610.0;}

putimage(x4-r4,y4-r4,buf4,0);

x4=x4-16.0;

if(x4<=20.0){

x4=610.0;}

putimage(x3-r3,y3-r3,buf3,0);

x3=x3-10.0;

y3=y3+10.0;

if((x3<=20.0)||(y3>=411)){

x3=610.0;

y3=10.0;}

putimage(x5-r5,y5-r5,buf5,0);

x5=x5-10.0;

y5=y5+10.0;

if((x5<=20.0)||(y5>=411)){

x5=620.0;

y5=11.0;}

}

}

voidbear()

{

circle(x1,y1,r1);

}

 

测试

按enter进入游戏,用上、左、右键控制小熊,按F5退出游戏并输入姓名。

测试成功。

 

用户手册

按enter进入游戏,在开始界面按F2查看姓名,用e、n、h选择难度,用上、左、右键控制小熊,按F5退出游戏并输入姓名。

 

总结与提高

通过这几个星期的学习,我深刻的体会到编写一个程序的难度,首先,自己的思路一定要清晰,其次,每一步都要经过细心的调试,只有每一步都做到准确无误,才能使一个程序正常的运行。

通过这次的经历,我相信以后我的编程会更加熟练。

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

当前位置:首页 > 高等教育 > 经济学

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

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