13070036 段杰 小狼课设报告_第1页
13070036 段杰 小狼课设报告_第2页
13070036 段杰 小狼课设报告_第3页
13070036 段杰 小狼课设报告_第4页
13070036 段杰 小狼课设报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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(, 10, 输入用户名 , 开始); setbkcolor(white); settextcolor(black); outtextxy(340,420,); 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,); 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 savescore(person player)file *in,*out;int i=0;/新开一个数组存储前5名的玩家信息person rank5;/用来排序的中间数组pe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论