c语言课程设计报告《贪吃蛇游戏系统》.docx_第1页
c语言课程设计报告《贪吃蛇游戏系统》.docx_第2页
c语言课程设计报告《贪吃蛇游戏系统》.docx_第3页
c语言课程设计报告《贪吃蛇游戏系统》.docx_第4页
c语言课程设计报告《贪吃蛇游戏系统》.docx_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

C语言基础课程设计贪吃蛇游戏系统院 系: 计算机科学技术学院 班 级: 组 长: 学 号: 指导教师: 2017年 3 月 2日程序设计基础课程设计任务书一、题目:贪吃蛇游戏系统二、设计要求(1)自己组成课程设计小组。(2)查阅相关资料,自学具体课题中涉及到的新知识。(3)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。(4)所设计的系统应有菜单、动画。(5)按要求写出课程设计报告,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结、结束语、程序清单(带中文注释)、参考文献等。课程设计报告一律用A4纸打印,并严格按照课程设计指导书中规定的毕业设计报告的撰写规范进行排版装订。三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行以上,必须有创新(如自己编的简单动画和音乐),不得抄袭。四、课程设计工作计划2017年2月25前,指导教师讲课;2017年2月26日,设计小组进行总体方案设计和任务分工;2017年2月27日,每人完成自己承担的程序模块并通过独立编译; 2017年2月28日3月1日,分模块集体解决核心问题;2017年3月2日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行,数据必须存储到磁盘文件中,以备验收;2017年3月2日,撰写课程设计报告。2017年3月3日,进行课程设计验收。 指导教师签章: 教研室主任签章 程序设计基础课程设计指导教师评语与成绩指导教师评语:课程设计表现成绩: 课程设计验收成绩: 课程设计报告成绩: 课程设计 总成绩: 指导教师签章 2017年 6 月 日目录一. 概 述11.1研究的背景及意义11.2课程设计的目的11.3课程设计的要求21.4课程设计的任务和涉及的知识点2二需求分析42.1功能需求42.2 操作方法(键盘操作)4三. 总体方案设计53.1模块划分:53.2整体框图:5四. 程序的调试与运行结果说明64.1图形初始化失败64.2其他问题6五详细设计75.1主要模块界面75.2源程序代码8六. 结论20七. 结束语21八.参考文献22一. 概 述本课程设计以软件工程方法为指导,采用了结构化,模块化得课程设计方法,以C+技术为基础,使用vc为主要工具,总体设计,详细设计,最终完成系统的实现与测试。1.1研究的背景及意义随着社会的发展,人们交友范围越加广泛,越来越多的人迫切的需要一种可以存储联系人信息的工具。因此设计一款随时查询联系人信息的软件成了很多人以及商家们的需要。此次课程设计完成的通讯录管理系统,正是为了满足上诉需求设计出来的,希望能给人们带来便利。C+是国际上广泛流行的,很有发展前途的计算机高级语言。他适合作为系统秒速语言,既可用来编写系统软件,也可以用来编写应用软件。对于计算机专业和相关学科的学生来说,“课程设计基础”是一门非常重要的专业基础课程,对其学习好坏,直接关系到后续课程的学习效果。C+是一种面向过程的高级语言。要学好C+,不但要掌握C+的语法,更重要的是要掌握使用C+进行结构化、模块化程序设计的方法。有了较好的C+基础,就可以进一步学好面向对象的程序设计语言和可视的编程语言如VC+6.0、C#等。对于面向对象的程序设计,当设计到具体实现部分的时候,也就是编写一个对象中具体的方法(即外部服务函数)时,必然要使用结构化得程序来实现。可见,结构化、模块化程序设计的方法是必然要学习的,而C+是结构化程序设计思想中比较经典的语言,不可不学好。学习结构化、模块化程序设计的思想和方法,可以掌握设计解决一个问题的过程,即如何对问题进行分解,划分成各个功能模块,每个模块如何分步骤实施,通过什么样的一个流程图控制可以实现该模块的功能,这也是学习这门课程的中心内容。1.2课程设计的目的1. 使学生更深入地理解和掌握该课程中的有关基本概念,程序设计的思想、技术和方法。2. 培养学生综合运用所学知识独立完成课题的能力。3. 培养学生勇于探索、严谨推理、实事求是、有过必改,用实践来检验理论,全方位考虑问题等科学人员应具有的须素质。4. 提高学生对工作认真负责、一丝不苟,对同学友爱团结,协作攻关的基本素质。5. 培养学生从资料文献、科学实验中获得新知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。6. 对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。1.3课程设计的要求为实现上述目的,提出以下具体要求:1. 以学生自由组织成课程设计游戏开发小组,可由指导教师确定每组的人数,建议每组为3个人左右,并选1人担任组长.指导教师可跟据各个开发小组的试验情况进行必要的调整2. 每组选择课程设计中的一个题目,即开发一个所选课题的软件系统,每组独立完成。3. 该系统要有主菜单,动画与音乐,且游戏功能上尽可能模拟操作系统中的贪吃蛇游戏,系统界面尽量美观。4. 进一步掌握C+集成开发环境5. 熟练掌握C+的数据类型,三种基本结构,模块化设计,指针,结构体,文件,链表等知识点。6. 丛书或互联网上查阅相关资料,自学具体课题中涉及到的知识。7. 采用结构化,模块化程序设计方法进行设计,功能要完善,界面要美观,应具有一定创新。8软件开发小组组长带领本小组成员团结协作,共同完成课题的设计任务。要求开发小组中每个组员都有自己独立的设计的若干模块,每个人设计的有效源代码应在200行以上,同时要读懂其他组员完成的内容。1.4课程设计的任务和涉及的知识点1.课程设计的主要完成任务(1)通过编写“贪吃蛇游戏”程序,掌握结构化、模块化程序设计的思想,培养解决实际问题的能力。(2)设计数组元素与蛇、食物的对应关系。(3)随机产生食物。(4)有分数统计、排行榜、分数存储等功能。(5)有同步播放的动画、声音效果。2. 课程设计中涉及的知识点(1)数组的应用。(2)全局变量的应用。(3)按键处理。(4)结构体的应用。(5)图形 、音乐和动画的有关知识。(6)随机函数的使用。(7)文件的基本操作。(8)结构化 、模块化的设计方法。二需求分析贪吃蛇是大众化的游戏,游戏简单容易上手,但确能给玩家放松心情,身心得到娱乐,从而能更好地投入到学习或工作中。现代人,无乱是工作的,或是学生都面临的巨大压力,而这一款简单的游戏能让每个人随时随地上手,令不少玩家对它爱不释手。对于繁忙的现代人,玩大型游戏是浪费时间,然而这样的小游戏,不仅可以随时随地娱乐,对硬件要求很低,可以不夸张地说,只要你有数码产品,都可以玩。而且在为人们节省不少宝贵的时间的同时,达到了身心娱乐的目的。2.1功能需求 进入游戏前,可以观看选择观看小组成员的动画。按任意键进入游戏。蛇在一个封闭的墙内移动,遇到食物后,蛇身加长,分数上升。要是碰到墙壁或者是蛇自己,即游戏结束。当分数上升到一定,蛇速度加快。2.2 操作方法(键盘操作)(1)进入游戏:回车键。(2)游戏操作:在游戏中,通过键盘上下左右控制蛇的方向。三. 总体方案设计特点:为方便操作,加入了口令登录、动画音乐、数据维护和系统帮助。算法的整体思路:随机产生食物,按相应的键执行相应的功能。3.1模块划分:(一)游戏动画 (二)游戏菜单: (三)游戏过程: (四)退出: 3.2整体框图:贪吃蛇游戏系统游戏选项开始游戏 看动画退出游戏图1 软件总体模块结构图四. 程序的调试与运行结果说明4.1图形初始化失败预期效果:进入动画能观看所画图形。 实际运行效果:编译成功,但无法进入动画。图4 图形初始化失败错误分析:未指定显卡驱动位置。修改:将显卡驱动文件Egavga.bgi复制到动画源程序目录下。修改后程序运行效果与预期效果一致。如图5所示。图5 动画4.2其他问题比如全局变量重命名、函数重复声明或未声明和主函数重定义等问题。如:图10 重定义主函数main五详细设计5.1主要模块界面5.1.1 游戏动画5.1.2 菜单界面5.1.3 游戏界面5.1.4 辅助界面5.1.5 游戏结束界面5.2源程序代码#include#include#include#include#includevoid gotoxy(int x,int y);/移动void Loc(int, int);/定位函数void Beginning();/游戏开始void CreatMap();/创建地图void GameInit();/初始化void GameStart();/游戏开始void DeadOrNo();/判断是否和自身相撞char DeadOrNoByPos(int, int);/蛇的生命void JudgeFood();/判断食物是否和自身void MakeFood();/制造食物void ThroWall();/是否穿墙void SnakeMove();/蛇的移动void MoveNo(struct Body *p_body,struct Body *nofood);/没有食物时蛇的移动void MoveYes(struct Body *yesfood);/有食物时蛇的移动void DrawShank(char);/画蛇void Ending();/游戏结束void HiSleep(int);void snack()printf( $n);printf( $_$_$ $n);printf( $_$_$ $ $ $n);printf( $_$ $ $ $n);printf( $_$_$ $ $ $n);printf( $ $ $_$_$ $ $ $ $n);printf( $ $ $ $ $_$_$ $ $ $ $ $n);printf( $ $ $ $ $_$ $ $ $ $ $n);printf( $ $ $ $_$_$ $ $ $ $ $n);printf( $ $ $ $ $ $_$_$ $ $ $ $ $n);printf( $ $ $ $ $_$ $ $ $ $ $ $n);printf( $ $ $ $ $ $_$_$ $ $ $ $ $n);printf( $ $ $ $_$_$ $ $ $ $ $n);printf( $ $ $_$_$ $ $ $ $n);printf( $ $_$_$ $ $ $ $n);printf( $_$_$ $ $n);printf( $_$_$n);printf( $_$ 按回车进入游戏n);printf( $_$_$n);printf( $_$_$_$n);printf( $_$_$_$n);printf( $_$_$_$_$_$_$n);printf( $_$_$_$_$_$_$n);printf( $_$_$_$_$_$_$n);printf( $_$_$_$_$_$_$_$n);printf($_$_$_$_$_$n);printf($_$_$_$_$_$_$n);printf($_$_$_$_$_$_$_$_$n);printf( $_$_$_$_$_$n);printf( $_$_$_$_$_$n);printf( $_ _$_$_$n);printf( $_$_$n);printf( $_$n);printf( $n); system(color b); struct Body short x,y; struct Body *next;/指向下一个蛇身的指针; int length=sizeof(struct Body);/Body结构体所占字节数int Delay=500;short X=0,Y=0;short food_x,food_y,food=0;short life=1;short score1=0;char movdir=R;short lockdelay=20;struct node int x,y; struct node *next; struct node *p;struct Body *head;int i,j;void Loc(int x, int y) COORD pos = x,y; /调用windows库里的函数 坐标转换 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);/获得输出设备的句柄 SetConsoleCursorPosition(hOut, pos); void gotoxy(int x, int y) COORD loc = x, y; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);/获得输出设备的句柄 SetConsoleCursorPosition(hOut, loc); /光标定位void init() /游戏开始时蛇的位置 gotoxy(9,2); p=(struct node*)malloc(sizeof(struct node);/将P指向一个新分配的struct node型指针地址 是链表() p-x=9; p-y=2; void Beginning()/初始void gotoxy(int x, int y); int initz=30,initx=14,inity=8,init=2;/下面printf字开始右移的初始位置,init代表左右方向 char ch1=0;gotoxy(38,18);puts(王慧); while(ch1!=13) gotoxy(initz,inity-1); printf( 经典小游戏 ); gotoxy(initx,inity); printf( 超级宇宙无敌无边框贪吃蛇 按ENTER键 开始游戏 ); Sleep(Delay); gotoxy(initx,inity); printf( ); if(init0&initx=30|initx=2&init0) init*=-1; initx+=init; initz+=init; if(kbhit() /有键盘输入时接受若是13(ENTER)键结束循环 ch1=getch(); system(cls);void CreatMap()/创建外围 int i; for(i=0;i=100;i+=2) Loc(i,0); printf(); Loc(i,28); printf(); for(i=0;ix=12;head-y=2; p_cur=head; p_cur-next=NULL; for(xh=0;xhnext=p_new; p_new-x=p_cur-x-2; p_new-y=p_cur-y; p_cur=p_new; p_cur-next=NULL; Delay=500; food=0; life=1; score1=0; movdir=R; lockdelay=20; DrawShank(0); Loc(80,3); puts(每吃一个); Loc(80,4); puts(蛇会加速); Loc(78,13); puts(控制键: );void GameStart()/游戏开始 while(1) DeadOrNo(); if(life=0) break; MakeFood(); if(GetAsyncKeyState(VK_UP)&movdir!=D&movdir!=U) movdir=U; else if(GetAsyncKeyState(VK_DOWN)&movdir!=U&movdir!=D) movdir=D; else if(GetAsyncKeyState(VK_LEFT)&movdir!=R&movdir!=L) movdir=L; else if(GetAsyncKeyState(VK_RIGHT)&movdir!=L&movdir!=R) movdir=R; SnakeMove(); Loc(80,7); printf(1得分: %3d,score1); Loc(80,10); printf(速度: %5.1f,1000.0/(float)Delay); HiSleep(Delay); void DeadOrNo()/判断是否死亡 struct Body *p_body=head; while(p_body-next!=NULL)/定位到最后一个蛇身 p_body=p_body-next; if(p_body-x=head-x&p_body-y=head-y) life=0; char DeadOrNoByPos(int x, int y)/判断生命 struct Body *p_body=head; while(p_body-next!=NULL)/定位到最后一个蛇身 if(p_body-x=x&p_body-y=y)/如果有任何一个蛇身坐标与蛇头重合,蛇即死亡 return 1; p_body=p_body-next; return 0;void JudgeFood()/判断食物是否与蛇身重叠 struct Body *p_body=head; while(p_body!=NULL) if(food_x=p_body-x&food_y=p_body-y) food=0; Loc(62,8); MakeFood(); p_body=p_body-next; void MakeFood()/制造食物 if(food=0) food_x=rand()%53+2; food_y=rand()%23+1; if(food_x%2=1) food_x+; food=1; JudgeFood(); void ThroWall(struct Body *p)/是否穿墙 if(p-x=69)life=0; if(p-x=1)life=0; if(p-y=1)life=0; if(p-y=27)life=0;void SnakeMove()/蛇的移动 struct Body *p_body; struct Body *nofood; struct Body *yesfood; struct Body tmppos; switch(movdir) case U:X=0;Y=-1;break; case D:X=0;Y=1;break; case L:X=-2;Y=0;break; case R:X=2;Y=0;break; tmppos=*head; tmppos.x+=X; tmppos.y+=Y; ThroWall(&tmppos); if(DeadOrNoByPos(tmppos.x,tmppos.y) if(lockdelayx=head-x+X; nofood-y=head-y+Y; ThroWall(nofood); nofood-next=head; head=nofood; p_body=head; while(p_body-next)-next!=NULL) p_body=p_body-next; Loc(p_body-next)-x,(p_body-next)-y); printf( ); free(p_body-next); p_body-next=NULL;void MoveYes(struct Body *yesfood)/吃到食物 yesfood=(struct Body*)malloc(length); yesfood-x=food_x; yesfood-y=food_y; yesfood-next=head; head=yesfood; food=0; score1+=1; MakeFood(); if(Delay200&Delay140&Delay100&Delay70&Delay50&Delay40&Delay=50)Delay-=1; else if(score1100)Delay=Delay; else if(score1150)Delay=30; else if(score1x,p_body-y); if(p_body=head) printf(); else printf(); drawcount+; p_body=p_body-next; if(simple&drawcount=2) break; void Ending()/结束游戏 int num=0; char str=Thank you for playing the snaKe game! ; system(cls); Loc(32,9);printf(Game Over!); while(strnum!=0) Loc(20+num,11); putchar(strnum); num+; Loc(28,13); puts(按ESC键退出); Loc(30,15); puts(按任意键重来.);void HiSleep(int ms) int x; x=clock(); while(clock()-xms); Sleep(0);int main() system(color 0c); srand(unsigned int)time(NULL); again:; while(!kbhit() snack(); sy

温馨提示

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

评论

0/150

提交评论