




免费预览已结束,剩余21页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精选文库 院 系: 计算机科学技术学院 班 级: 组 长: 学 号: 指导教师: 2017 年 3 月 2 日 C 语言基础课程设计语言基础课程设计 贪吃蛇游戏系统贪吃蛇游戏系统贪吃蛇游戏系统贪吃蛇游戏系统 精选文库 程序设计基础课程设计任务书程序设计基础课程设计任务书 一、题目:贪吃蛇游戏系统一、题目:贪吃蛇游戏系统 二、设计要求二、设计要求 (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 月 日 精选文库 目录目录 一一. 概概 述述.1 1.1 研究的背景及意义.1 1.2 课程设计的目的.1 1.3 课程设计的要求.2 1.4 课程设计的任务和涉及的知识点.2 二需求分析二需求分析.4 2.1 功能需求.4 2.2 操作方法(键盘操作).4 三三. 总体方案设计总体方案设计.5 3.1 模块划分:.5 3.2 整体框图:.5 四四. 程序的调试与运行结果说明程序的调试与运行结果说明.6 4.1 图形初始化失败.6 4.2 其他问题.6 五详细设计五详细设计.7 5.1 主要模块界面.7 5.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 其他问题 比如全局变量重命名、函数重复声明或未声明和主函数重定义等问题。 如: 图图 1010 重定义主函数重定义主函数 mainmain 精选文库 五详细设计五详细设计 5.1 主要模块界面 5.1.1 游戏动画 5.1.2 菜单界面 5.1.3游戏界面 精选文库 5.1.4辅助界面 5.1.5游戏结束界面 5.2 源程序代码 #include #include #include #include #include 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();/判断食物是否和自身 精选文库 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+=init; initz+=init; 精选文库 if(kbhit() /有键盘输入时接受若是 13(ENTER)键结束循环 ch1=getch(); system(cls); void CreatMap()/创建外围 int i; for(i=0;iy=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) else if(GetAsyncKeyState(VK_DOWN) else if(GetAsyncKeyState(VK_LEFT) else if(GetAsyncKeyState(VK_RIGHT) 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 char DeadOrNoByPos(int x, int y)/判断生命 struct Body *p_body=head; while(p_body-next!=NULL)/定位到最后一个蛇身 if(p_body-x=x p_body=p_body-next; return 0; void JudgeFood()/判断食物是否与蛇身重叠 struct Body *p_body=head; while(p_body!=NULL) if(food_x=p_body-x 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( 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 else if(score1100)Delay=Delay; else if(score1y); if(p_body=head) printf(); else printf(); drawcount+; 精选文库 p_body=p_body-next; if(simple 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(); 精选文库 system(cls); Sleep(300); getch(); Beginning(); GameInit(); GameStart(); Ending(); while(1) if(kbhit() getch(); else break; if(getch()!=27) goto again; Loc(2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 惠州消防安全知识培训案例课件
- 情感主播课件
- 项目实施方案策划XX
- 校园平安夜活动策划方案
- 幼儿园结对帮扶方案
- 幼儿园方案教学方法
- 图书教材考试题及答案
- 天泰物业考试试题及答案
- 消化系统试题及答案
- 纺织面试题目及答案
- 山东益丰生化环保股份有限公司50000吨年高效环保助剂技改项目环境影响报告书
- 设计高效的污泥综合利用余热锅炉
- 静脉输血的考试题及答案
- 水表检定员考试题及答案
- 中医基础理论课件体质学说
- 神经重症气管切开患者气道功能康复与管理专家共识
- 培训课件医院感染暴发应急处置预案(院感科)
- 团队赋能培训
- 2025年酒店前台年度工作计划
- 2024-2025学年山东省青岛市高二上学期期中考试数学检测试卷(附解析)
- JJF(陕) 104-2023 裂隙灯显微镜校准规范
评论
0/150
提交评论