




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言基础课程设计贪吃蛇游戏系统院 系:计算机科学技术学院班级:组长:学号:指导教师:2017年3月2日程序设计基础课程设计任务书一、题目:贪吃蛇游戏系统二、设计要求(1)自己组成课程设计小组。(2)查阅相关资料,自学具体课题中涉及到的新知识。(3)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。(4)所设计的系统应有菜单、动画。(5)按要求写出课程设计报告,并于设计结束后 1周内提交。其主要内容包括: 封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设 计、详细设计、程序的调试与测试、总结、结束语、程序清单(带中文注释)、参考文献等。课程设计报告一律用A4纸
2、打印,并严格按照课程设计指导书中规定的毕业设计报告的撰写规范进行排版装订。三、课程设计工作量由于就是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序 行以上,必须有创新(如自己编的简单动画与音乐 ),不得抄袭。四、课程设计工作计划2017年2月25前,指导教师讲课;2017年2月26日,设计小组进行总体方案设计与任务分工;2017年2月27日,每人完成自己承担的程序模块并通过独立编译;2017年2月28日3月1日,分模块集体解决核心问题;2017年3月2日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行,数据必须存储到磁盘文件中,以备验收;2017年3月2日,撰写课
3、程设计报告。2017年3月3日,进行课程设计验收。指导教师签章:教研室主任签章2017年 6 月日程序设计基础课程设计指导教师评语与成绩指导教师评语课程设计表现成绩:课程设计验收成绩:课程设计报告成绩:课程设计总成绩:指导教师签章目录一、 概 述 11、 1 研究的背景及意义 11、2课程设计的目的 11、3 课程设计的要求 21、 4 课程设计的任务与涉及的知识点 2二 .需求分析 42、 1 功能需求 43、 2 操作方法(键盘操作) 43、 总体方案设计 53、 1 模块划分: 54、 2 整体框图: 54、 程序的调试与运行结果说明 64、 1 图形初始化失败 65、 2 其她问题 6
4、五.详细设计 76、 1 主要模块界面 77、 2 源程序代码 86、 结论 207、 结束语 21八、参考文献22概述本课程设计以软件工程方法为指导,采用了结构化,模块化得课程设计方法,以C+技术为基础,使用vc为主要工具,总体设计,详细设计,最终完成系统的实现与测试。1 、 1 研究的背景及意义随着社会的发展,人们交友范围越加广泛,越来越多的人迫切的需要一种可以存储联系人信息的工具。因此设计一款随时查询联系人信息的软件成了很多人以及商 家们的需要。此次课程设计完成的通讯录管理系统,正就是为了满足上诉需求设计出来的,希望能给人们带来便利。C+就是国际上广泛流行的,很有发展前途的计算机高级语言
5、。她适合作为系统 秒速语言,既可用来编写系统软件,也可以用来编写应用软件。对于计算机专业与相关学科的学生来说,“课程设计基础”就是一门非常重要的专业基础课程,对其学习好坏,直接关系到后续课程的学习效果。C+就是一种面向过程的高级语言。要学好C+,不但要掌握C+的语法,更重要的就是要掌握使用 C+进行结构化、模块化程序设计的方法。有了较好的C+基础,就可以进一步学好面向对象的程序设计语言与可视的编程语言如VC+6、0、C#等。对于面向对象的程序设计,当设计到具体实现部分的时候,也就就是编写一个对象中具体的方法(即外部服务函数)时 ,必然要使用结构化得程序来实现。可见,结构化、模块化程序设计的方法
6、就是必然要学习的,而C+就是结构化程序设计思想中比较经典的语言,不可不学好。学习结构化、模块化程序设计的思想与方法,可以掌握设计解决一个问题的过程,即如何对问题进行分解,划分成各个功能模块,每个模块如何分步骤实施 ,通过什么样的一个流程图控制可以实现该模块的功能,这也就是学习这门课程的中心内容。1、 2 课程设计的目的1. 使学生更深入地理解与掌握该课程中的有关基本概念, 程序设计的思想、技术与方法。2. 培养学生综合运用所学知识独立完成课题的能力。3. 培养学生勇于探索、严谨推理、实事求就是、有过必改,用实践来检验理论全方位考虑问题等科学人员应具有的须素质。4. 提高学生对工作认真负责、一丝
7、不苟,对同学友爱团结,协作攻关的基本素质。5. 培养学生从资料文献、科学实验中获得新知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识与创新能力。6. 对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计 能力、书面及口头表达能力进行考核。1、 3 课程设计的要求为实现上述目的, 提出以下具体要求:1. 以学生自由组织成课程设计游戏开发小组, 可由指导教师确定每组的人数 , 建议每组为3 个人左右, 并选 1 人担任组长、指导教师可跟据各个开发小组的试验情况进行必要的调整2. 每组选择课程设计中的一个题目, 即开发一个所选课题的" 软件系统&q
8、uot;, 每组独立完成。3. 该系统要有主菜单, 动画与音乐, 且游戏功能上尽可能模拟操作系统中的贪吃蛇游戏, 系统界面尽量美观。4. 进一步掌握C+班成开发环境5. 熟练掌握C+的数据类型,三种基本结构,模块化设计,指针,结构体,文 件 , 链表等知识点。6. 丛书或互联网上查阅相关资料, 自学具体课题中涉及到的知识。7. 采用结构化, 模块化程序设计方法进行设计, 功能要完善, 界面要美观, 应具有一定创新。8. 软件开发小组组长带领本小组成员团结协作, 共同完成课题的设计任务。要求开发小组中每个组员都有自己独立的设计的若干模块, 每个人设计的有效源代码应在 200 行以上 , 同时要读
9、懂其她组员完成的内容。1、 4 课程设计的任务与涉及的知识点1、课程设计的主要完成任务(1) 通过编写“贪吃蛇游戏”程序 , 掌握结构化、模块化程序设计的思想, 培养解决实际问题的能力。(2) 设计数组元素与蛇、食物的对应关系。(3) 随机产生食物。(4) 有分数统计、排行榜、分数存储等功能。(5) 有同步播放的动画、声音效果。2、 课程设计中涉及的知识点(1) 数组的应用。(2) 全局变量的应用。(3) 按键处理。(4) 结构体的应用。(5) 图形 、音乐与动画的有关知识。(6) 随机函数的使用。(7) 文件的基本操作。(8) 结构化 、模块化的设计方法。二 .需求分析贪吃蛇就是大众化的游戏
10、,游戏简单容易上手,但确能给玩家放松心情,身心得到娱乐,从而能更好地投入到学习或工作中。现代人,无乱就是工作的,或就是学生都面临的巨大压力,而这一款简单的游戏能让每个人随时随地上手,令不少玩家对它爱不释手。对于繁忙的现代人,玩大型游戏就是浪费时间,然而这样的小游戏,不仅可以随时随地娱乐,对硬件要求很低,可以不夸张地说,只要您有数码产品,都可以玩。而且在为人们节省不少宝贵的时间的同时,达到了身心娱乐的目的。2、 1 功能需求进入游戏前,可以观瞧选择观瞧小组成员的动画。按任意键进入游戏。蛇在一个封闭的墙内移动,遇到食物后,蛇身加长,分数上升。要就是碰到墙壁或者就是蛇自己 ,即游戏结束。当分数上升到
11、一定,蛇速度加快。2、 2 操作方法(键盘操作)(1) 进入游戏: 回车键。(2) 游戏操作: 在游戏中, 通过键盘上下左右控制蛇的方向。总体方案设计特点:为方便操作,加入了口令登录、动画音乐、数据维护与系统帮助 算法的整体思路:随机产生食物,按相应的键执行相应的功能。3、1模块划分:(一)游戏动画(二)游戏菜单:(三)游戏过程:(四)退出:3、2整体框图:图1软件总体模块结构图四、 程序的调试与运行结果说明4、 1图形初始化失败预期效果:进入动画能观瞧所画图形。实际运行效果:编译成功,但无法进入动画BG1 Error - Graphics not in it ialized (use fin
12、itgraph')Press any kej to ccmt inue .图4图形初始化失败错误分析:未指定显卡驱动位置。修改:将显卡驱动文件 Egavga、bgi复制到动画源程序目录下修改后程序运行效果与预期效果一致。如图5所示。图5动画4、2其她问题比如全局变量重命名、函数重复声明或未声明与主函数重定义等问题。如:图10重定义主函数 main五.详细设计5、1主要模块界面$ $ ¥ $ 融S I 1 1 诉i 3 its 1_Mi M | 国一1 11 1 s 3 1:3 T 中 5 11 I431_ .II- | :字二1等 1 $向阅车身是潜:动科耨打斛翼 依粉冈t
13、iqii_i_3_h« Wt aHW 1装”型 _曰as 3 is i: :”一_3iiiiznw:_1一m3W1福的*3T:55.1.1游戏动画5.1.2菜单界面I 口口口 口口匚J 口口口口口口口口LJJ 口口口 I0自吕H吕吕H吕吕吕H吕吕吕口5.1.3游戏界面工得分: 口评度:己u.拄制锲:T -5.1.4 辅助界面Game Over!Thaiik you for playing the snaKa game按E2c键退出按任意槌重来.一5.1.5 游戏结束界面5、2源程序代码#include<stdio、h>#include<windows 、h>#
14、include<time、h>#include<stdlib、h>#include<conio、h>void 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();/判断食物就是否与自身
15、void MakeFood();/ 制造食物void ThroWall();/ 就是否穿墙void SnakeMove();/ 蛇的移动void MoveNo(struct Body *p_body,struct Body *nofood);/没有食物时蛇的移动void MoveYes(struct Body *yesfood);/有食物时蛇的移动void DrawShank(char);/ 画蛇void EndingQ;/ 游戏结束void HiSleep(int);void snack()printf(" printf(" printf(" printf(&q
16、uot; printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf(" printf("$n");$_$_$ $n");$ $ $ $n");$ $ $ $n");
17、$_$ $ $ $n");$ $ $_$ $ $n");$ $ $ $ $_$ $ $ $ $ $n");$ $ $ $ $ $ $ $ $ $n");$ $ $ $_$ $ $ $ $ $n");$ $ $ $ $ $_$_$ $ $ $ $ $n");$ $ $ $ $ $ $ $ $ $ $n");$ $ $ $ $ $_$_$ $ $ $ $ $n");$ $ $ $_$ $ $ $ $ $n");$ $ $_$ $ $ $ $n");$ $_$ $ $n");$_$ $ $n
18、");$_$n");$按回车进入游戏n");$_$n");dddd dddQ Q Q Q Q Q Q Q Q Q.M>M>1 J,$n");printf("$_$_$n");printf(" $_$_$_$_$n");printf(" $_$n");printf(" $_$_$n");printf("$_$n");printf("$ggq) 巾巾巾$n");printf("$_$n");prin
19、tf(" $_$n");printf(" $_$n");printf("$n");printf("$_$n");printf("$n");printf("$n");system("color b");)struct Bodyshort x,y;struct Body *next;/ 指向下一个蛇身的指针);int length=sizeof(struct Body);/Body结构体所占字节数int Delay=500;short X=0,Y=0;shor
20、t food_x,food_y,food=0;short life=1;short score1=0;char movdir='R'short lockdelay=20;struct nodeint 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);/SetConsoleCur
21、sorPosition(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;vo
22、id 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 键 开始游戏"
23、;);Sleep(Delay);gotoxy(initx,inity);printf("");if(init>0&&initx>=30|initx=2&&init<0)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(" &
24、quot;);Loc(i,28);printf(" ");for(i=0;i<=28;i+)Loc(0,i);printf(" ");Loc(70,i);printf(" ");Loc(100,i);printf(" ");void GameInit() / 开始游戏时struct Body *p_cur,*p_new;/ 定义四个蛇身指针int xh;CreatMap();head=(struct Body *)malloc(length);head->x=12;head->y=2;p_cur=
25、head;p_cur->next=NULL;for(xh=0;xh<3;xh+)p_new=(struct Body *)malloc(length);p_cur->next=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(
26、80,4);puts(" 蛇会加速");Loc(78,13);puts("控制键:T - J -");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&
27、#39;&&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);pr
28、intf("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
29、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&
30、amp;&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)
31、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(&
32、amp;tmppos);if(DeadOrNoByPos(tmppos 、 x,tmppos 、 y)if(lockdelay<=0)life=0;elselockdelay-;elselockdelay=(1000/Delay)+1;if(tmppos 、 x=food_x&&tmppos 、 y=food_y)MoveYes(yesfood);elsenofood=(struct Body *)malloc(length);MoveNo(p_body,nofood);DrawShank(1);Loc(food_x,food_y);printf(" "
33、;);没有吃到食物void MoveNo(struct Body *p_body,struct Body *nofood)/nofood->x=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(&quo
34、t; ");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(Delay>200&&Delay<=500)Delay-=50;else if(Delay&g
35、t;140&&Delay<=200)Delay-=5;else if(Delay>100&&Delay<=140)Delay-=4;else if(Delay>70&&Delay<=100)Delay-=3;else if(Delay>50&&Delay<=70)Delay-=2;else if(Delay>40&&Delay<=50)Delay-=1;else if(score1<100)Delay=Delay;else if(score1<150
36、)Delay=30;else if(score1<200)Delay=20;else Delay=5;void DrawShank(char simple) /画蛇int drawcount=0;struct Body *p_body=head;while(p_body!=NULL)Loc(p_body->x,p_body->y);if(p_body=head)printf(" ");elseprintf(" ");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(" 按E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 禽类产品消费心理分析考核试卷
- 船舶改装工程技术的研究与试验发展考核试卷
- 自行车导航技术应用考核试卷
- 辽宁省葫芦岛市建昌县2025届五年级数学第二学期期末达标检测模拟试题含答案
- 山东省临沂市兰山区部分校2025届中考第七次适应性训练生物试题含解析
- 仲元中学高一下学期期中考试语文试题
- 上海对外经贸大学《中学学科教学设计数学》2023-2024学年第二学期期末试卷
- 天津市六校2024-2025学年高三高考模拟冲刺卷(提优卷)(一)历史试题含解析
- 南京医科大学康达学院《轮滑》2023-2024学年第二学期期末试卷
- 陕西省西安市交大附中达标名校2025届初三二诊模拟考试生物试题含解析
- 主动邀请患者参与医疗安全
- 2024年天津市武清区国有资产经营投资有限公司招聘笔试参考题库附带答案详解
- 社会稳定风险评估 投标方案(技术方案)
- 高档KTV装修工程施工组织设计方案
- 住院-住院证明
- 第13课《警惕可怕的狂犬病》 课件
- 高中英语高考读后续写巧用动作链专项练习(附参考答案和解析)
- 脑机接口与人工智能-第1篇
- MSOP(测量标准作业规范)测量SOP
- 小升初放弃学校分配申请书范文
- “三个代表”重要思想
评论
0/150
提交评论