13070036 段杰 小狼课设报告.doc

上传人:文库蛋蛋多 文档编号:3072988 上传时间:2023-03-10 格式:DOC 页数:24 大小:454.50KB
返回 下载 相关 举报
13070036 段杰 小狼课设报告.doc_第1页
第1页 / 共24页
13070036 段杰 小狼课设报告.doc_第2页
第2页 / 共24页
13070036 段杰 小狼课设报告.doc_第3页
第3页 / 共24页
13070036 段杰 小狼课设报告.doc_第4页
第4页 / 共24页
13070036 段杰 小狼课设报告.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《13070036 段杰 小狼课设报告.doc》由会员分享,可在线阅读,更多相关《13070036 段杰 小狼课设报告.doc(24页珍藏版)》请在三一办公上搜索。

1、 小狼下100层 学 号 13070036姓 名 段杰指导教师 陈彩 2014年4月目录小狼下100层1目录21 需求分析31.1功能与数据需求31.1.1 显示用户界面31.1.2打开音乐31.1.5 计分31.1.6 键盘操作31.1.7按钮操作31.2 界面需求41.2.1输入用户名界面。41.2.2游戏界面51.2.3 结束界面51.3 开发与运行环境61.4 其他方面需求62 概要设计62.1 主要数据结构72.2 程序总体结构83 详细设计83.1主要函数流程图83.2板的生成和删除94 测试104.1 游戏开启测试104.2 游戏运行测试104.2.1边界测试105 用户手册11

2、5.1 应用程序功能的详细说明115.2 应用程序运行环境的要求115.3 应用程序的安装与运行方法115.4 程序界面、交互方式和操作方法116 总结提高126.1课程设计总结126.2对本课程意见与建议13附录:源代码141 需求分析小狼下100层,每下一层木板分数增加,木板不停生成。死亡后记录积分并排名。1.1功能与数据需求 程序功能:输入用户名、生成游戏界面、开始游戏、计分、保存、游戏开始及退出、排行榜、结束、键盘及鼠标操作。1.1.1 显示用户界面利用drawInterface和drawMenu和drawButton绘制游戏界面利用drawwolf,drawStep画出狼和板。1.1

3、.2打开音乐 显示开始界面之后,利用playsound打开音乐并播放音乐 1.1.4按开始键游戏开始游戏进入游戏界面,画好界面,信息显示区和控制区,产生狼和板,狼接触边界则游戏失败。记录得分之后显示排行榜。1.1.5 计分 狼每下一层算5分,接触板后才进行分数增加。1.1.6 键盘操作可控制狼的方向1.1.7按钮操作游戏有开始、暂停和结束键,可以暂停和退出游戏。游戏中退出不记录积分。1.2 界面需求游戏界面:进行游戏结束界面:排行榜显示 1.2.1输入用户名界面。 记录用户信息。1.2.2游戏界面游戏时的界面1.2.3 结束界面 按游戏结束的界面。1.3 开发与运行环境 本游戏开发环境为vc+

4、6.0 ,运行环境为vc+6.0 环境 添加EasyX库 使用预编译的头文件,选择不使用补偿页眉1.4 其他方面需求 Vc+6.0上要安装easyx软件2 概要设计 2.1 主要数据结构 struct Coordinate int x; int y;/坐标struct personchar name20;int score;/玩家信息struct Step Coordinate cor; int length; / 长度 stepType StepType; / 台阶类型 int n; / 第几阶 Step *nextNode; / 下一结点; / 用来存储台阶的链表struct Wolf C

5、oordinate cor; / 坐标 int life; / 待定 int State; / 1:在台子上;2:往下掉 IMAGE img;2.2 程序总体结构void initInterface(Coordinate but , buttonState butsta); / 初始化void drawInterface(Coordinate but , buttonState butsta); / 界面void drawMenu(Coordinate but , buttonState butsta); / 菜单void drawButton(Coordinate cd , buttonSt

6、ate butSta , char *text); / 按钮void drawMessage(char *name , int score , int time ); / 信息void drawStep(Step *step); / 台阶void drawWolf(Wolf wolf); / 狼void disposeStep(Step *step); / 台阶void CreatStepNode(Step *step); / 创建节点void DeleteStepNode(Step *step); / 删除结点void Next(Step *step , Wolf *wolf); /板和狼下

7、一步计算void DispatchCMD(Wolf *wolf); /停止响应void DispatchKeyboardMessage(Wolf *wolf); void DispatchMouseMessage(); int savescore(person player);/存得分int showscore();/显示排行榜void judge(buttonState butsta, Wolf *wolf , Step *step, int *score,person player);/ 判断void PAUSE();3 详细设计3.1主要函数流程图3.2板的生成和删除4 测试4.1 游戏

8、开启测试 本测试目的: 确定游戏能在PC上正常开启 测试:本游戏能在win7以下的操作系统中运行,高于win7的操作系统暂时还不能运行vc6.0应用程序。确定游戏能够运行时,可将程序代码直接导入到vc+6.0中,并点击运行(run)即可运行此游戏。或者用户确定游戏BGI路径与源代码中的路径相同,则可直接双击游戏的EXE文件,也可运行游戏。4.2 游戏运行测试4.2.1边界测试本测试目的: 确定游戏界面中的边界处是否可以正常运行 测试:用户进入游戏后,按照用户手册可进行测试,查看兔子到边界处是否能够正常使用 按开始键开始 按 狼开始动 到边界处是否正常运动 板能否正常生成 图形是否有缺损 游戏中

9、是否有隐藏的bug 经测试,游戏运行正常。4.2.2按钮测试本测试目的:测试暂停,退出,结束键是否可以正常使用测试:用户进入游戏后,按照用户手册可进行测试。按开始键,待游戏开始后按暂停键暂停,再按继续键继续,结束键结束本盘游戏,再按开始键开始,再按退出键退出游戏。看游戏是否可按预设的那样执行。经测试,游戏运行正常。5 用户手册5.1 应用程序功能的详细说明本应用程序名为“层下100层”是一款能在在vc+6.0环境下运行的益智小游戏。使用于win7,等操作系统。游戏主题是一个狼在不断生成并上升的木板中下降。触碰到游戏壁则死亡,记录游戏积分并排行 5.2 应用程序运行环境的要求 本游戏开发环境为v

10、c+6.0,运行环境为vc+6.0 环境生成可执行文件后可以用windows7,windows X等系统运行。5.3 应用程序的安装与运行方法 本益智小游戏不需要安装,玩家可将程序代码直接导入到vc+6.0环境中,并点击编译,运行,即可运行此游戏。或者用户确定游戏BGI路径与源代码中的路径相同,则可直接双击游戏的EXE文件,也可运行游戏。5.4 程序界面、交互方式和操作方法按钮区域游戏信息狼板 6 总结提高6.1课程设计总结这次C语言课程设计,我收获很大,本来上学期c语言学的就比较基础,在加上自己课下练习不够,起初,做课设很是费劲,不知道从何下手,后来跟着easyx上的教程一步一步的学,渐渐有

11、了点信心,通过学习网上别人介绍的方法,和看别人编的小程序,心里才渐渐有些想法。通过一段时间的学习,我发现其实编游戏也不是很难,重要的是要有想法,思路清晰之后再开始编,会更快更好。而且在设计时要分块写,调用方便而且改起来也方便。有的时候,总是找不到错误在哪里,真的想放弃。但是现在回想起来,如果那时放弃那么又怎能开发出来呢。通过这次的的课设,我想编程既要有头脑,又要有耐心,遇到问题时,应及时与同学,老师交流,或者想放一放干些别的,也许事情就可解决。编程并不可一蹴而就,是一个慢慢学习理解的过程,不能着急,耐心一点。但是也要注意时间的掌握,要合理安排课设的时间。在本次设计中,我觉得自己在c语言中复杂问

12、题的处理上有了很大提高,对整体结构的把握上也有了一定的提升。而且我觉得自己应多学习高级的算法,使自己的程序更加系统,更便于理解。这次的程序设计,我更要感谢老师和同学的帮助,在大家的帮助下我才能完成此次课设。6.2对本课程意见与建议 我希望课设能安排几节来是讲一讲怎么做游戏,先讲一讲基础的知识,再让我们做,这样可以节约很多时间。 我希望能够在最后几周,多安排几次答疑时间,以便更好地解决我们的问题。 附录:源代码#include #include #include #include #include#pragma comment(lib,winmm.lib)#define SPEED#define

13、 step_wide 30 / 台阶的厚度#define BUTTON_HEIGHT 50 / 按钮的高#define BUTTON_WEIGHT 80 / 按钮的宽度#define level 10 /难度【流畅度】/enum gameStateReady = 1,Run = 2,Pause = 3,Exit = 0;/游戏运行状态enum buttonStateavailable,notavailable,selected;/按钮的状态,可选.不可选,被选中enum stepTypeSafe,Spine,HEAD;/struct Coordinate int x; int y;struct

14、 personchar name20;int score;struct Step Coordinate cor; / 坐标 int length; / 长度 stepType StepType; / 台阶类型 int n; / 第几阶 Step *nextNode; / 下一结点; / 用来存储台阶的链表struct Wolf Coordinate cor; / 坐标 int life; / 待定 int State; / 1:在台子上;2:往下掉 IMAGE img;gameState GameSta = Ready; / 绘制界面void initInterface(Coordinate

15、but , buttonState butsta); / 初始化void drawInterface(Coordinate but , buttonState butsta); / 界面void drawMenu(Coordinate but , buttonState butsta); / 菜单void drawButton(Coordinate cd , buttonState butSta , char *text); / 按钮void drawMessage(char *name , int score , int time ); / 信息void drawStep(Step *ste

16、p); / 台阶void drawWolf(Wolf wolf); / 狼void disposeStep(Step *step); / 台阶void CreatStepNode(Step *step); / 创建节点void DeleteStepNode(Step *step); / 删除结点void Next(Step *step , Wolf *wolf); void DispatchCMD(Wolf *wolf); void DispatchKeyboardMessage(Wolf *wolf); void DispatchMouseMessage(); int savescore(p

17、erson player);int showscore();/ 判断void judge(buttonState butsta, Wolf *wolf , Step *step, int *score,person player);void PAUSE();int main() char sScore20; person player; Coordinate but3; buttonState butsta3; char PlayerID20 = NULL; int Score = 0; int Time = 0; Wolf wolf;/ 初始化链表 Step step; step.cor.x

18、 = 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(bgm1.wav, NULL, SND_FILENAME | SND_A

19、SYNC | SND_LOOP); srand(unsigned)time(NULL); /初始化界面,图形界面,随机数种子 BeginBatchDraw(); loadimage(&wolf.img, _T(picwolf.jpg),30,30); while(GameSta) if( Ready = GameSta ) Score = 0; DeleteStepNode(&step); cleardevice(); drawInterface(but,butsta); FlushBatchDraw(); CreatStepNode(&step); / 狼 wolf.cor.x = step

20、.nextNode-cor.x + step.nextNode-length/2-30; wolf.cor.y = step.nextNode-cor.y-30; wolf.State = 1; while( Ready = GameSta) DispatchMouseMessage(); cleardevice(); while(Pause = GameSta) DispatchMouseMessage(); DispatchCMD( &wolf ); drawInterface( but,butsta ); / 刷新界面 disposeStep( &step ); drawStep(&st

21、ep); drawWolf(wolf); char sss =用户名:; outtextxy(525,240,sss); outtextxy(525,290,player.name); outtextxy(525,340,sScore); FlushBatchDraw(); judge( butsta , &wolf , &step , &Score, player); sprintf(sScore,得分:%d,Score); Sleep( level ); Next( &step , &wolf ); / 关闭 closegraph(); PAUSE(); getch(); return 0

22、;void initInterface(Coordinate but , buttonState butsta) / 按钮位置状态 for(int i = 0 ; i nextNode; while(NULL != p) fillrectangle(p-cor.x , p-cor.y , p-cor.x+p-length , p-cor.y+step_wide); p = p-nextNode; /画板void drawWolf(Wolf wolf) putimage(wolf.cor.x,wolf.cor.y, &wolf.img); /画狼void disposeStep(Step *st

23、ep) Step *p; p = step; while( NULL != p-nextNode ) p = p-nextNode; if(p-cor.y nextNode) p = (Step*)malloc(sizeof(Step); p-cor.x = rand()%100 +190; p-cor.y = 240; p-length = 100; p-n = 0; p-StepType = Safe; p-nextNode = NULL; step-nextNode = p; /生成新的板的信息 else while(q-nextNode != NULL) q = q-nextNode;

24、 p = (Step*)malloc(sizeof(Step); p-length = rand()%70 + 110; p-cor.x = rand()%(520-p-length)/3)*3; p-cor.y = (q-cor.y + (rand()&50) + 60); p-n = q-n + 1; p-StepType = Safe; p-nextNode = NULL; q-nextNode = p; void DeleteStepNode(Step *step)/删除链表 Step *p, *q; q = step; p = q; if( NULL = step-nextNode)

25、 return ; else while( NULL != p-nextNode ) p = p-nextNode; if(p-cor.y nextNode) q-nextNode = p-nextNode; delete(p); p = q; else q-nextNode = NULL; delete(p); return ; q = p; if( Ready = GameSta ) p = step-nextNode; step-nextNode = NULL; while( NULL != p ) q = p; p = p-nextNode; delete(q); void Next(

26、Step *step , Wolf *wolf) Step *p = step; while( NULL != p ) p-cor.y -= 1; p = p-nextNode; if( 1 = wolf-State ) wolf-cor.y -= 1; if( 2 = wolf-State ) wolf-cor.y += 2; void DispatchCMD(Wolf *wolf) DispatchKeyboardMessage(wolf); DispatchMouseMessage(); void DispatchKeyboardMessage(Wolf *wolf) /获取及处理键盘输

27、入 if(GetAsyncKeyState(VK_LEFT) & 0x8000) if(wolf-cor.x 3) wolf-cor.x -= 2; if(GetAsyncKeyState(VK_UP) & 0x8000) if(GetAsyncKeyState(VK_RIGHT) & 0x8000) if(wolf-cor.x cor.x += 2; if(GetAsyncKeyState(VK_DOWN) & 0x8000) void DispatchMouseMessage() / 获取及处理鼠标信息 if(MouseHit() MOUSEMSG m; m = GetMouseMsg()

28、; if(m.mkLButton) if(m.x=535&m.x=20&m.y=535&m.x=110&m.ynextNode; while(NULL != p) if(wolf-cor.y = p-cor.y - 33 & wolf-cor.y cor.y-30) if(wolf-cor.x = p-cor.x -30 & wolf-cor.x cor.x+p-length) if( 2 = wolf-State) *score = p-n *5; wolf-State = 1; break; else wolf-State = 2; p = p-nextNode; if(wolf-cor.

29、y = 480 | wolf-cor.y = 0) cleardevice(); int a=*score; player.score = *score; itoa(*score,sscore,10); outtextxy(250,120, 游戏结束 ); outtextxy(250,150,按任意键返回!); outtextxy(250,180,得分为:); outtextxy(340,180,sscore); savescore(player); showscore(); FlushBatchDraw(); system(Pause); GameSta = Ready; /int save

30、score(person player)FILE *in,*out;int i=0;/新开一个数组存储前5名的玩家信息person rank5;/用来排序的中间数组person m,n;out=fopen(savedate.txt,r);if( out=NULL )outtextxy(300,220,出错);return -1;while(!feof(out) fscanf(out, %s%d,ranki.name, &ranki.score);i+;fclose(out);for(i=0;iranki.score)m.score=ranki.score;strcpy(m.name,ranki

31、.name);n.score=m.score;strcpy(n.name,m.name);ranki.score=player.score;strcpy(ranki.name,player.name);break;for(i=0;iranki.score)n.score=ranki.score;strcpy(n.name,ranki.name); ranki.score=m.score; strcpy(ranki.name,m.name);/将读取与玩家成绩对比再次写入in=fopen(savedate.txt,w);if( in=NULL )outtextxy(300,220,出错);ret

32、urn -1;for(i=0;i5;i+)fprintf(in,%s %dn,ranki.name,ranki.score);fclose(in);return 0;int showscore()int text_y=300;person rank5;FILE *out;char player_text40;settextcolor(BLACK);setfont(30, 0, 楷体);out=fopen(savedate.txt,r);if( out=NULL )outtextxy(300,220,出错);return -1;for(int i=0;i5;i+) fscanf(out, %s%d,ranki.name, &ranki.score);sprintf(player_text,第%d名 玩家%s 分数%d,i+1,ranki.name,ranki.score);outtextxy(110,text_y,player_text);text_y+=30;fclose(out);return 0;

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

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号