13070036 段杰 小狼课设报告Word文档格式.docx
- 文档编号:21319504
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:29
- 大小:328.42KB
13070036 段杰 小狼课设报告Word文档格式.docx
《13070036 段杰 小狼课设报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《13070036 段杰 小狼课设报告Word文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
附录:
源代码14
1需求分析
小狼下100层,每下一层木板分数增加,木板不停生成。
死亡后记录积分并排名。
1.1功能与数据需求
程序功能:
输入用户名、生成游戏界面、开始游戏、计分、保存、游戏开始及退出、排行榜、结束、键盘及鼠标操作。
1.1.1显示用户界面
利用drawInterface和drawMenu和drawButton绘制游戏界面
利用drawwolf,drawStep画出狼和板。
1.1.2打开音乐
显示开始界面之后,利用playsound打开音乐并播放音乐
1.1.4按开始键游戏开始
游戏进入游戏界面,画好界面,信息显示区和控制区,产生狼和板,狼接触边界则游戏失败。
记录得分之后显示排行榜。
1.1.5计分
狼每下一层算5分,接触板后才进行分数增加。
1.1.6键盘操作
←→可控制狼的方向
1.1.7按钮操作
游戏有开始、暂停和结束键,可以暂停和退出游戏。
游戏中退出不记录积分。
1.2界面需求
游戏界面:
进行游戏
结束界面:
排行榜显示
记录用户信息。
1.2.2游戏界面
游戏时的界面
1.2.3结束界面
按游戏结束的界面。
1.3开发与运行环境
本游戏开发环境为vc++6.0,运行环境为vc++6.0环境
添加EasyX库
使用预编译的头文件,选择不使用补偿页眉
1.4其他方面需求
Vc++6.0上要安装easyx软件
2概要设计
2.1主要数据结构
structCoordinate{
intx;
inty;
};
//坐标
structperson{
charname[20];
intscore;
//玩家信息
structStep{
Coordinatecor;
intlength;
//长度
stepTypeStepType;
//台阶类型
intn;
//第几阶
Step*nextNode;
//下一结点
//用来存储台阶的链表
structWolf{
//坐标
intlife;
//待定
intState;
//1:
在台子上;
2:
往下掉
IMAGEimg;
2.2程序总体结构
voidinitInterface(Coordinatebut[],buttonStatebutsta[]);
//初始化
voiddrawInterface(Coordinatebut[],buttonStatebutsta[]);
//界面
voiddrawMenu(Coordinatebut[],buttonStatebutsta[]);
//菜单
voiddrawButton(Coordinatecd,buttonStatebutSta,char*text);
//按钮
voiddrawMessage(char*name,intscore,inttime);
//信息
voiddrawStep(Step*step);
//台阶
voiddrawWolf(Wolfwolf);
//狼
voiddisposeStep(Step*step);
voidCreatStepNode(Step*step);
//创建节点
voidDeleteStepNode(Step*step);
//删除结点
voidNext(Step*step,Wolf*wolf);
//板和狼下一步计算
voidDispatchCMD(Wolf*wolf);
//停止响应
voidDispatchKeyboardMessage(Wolf*wolf);
voidDispatchMouseMessage();
intsavescore(personplayer);
//存得分
intshowscore();
//显示排行榜
voidjudge(buttonStatebutsta[],Wolf*wolf,Step*step,int*score,personplayer);
//判断
voidPAUSE();
3详细设计
3.1主要函数流程图
3.2板的生成和删除
4测试
4.1游戏开启测试
本测试目的:
确定游戏能在PC上正常开启
测试:
本游戏能在win7以下的操作系统中运行,高于win7的操作系统暂时还不能运行vc6.0应用程序。
确定游戏能够运行时,可将程序代码直接导入到vc++6.0中,并点击运行(run)即可运行此游戏。
或者用户确定游戏BGI路径与源代码中的路径相同,则可直接双击游戏的EXE文件,也可运行游戏。
4.2游戏运行测试
4.2.1边界测试
本测试目的:
确定游戏界面中的边界处是否可以正常运行
用户进入游戏后,按照用户手册可进行测试,查看兔子到边界处是否能够正常使用
按开始键开始
按←→狼开始动
到边界处是否正常运动
板能否正常生成
图形是否有缺损
游戏中是否有隐藏的bug
经测试,游戏运行正常。
4.2.2按钮测试
测试暂停,退出,结束键是否可以正常使用
测试:
用户进入游戏后,按照用户手册可进行测试。
按开始键,待游戏开始后按暂停键暂停,再按继续键继续,结束键结束本盘游戏,再按开始键开始,再按退出键退出游戏。
看游戏是否可按预设的那样执行。
经测试,游戏运行正常。
5用户手册
5.1应用程序功能的详细说明
本应用程序名为“层下100层”是一款能在在vc++6.0环境下运行的益智小游戏。
使用于win7,等操作系统。
游戏主题是一个狼在不断生成并上升的木板中下降。
触碰到游戏壁则死亡,记录游戏积分并排行
5.2应用程序运行环境的要求
本游戏开发环境为vc++6.0,运行环境为vc++6.0环境
生成可执行文件后可以用windows7,windowsX等系统运行。
5.3应用程序的安装与运行方法
本益智小游戏不需要安装,玩家可将程序代码直接导入到vc++6.0环境中,并点击编译,运行,即可运行此游戏。
5.4程序界面、交互方式和操作方法
6总结提高
6.1课程设计总结
这次C语言课程设计,我收获很大,本来上学期c语言学的就比较基础,在加上自己课下练习不够,起初,做课设很是费劲,不知道从何下手,后来跟着easyx上的教程一步一步的学,渐渐有了点信心,通过学习网上别人介绍的方法,和看别人编的小程序,心里才渐渐有些想法。
通过一段时间的学习,我发现其实编游戏也不是很难,重要的是要有想法,思路清晰之后再开始编,会更快更好。
而且在设计时要分块写,调用方便而且改起来也方便。
有的时候,总是找不到错误在哪里,真的想放弃。
但是现在回想起来,如果那时放弃那么又怎能开发出来呢。
通过这次的的课设,我想编程既要有头脑,又要有耐心,遇到问题时,应及时与同学,老师交流,或者想放一放干些别的,也许事情就可解决。
编程并不可一蹴而就,是一个慢慢学习理解的过程,不能着急,耐心一点。
但是也要注意时间的掌握,要合理安排课设的时间。
在本次设计中,我觉得自己在c语言中复杂问题的处理上有了很大提高,对整体结构的把握上也有了一定的提升。
而且我觉得自己应多学习高级的算法,使自己的程序更加系统,更便于理解。
这次的程序设计,我更要感谢老师和同学的帮助,在大家的帮助下我才能完成此次课设。
6.2对本课程意见与建议
我希望课设能安排几节来是讲一讲怎么做游戏,先讲一讲基础的知识,再让我们做,这样可以节约很多时间。
我希望能够在最后几周,多安排几次答疑时间,以便更好地解决我们的问题。
附录:
源代码
#include<
conio.h>
graphics.h>
time.h>
stdio.h>
#include<
windows.h>
#pragmacomment(lib,"
winmm.lib"
)
#defineSPEED
#definestep_wide30//台阶的厚度
#defineBUTTON_HEIGHT50//按钮的高
#defineBUTTON_WEIGHT80//按钮的宽度
#definelevel10//难度【流畅度】
////////////////////////////////////////////////////////
enumgameState{Ready=1,Run=2,Pause=3,Exit=0};
//游戏运行状态
enumbuttonState{available,notavailable,selected};
//按钮的状态,可选.不可选,被选中
enumstepType{Safe,Spine,HEAD};
structCoordinate{
gameStateGameSta=Ready;
//////////////////////////////////////////////////////////////////
//绘制界面
intmain()
{
charsScore[20];
personplayer;
Coordinatebut[3];
buttonStatebutsta[3];
charPlayerID[20]="
NULL"
;
intScore=0;
intTime=0;
Wolfwolf;
//初始化链表
Stepstep;
step.cor.x=0;
step.cor.y=0;
step.n=0;
step.length=0;
step.StepType=HEAD;
step.nextNode=NULL;
initInterface(but,butsta);
initgraph(640,480);
InputBox(player.name,10,"
输入用户名"
"
开始"
);
setbkcolor(WHITE);
settextcolor(BLACK);
outtextxy(340,420,player.name);
PlaySound("
bgm\\1.wav"
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
srand((unsigned)time(NULL));
//初始化界面,图形界面,随机数种子
BeginBatchDraw();
loadimage(&
wolf.img,_T("
pic\\wolf.jpg"
),30,30);
while(GameSta){
if(Ready==GameSta){
Score=0;
DeleteStepNode(&
step);
cleardevice();
drawInterface(but,butsta);
FlushBatchDraw();
CreatStepNode(&
wolf.cor.x=step.nextNode->
cor.x+step.nextNode->
length/2-30;
wolf.cor.y=step.nextNode->
cor.y-30;
wolf.State=1;
}
while(Ready==GameSta){
DispatchMouseMessage();
while(Pause==GameSta){
DispatchCMD(&
wolf);
drawInterface(but,butsta);
//刷新界面
disposeStep(&
step);
drawStep(&
drawWolf(wolf);
charsss[]="
用户名:
"
outtextxy(525,240,sss);
outtextxy(525,290,player.name);
outtextxy(525,340,sScore);
judge(butsta,&
wolf,&
step,&
Score,player);
sprintf(sScore,"
得分:
%d"
Score);
Sleep(level);
Next(&
//关闭
closegraph();
PAUSE();
getch();
return0;
}
voidinitInterface(Coordinatebut[],buttonStatebutsta[])
//按钮位置状态
for(inti=0;
i<
3;
i++){
but[i].x=535;
but[i].y=20+i*90;
butsta[i]=available;
voiddrawInterface(Coordinatebut[],buttonStatebutsta[])
//设置字体
settextstyle(22,0,"
楷体"
0,0,FW_BLACK,false,false,false);
//显示按钮
drawMenu(but,butsta);
setcolor(BLACK);
line(520,0,520,480);
line(520,220,640,220);
voiddrawMenu(Coordinatebut[],buttonStatebutsta[])
//输出按钮信息
switch(GameSta){
caseReady:
drawButton(but[0],butsta[0],"
开始"
drawButton(but[1],butsta[1],"
退出"
break;
caseRun:
暂停"
casePause:
继续"
//实时输出游戏数据
voiddrawButton(Coordinatecd,buttonStatebutSta,char*text)
//设置不同状态的按钮颜色
switch(butSta){
caseavailable:
setfillcolor(RED);
break;
casenotavailable:
setfillcolor(BLACK);
caseselected:
setfillcolor(GREEN);
setfillstyle(BS_SOLID);
solidrectangle(cd.x,cd.y,cd.x+BUTTON_WEIGHT,cd.y+BUTTON_HEIGHT);
setbkmode(TRANSPARENT);
outtextxy(cd.x+12,cd.y+20,text);
voiddrawStep(Step*step)
Step*p=step->
nextNode;
while(NULL!
=p){
fillrectangle(p->
cor.x,p->
cor.y,p->
cor.x+p->
length,p->
cor.y+step_wide);
p=p->
}//画板
voiddrawWolf(Wolfwolf)
putimage(wolf.cor.x,wolf.cor.y,&
wolf.img);
}//画狼
voiddisposeStep(Step*step)
Step*p;
p=step;
while(NULL!
=p->
nextNode){
if(p->
cor.y<
=430){
CreatStepNode(step);
DeleteStepNode(step);
voidCreatStepNode(Step*step)
Step*p,*q;
q=step;
if(NULL==step->
nextNode){
p=(Step*)malloc(sizeof(Step));
p->
cor.x=rand()%100+190;
cor.y=240;
length=100;
n=0;
StepType=Safe;
nextNode=NULL;
step->
nextNode=p;
//生成新的板的信息
}else{
while(q->
nextNode!
=NULL){
q=q->
length=rand()%70+110;
cor.x=rand()%((520-p->
length)/3)*3;
cor.y=(q->
cor.y+(rand()&
50)+60);
n=q->
n+1;
q->
voidDeleteStepNode(Step*step)//删除链表
Step*p,*q;
p=q;
if(NULL==step->
return;
}elsewhile(NULL!
=-step_wide){
if(NULL!
nextNode=p->
d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 13070036 段杰 小狼课设报告 小狼 报告