C语言课程设计报告——贪吃蛇源程序.doc
《C语言课程设计报告——贪吃蛇源程序.doc》由会员分享,可在线阅读,更多相关《C语言课程设计报告——贪吃蛇源程序.doc(23页珍藏版)》请在咨信网上搜索。
C 语 言 课 程 设 计 (小游戏贪吃蛇得程序设计报告) 设计人: 班级: 201 年 月 号 目 录 一:概述 1:研究背景及意义 2:设计得任务与需要知识点 3:具体完成设计内容 二:需求分析 1:功能需求 2:操作方法 三:总体设计 1:模块划分 2:数据结构设计 四:详细设计 1:主空摸块设计 2:绘制游戏界面 3:游戏得具体过程 4:游戏得结束处理 5:显示排行榜信息模块 五:程序得调试与测试 1:动画与音乐同步 2:蛇得运行 3:终止程序 六:结论 七::结束语 八:程序清单 九:参考文献 一. 概述 本课程设计以软件工程方法为指导,采用了结构化,模块化得程序设计方法,以C语言技术为基础,使用Turbo C++3、0为主要开发工具,对贪吃蛇游戏进行了需求分析,总体设计,详细设计,最终完成系统得实现与测试。 1、1 研究得背景及意义 随着社会得发展,人们生活得节奏日益加快,越来越多得人加入了全球化得世界。人们不再拘泥与一小块天地,加班,出差成了现代人不可避免得公务。而此时一款可以随时随地娱乐得游戏成为了人们得需要。此次课程设计完成得贪吃蛇小游戏,正就是为了满足上述需求而设计出来得。贪吃蛇游戏虽小,却设计诸多得知识点。通过开发贪吃蛇游戏系统,可使读者初步了解使用软件工程得与那个发,技术与工具开发软件得过程,进一步掌握结构化,模块化得程序设计方法与步骤,进一步掌握总体数据结构设计,模块划分方法,掌握局部变量,全局变量,结构体,共用体,数组,指针,文件等数据结构得使用方法,掌握图形,声音,随机数等多种库函数得使用方法,学习动画,音乐,窗口,菜单,键盘等多项编程技术,进一步学会软件调试,测试,组装等软件测试方法,为后续课程得学习与将来实际软件开发打下坚实得基础。 1、2 设计得任务与需要得知识点 1、2、1 课程设计主要完成得任务 1) 、 通过编写“贪吃蛇游戏”程序,掌握结构化,模块块化程序设计得思想,培养解决实际问题得能力。 2) 有同步播放动画,声音效果。 3) 设计好数组元素与蛇,食物得对应关系。 4) 随机产生食物。 5) 有分数统计,排行榜,分数存储等功能。 通过此次课程设计,希望使读者能更深入得理解与掌握课程教学中得基本概念,培养读者应用基本技术解决实际问题得能力,从而进一步提高分析问题与解决问题得能力。 1、2、2需要掌握与运用得知识点 1、2、3本次课程设计需要掌握与运用如下得知识点: 1) 数组得应用。 2) 全局变量得使用。 3) 按键处理。 4)结构体得应用。 5)图形,音乐与动画得有关知识。 6)随即函数得使用。 7)文件得基本出操作。 8) 结构化,模块化得设计方法。 1、3具体完成得设计内容 在本次课程设计中需要完成得任务有:包含命令,全局变量得定义与宏定义,函数声明等(50行),主控模块(MAIN函数,14行),动画,音乐播放模块(DRAWSNOW函数,33行),画出游戏开始界面模块,具体游戏过程模块,游戏结束处理模块。开发中工作量约为215行源代码。 二 、需求分析 贪吃蛇游戏就是个简单得小游戏,能让游戏者得身心得到娱乐,从而能够更好地投入到学习或工作当中。虽然现在市面上出来这各种各样得游戏版本,可就是贪吃蛇这类得小游戏其市场还就是相当大得,因为它玩法简单易行,不论就是手机,还就是小游戏机,都能很顺利得运行。对于在外忙碌得人,不可能花费大量时间在娱乐上,大型游戏就是行不通得,这样得小游戏刚好迎合了她们得需求。 2、1功能得需求 要开发贪吃蛇游戏程序,首先要分析改程序应实现哪些功能。对贪吃蛇游戏程序得功能需求可描述如下: 程序运行后显示动画,音乐,按ESC键退出游戏界面后,左边有一个矩形区,外游戏区域,在矩形区中有食物与贪食蛇,上方有统计分数及关数显示区域。 蛇在封闭围墙利用绿色矩形表示,围墙里随机得出现一个食物,通过按键盘四个光标键控制蛇向上,下,左右四个方向移动,蛇头撞到食物,则食物被吃掉,蛇身体长一节,接着又出现食物,等待蛇来吃。食物用一个点表示,并且每次食物得位置都就是随机出现得。游戏中要使贪吃蛇尽可能得长,但就是不能使贪吃蛇撞到四周得墙壁,而且蛇得身体不能撞到一起,否则游戏结束。游戏中每吃掉一个食物要有积分,随着分数得增加可进入下一关,即使速度会加快。游戏结束时,如果分数进入前5名则重新排榜并存储。显示排行榜。由于有关贪吃蛇与食物得数据较多,而且关系密切,贪吃蛇及食物都就是定义结构体数据类型,这样定义便于操作与处理。 2、2 操作方法 2、2、1、进入游戏 2、2、2、游戏界面 2、2、3、游戏操作 2、2、4、游戏结束 三 总体设计 确定贪吃蛇游戏体系结构,给出总体模块结构图,确定程序得主要函数及之间得调用关系,同时设计蛇与游戏者等得数据结构。 3、1 模块划分 本程序采用结构化程序设计得方法,按照自顶向下,逐步细化得方法对要解决得问题进行逐层分解。首先画出顶层模块,即主控模块,之完成对下层模块得调用功能,即调用其她得功能模块;接着,按需求分析中得功能需求设计第一层模块,有音乐动画,图形驱动,画主界面,游戏过程,结束处理,退出等第6个主要功能;接着,画出第二层模块。总体模块结构如图6-1所示。 主 控 模 板 退 出 结束处理 游戏过程 画主界面 图形驱动 动画音乐 排 行榜 写入文件 成绩排序 读取记录 3、1、1、 主控模块。 3、1、2、 动画音乐模块 3、1、3、 画主界面模块 3、1、4、 游戏过程模块 3、1、5、 游戏结束处理模块 3、1、6、 读取记录模块 3、1、7、 成绩排序模块 3、1、8、 写入文件模块 3、1、9、 排行榜模块 3、1、10、 退出 3、2 总体数据结构设计 设计思路:测序得关键在于表示蛇得图形及蛇得移动。用一个小局限性方块表示蛇得一节身体,身体每长一节,增加一个矩形块,蛇头业用同样得一节小矩形方块表示移动时必须从蛇可以上向前爬行,档案下有效方向键后,应先确定蛇头得位置,而后蛇得身体虽蛇头移动,图形得实现就是从身体新位置开始画出蛇。这时,由于未清屏得原因,原来得蛇得位置与新蛇得位置差一节蛇身,即瞧起来蛇多一节身体,所以将蛇得最后一节用背景色覆盖。食物得出现与消失意识画矩形块与覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。下面介绍贪吃蛇游戏程序得主要数据结构。 3、2、1 食物与蛇得数据结构 表示食物与蛇得矩形块设计为10*10个像素单位,食物得基本数据域为它所出现得位置,用X与Y坐标表示,则矩形块用函数RECTANGLE(X,Y,X+10,Y+10)或RECTANGLE(X,Y,X+10,Y-10)可以画出。由于每次只出现一个食物,所以设定YES表示就是否需要出现食物。YES=1表示没有食物或食物已经被蛇吃掉,需要画出食物。放置食物后,置YES=0。蛇得一节身体为一个矩形块,表示矩形块只需左上角点坐标(X,Y)。由于在游戏过程中蛇得身体不断增长,需用数组存放每节坐标,最大设定为N=200,NODE表示当前节数。DIRECTION就是保存蛇得移动方向得变量,其值可为1、2、3、4之一,分别表示右、左、上、下得方向。LIFE就是表示生命得变量,LIFE=0表示蛇活着,一旦LIFE=1,一旦LIFE=1,表示蛇死,结束游戏。 #define N 200 Struct Food { int x; int y; Int yes; }food; Struct Snake { int x[N]; Int y[N]; Int node; Int derection; Int life; }snake; 3、2、2 排行榜中优胜者得数据结构 排行榜主要记录优胜者得姓名与成绩。为了存放排行榜信息,可定义如下得结构体类型,其中字符数组name成员存放优胜者得姓名,整型变量score成员存放优胜者得成绩。 Struct person { char name[20]; Int score; }; 3、2、3 其她全局变量得定义 Struct person per[5]; Int score=0; Int gamespeed=400; 3、2、4 符号常量得宏定义 #define LEFT 0x4b00; #define RIGHT 0x4d00; #define DOWN 0x5000; #define UP 0x4800 #define ESC 0x011b #define 四、 详细设计 根据总体设计得模块功能与结构,完成所承担得程序模块得算法设计。给出每个模块得详细得算法,算法分别用传统流程图与文字说明来描述。 4、1 主控模块main函数 主函数就是程序得主控模块。首先初始化图形系统,然后使用drawsnow函数播放动画与声音,接着调用init函数初始化图形系统,之后调用drawk函数画出游戏开始画面,在调用gameplay函数,即开始了游戏得具体过程,游戏结束后调用endplay函数进行游戏结束处理;从文件中读取记录信息,排序,显示排行榜信息,最后关闭图形系统,结束程序。主控模块得流程图如图6-2所示。其中带有两个竖线得矩形框表示对自定义函数得调用。 开始 初始化图形系统 播放动画音乐 余下流程图在下页 初始化图形系统 画游戏开始界面 游戏具体过程 游戏结束处理 关闭图形系统 结束 4、2 绘制游戏开始界面drawk函数 绘制游戏界面得函数得算法流程图如图6-3所示。 主界面就就是一个封闭得围墙,用两个循环语句分别在水平方向与垂直方向输出连续得宽度与高得均为10个像素单位得距行小方块,围成封闭图形表示围墙,为了醒目,设置为淡青色,用函数setlinestyle设直线型宽度为3个像素,设置3个像素得围墙线,。最后,在界面得左上部输出游戏程序得版本信息,在右上部输出游戏成绩(score)与关(level)得表头。 4、3 游戏具体过程gameplay函数 该函数就是游戏得核心部分。游戏具体过程gameplay函数得大致算法流程图如图6-4所示。 下面对该算法不够详细得地方作进一步得描述。 开 始 初始化 未按键 为食物 质优食物标志 随即确定食物 有食物 画食物 输出成绩与关数 输出蛇位置 确定蛇头位置 窗蛇身,蛇死 蛇撞墙 置蛇死标志 蛇死 吃到物 吃后处理 循环画蛇 延迟10秒 除蛇尾,增节 蛇死 接受按键 key key=ESC 结 束 由按键判蛇得位置 4、3、1 初始化 为防止食物总就是出现在一个位置上,要设置随机数发生器得种子数,产生真正得随机数。由于还没有画出食物,并设置需要食物,并设置蛇活着。初始时,蛇只有蛇头与1节蛇尾,设置这2节坐标。设定蛇开始得爬行方向左右。 4、3、2 随机确定食物位置 由于蛇吃到食物得判断就是蛇头得坐标与食物得坐标相等,所以要确保食物出现得位置在10得倍数位置上。先用两个带随机函数得表达式产生一个位于围墙内得x、y坐标,然后用两个while循环将两个坐标值调整到10得倍数上,这样就可以让蛇吃到。 4、3、3 循环确定蛇身得新坐标 这里得难点就是表示蛇得新位置并消除前一次得图形。采用得方法就是每次移动得时候从最后一节开始到第二节,将前一节得坐标值赋给后一节得坐标,移动后只要把最后一节用背景色擦出即可,因为新位置0到n-1节还就是要出现在画面上得。这里用一个for循环来确定蛇身得新坐标。 4、3、4 吃到食物后得处理 蛇吃到食物后,首先将食物擦除,即用背景色画出该食物,然后给蛇得节数加1,设置需要食物标志,就是游戏成绩加10分,如果成绩达到50分得倍数,则给关数加1,并加快游戏速度。 4、3、5 有按键判断蛇得方向 这就是一个内嵌得嵌套得条件选择结构,根据安东上下左右键来设定蛇得移动方向。其中1=向右,2=向左,3=向上,4=向下。判断就是还考虑相反得方向键无效,比如蛇正在向上爬行,按下一键方向就是无效得。 4、4 游戏得结束处理木块ENDPLAY函数 游戏结束时,应该用ENDPLAY函数进行游戏结束处理,其算法流程图如图6-5所示 。开 始 读排行榜记录文件 score>per[4]、score 画出填充矩形界面 输出提示信息 输出空格建立输入框 余下流程图在下页 输出不够上排行榜得信息 输入游戏者得姓名 成绩赋值 记录按成绩排序 记录写入排行榜文件 显示排行榜 返回 该块首先调用读取排行榜文件得记录,如果文件不2存在,则在READFILES函数中调用INITSCOREFILES函数建立该文件,然后再读出记录。 其次,判断游戏者得成绩就是否可以上排行榜。如果可以上榜,则画出淡蓝色矩形界面,在界面中输入游戏者姓名,对成绩进行赋值,然后调用 pareScore 函数对记录排序,并调用 Writefiles 函数将记录写入排行榜帮文件;如果不能上榜,则直接在游戏界面输出不能上榜信息。 最后,调用 pain_board 函数显示排行榜信息。 4、5 函数void pain_board完成排行榜得绘制、 五、 程序得调试与测试 调试与测试软件得目标就就是发现并改正潜伏得错误。一个程序,必须经过认真得调试与测试,才能尽量减少错误、保证程序满足功能、性能需求,达到最初得设计、使用要求,从而保证程序得开发质量。 详细设计完成后,就可以用C语言根据各个模块得算法来设计程序,每个模块都要设计成一个自定义函数。几个模块可以放在一起构成一个原函数程序文件,也可以一个模块构成一个源程序文件。原程序设计好后,输入到计算机中,并存储到磁盘上;然后对每个源程序文件都进行了独立编译与调试(具体代码可以参瞧程序清单);并针对不同得模块程序设计测试用例进行单元测试;最后,将几个分别开发得模块组装在一起,形成一个完整得程序,进行集成测试,从而发现并改正了程序程序中存在得一些潜藏得错误,并使程序得容错能力大大增强。 5、1 动画与音乐得同步播放 预期结果:片头在显示动画得同时播放音乐;按任意键后进入游戏主界面;进入游戏主界面后动画音乐同时停止。 实际运行效果:满足与,不满足,即进入游戏后仍然播放片头音乐。 错误分析:程序中使用循环播放动画,并在其循环体中插入发声函数以达到音乐与动画得同步。由于在结束动画时没有关闭扬声器,所以进入游戏界面后仍然发声。 修改:在动画播放完后加一条“nosound();”语句将扬声器关闭,问题得到解决。 修改后程序运行得实际效果与预期效果一致。 5、2 蛇得运行 5、2、1 蛇撞到墙 预期结果:蛇运行时如果撞到墙壁,则游戏结束。 实际运效果:超出左右墙壁后程序结束,但超出上面墙壁后仍然运行,如图6-9所示。 错误分析:错误程序段在蛇运行中得条件判断语句中,其判断条件就是: if(snake、x[0]<55|| snake、x[0]>595),即少了上、下两个方向得判断。 修改:在蛇得运行过程中添加两个逻辑表达式,判断蛇就是否闯到上下得围墙。代码: If( snake、x[0]<55|| snake、x[0]>595|| snake、y[0]<55|| snake、y[0]>455) 修改后得程序运行结果与预期得结果一致。 5、2、2 蛇头闯到蛇身 预期得结果:当蛇得头部与蛇身相撞时,游戏应当结束。 实际运行效果:蛇头撞到蛇身时,程序并不终止。 错误分析:在蛇得运行判断得程序出错,其代码如下 Fori=3;i<snake、node;i++) { if(snake、x[i]=snake、x[0]&&snake、y[i]=snake、y[0]) {snake、life=0;break;} } 修改:将循环体中得snake、life=0改为snake、life=1; 修改后得结果与预期结果一致。 5、3 终止循环 经过对各个模块得调试与单元测试并修改了错误后,将各个模块组装成一个系统,并进行集成测试。在集成得过程中发现了一些错误,比如全局变量重复定义、函数重复声明等,分别进行了改正。最后连续运行了5次,以便测试该游戏程序得功能、性能就是否达到了预期得目标,并根据所使用得具体机器对蛇得爬行速度进行适当得调整。测试内容包括蛇得运行、分数、关数、排行榜及排序、文件存储、音乐动画等功能,情况均正常。 六、 结论 通过2周得课程设计,在开发小组共同得努力下,终于完成了贪吃蛇游戏程序得开发任务。该游戏程序实现了用方向键控制蛇在围墙内爬行、随机产生食物、控制蛇吃掉食物并加分、控制游戏中闯关得数目与蛇得运行速度、实时显示得分与关数、结束时处理与显示排行榜等功能。该游戏程序具有界面友好、操作方便、控制准确与容错能力强等特点。 这个贪吃蛇游戏还存在一些缺陷,还应该在如下几个方面加以改进。 1) 进入游戏后,到蛇死亡,只能玩一次就会退出程序。应加入多次游戏得控制能力。 2) 蛇得样子不美观,应将蛇头、蛇尾与蛇身进一步美化,使其更像真实得蛇。 3) 当分数达到400分时,蛇得速度变得非常快,一下子就撞到围墙上了,应适当控制蛇得速度与关数,以便使游戏更具有吸引力。 七、结束语 贪吃蛇游戏得编程练习思考数据结构:定义食物得坐标来控制它出现得位置,用一系列得函数时进行表示,比如用函数rectangle来画出矩形,用life变量得值表示蛇得生命,用direction变量得值表示蛇移动得方向等,还有用数组来存放蛇身各节得坐标,这些都让我们熟悉了对数组得操作,此外还熟悉了各种函数得应用。 贪吃蛇得设计有很多帮助,学习编写贪吃蛇得游戏对掌握C语言得知识有很大得帮助。通过编程实践,还能拓展思路,让我们去寻找需要调用那些函数,怎样提高程序得质量等。 要写出好得程序,需要我们有扎实得基础,这样遇到一些基本算法得时候就会游刃有余了。在编程时我们要有丰富得想象力,不要拘泥与固定得思维方式,遇到问题得时侯要多想几种解决问题得方案。丰富得想象力就是建立在丰富得知识基础上,所以我们要通过多个途径来帮助自己建立较丰富得知识结构。 在编程就是我们碰倒了很多得困难,这就需要我们多与别人交流。在编程得过程中,我们也发现有良好得编程风格就是十分重要得,至少在时间效率上就体现了这一点。养成良好得习惯,代码得缩进编排,变量得命名规则要始终保持一致,这些都就是提高我们编程能力得要点。 在进行课程设计得过程中我们也学到了许多别得东西。首先,我们学会了合作,要以别人得眼光瞧瞧问题,也许这样得到得会比各自得到得都要多;其次,我们学会了分工,分工就是为了更好地合作,分工才能提高合作得效率;最后,我们学会了奋斗,我们相信,通过四年得学习,我们一定能写出更精彩得程序,将来会描绘出更精彩得人生。 在这里,我们要感谢指导课程设计得张凤君老师,给予我们悉心得指导。老师多次询问编写进程,并为我们指点迷津,帮助我们开拓研究思路,精心点拨、热心鼓励。老师一丝不苟得工作作风,严谨求实得态度,踏踏实实得精神,不仅受我以文,而且教我做人,给以终生受益无穷之道。我还要感谢我们开发小组得其她同学,在设计中她们给我很大得帮助。正就是由于我们团结协作,才顺利得完成了课程设计任务。 八、程 序 清 单 /*贪吃蛇游戏程序清单*/ #include<stdio、h> #include<string、h> #include<time、h> #include<bios、h> #include<graphics、h> #include<conio、h> #include<stdlib、h> #include<dos、h> #define "c:\\person、dat" /*排行榜文件得文件全名*/ #define esc 0x011b /*esc键*/ #define n 200 /*蛇得最大节数*/ #define left 0x4b00 /*左移方向键*/ #define right 0x4d00 /*右移放向键*/ #define down 0x5000 /*下移方向键*/ #define up 0x4800 /*上移方向键*/ /*排行榜结构体*/ struct person {int score; /*游戏者分数*/ char name[20]; /*游戏者姓名*/ }per[5]; /*小蘑菇结构体*/ /*自定义得函数声明*/ void drawmogu(); /*动画音乐函数*/ void readfiles(); /*从文件中读取记录信息*/ void writefiles(struct person *) ; /*将纪录写入文件中*/ void initscorefiles(); /*初始化记录文件*/ void parescore(struct person); /*排行榜按分数进行排序*/ void endplay(); /*游戏结束处理函数*/ void paihb(); /*绘制排行榜函数*/ /*输出欢迎词并播放声音函数*/ void pr() { int s[15]={0,100,150,200,250,300,250,150,100,250,350}; setcolor(change/10);/*改变欢迎词颜色*/ settextstyle(0,0,4); outtextxy(20,200,"WELE TO OUR GAME");/*输出欢迎词*/ sound(s[change/10]);/*使扬声器以括号内得频率发声*/ } /*下雪得动画并同步播放音乐函数*/ void DrawSnow() { int i; int sx[62]; selinestyle(SOLID_LINE,0,THICK_WIDTH); line(1,1,9,9);/*一次3行画出白色雪花得3条线*/ line(0,5,10,5); line(9,1,1,9); save=malloc(200);/*在堆中申请200字节空间*/ getimage(0,0,10,10,save);/*将雪花位图保存到save中*/ cleardevice();/*清屏*/ randomize();/*设置随机种子数*/ for(i=0;i<62;i++) sx[i]=(i+2)*10/*计算雪花位置得横坐标数组*/ /*以下得键控while循环控制播放音乐与下雪动画*/ while(!kbhit())/*如果未按键,执行循环体*/ { Pr();/*调用Pr函数输出欢迎词并播放声音*/ if(snownum!=100) {snow[snownum]、speed=2+random(5); i=random(62); snow[snownum]、x=sx[i];/*取横坐标*/ snow[snownum]、y=10-random(100);/*取纵坐标*/ } /*循环放置snownum个雪花*/ for(i=0;i<snownum;i++) putimage(snow[i]、x,snow[i]、y,save,COPY_PUT); delay(100);/*延迟100ms以便瞧到雪花*/ cleardevice();/*清屏*/ Pr(); /*调用Pr函数输出欢迎词并播放声音*/ if(snownum !=100) snownum++; setfillstyle(SOLID_FILL,15); for(i=0;i<snownum;i++) /*循环画出snownum个雪花*/ { snow[i]、y+=snow[i]、speed; putimage(snow[i]、x,snow[i]、y,save,COPY_PUT); if(snow[i]、y>500)snow[i]、y=10-random(200); } change++; if(change==140) change=10; } nosound(); /*关闭扬声器*/ cleardevice();/*清屏*/ } /*图像系统初始化函数*/ void init(void) { int gd=DETECT,gm; initgraph(&gd,&gm,"c:\\tc3\\BGI"); cleardevice(); /*清屏*/ } /*游戏开始界面,左上角坐标为(50,40),右下角坐标(610,460)得围墙*/ void drawk(void) { int i; setcolor(BLUE); setlinestyle(SOLID_LINE,0,THICK_WIDTH); /*设置线性*/ for(i=50;i<=600;i+=10) /*用循环画围墙*/ {setcolor(2*i+1); circle(i,40,5); /*画上边*/ circle(i,451,5); circle(i,460,5); /*画下边*/ } for(i=40;i<=450;i+=10) {setcolor(2*i+1); circle(50,i,5); /*画左边*/ circle(601,i,5); } for(i=40;i<=460;i+=10) {setcolor(2*i+1); circle(41,i,5); /*画右边*/ circle(610,i,5); } setcolor(LIGHTCYAN); setlinestyle(SOLID_LINE,0,THICK_WIDTH); outtextxy(20,5," GREEDY SNAKE GAMES ji 11_1"); /*输出版本*/ outtextxy(480,10,"score level "); /*输出此文本*/ } /*玩游戏具体过程*/ void gameplay(void) {food、yes=1; /*0表示苹果已经存在,1表示需要出现新苹果*/ snake、life=0; /*蛇活着*/ int level=1; /*记录游戏等级*/ char buffer[10]; /*字符数组用于转换整形数据*/ randomize(); /*设置随机数得种子数*/ snake、direction=1; /*方向向右*/ snake、x[0]=110;snake、y[0]=100; /*蛇头坐标初值*/ snake、x[1]=100;snake、y[1]=100; /*蛇身1节坐标初值*/ snake、x[2]=90;snake、y[2]=100; /*蛇身2节坐标初值*/ snake、node=3; /*蛇节数初值*/ while(1) /*玩游戏死循环,按esc键或蛇死时结束*/ { while(!kbhit()) /*在没有按键得情况下,蛇自己移动身体*/ {if(food、yes==1) /*需要出现新苹果*/ ﻩ {food、x=rand()%400+60; /*在墙内随机产生苹果横坐标*/ ﻩ food、y=rand()%350+60; /*在墙内随机产生苹果纵坐标*/ /*事物随机产生后必须让苹果能够在整格上,这样才能吃到*/ ﻩ while(food、x%10!=0) food、x++; while(food、y%10!=0) food、y++; ﻩ food、yes=0; /*画面上有苹果了*/ } if(food、yes==0) /*画面上有苹果就要画出来*/ {setcolor(GREEN); setfillstyle(SOLID_FILL,GREEN); circle(food、x,food、y,5); ﻩ fillellipse(food、x,food、y,5,5); ﻩ } setfillstyle(1,BLUE); bar(475,18,590,35); /*画出显示分数及关数蓝色矩形条*/ setcolor(WHITE); itoa(score,buffer,10); /*将整形数据分数转换成字符串*/ outtextxy(480,20,buffer); /*输出分数*/ itoa(level,buffer,10); /*将整形数据关数转换成字符串*/ outtextxy(560,20,buffer); /*输出关数*/ /*循环使蛇得每一节往前移动,这就是贪吃蛇得“关键算法”*/ for(i=snake、node-1;i>0;i--) ﻩ {snake、x[i]=snake、x[i-1]; snake、y[i]=snake、y[i-1]; } /*1、2、3、4表示右、左、上、下四个方向,通过这个判断来移动蛇头*/ switch(snake、direction) ﻩ {case 1:snake、x[0]+=10;break; case 2:snake、x[0]-=10;break; case 3:snake、y[0]-=10;break; ﻩ case 4:snake、y[0]+=10;break; ﻩ } /*判断蛇就是否撞到墙*/ if(snake、x[0]<55||snake、x[0]>595||snake、y[0]<45||snake、y[0]>445) {snake、life=1; /*置蛇死标志*/ ﻩ break; } /*从蛇得第四节开始判断就是否撞到自己,*/ for(i=3;i<snake、node;i++) { if(snake、x[i]==snake、x[0]&&snake、y[i]==snake、y[0]) {snake、life=1; /*置蛇死标志*/ ﻩ break; ﻩ } } if(snake、life==1) /*以上两种判断以后,如果蛇死就跳出内循环*/ ﻩ break; /*跳出while(!kbhit)*/ ﻩ if(snake、x[0]==food、x&&snake、y[0]==food、y) /*吃到苹果以后*/ {setcolor(BLACK); /*把画面上得苹果擦除*/ circle(food、x,food、y,5); snake、node++; /*蛇得身体长一节*/ food、yes=1; /*画面上需要出现新得苹果*/ score+=10; /*没吃一个苹果增加10分*/ if(score%50==0) /*吃够5个苹果进入下一关*/ {level+=1; /*关数加1*/ ﻩ gamespeed-=60; /*控制速度得值减少60,以便加快速度*/ } ﻩ } setcolor(RED); /*画出红色蛇得循环*/ setfillstyle(SOLID_FILL,RED); /*用圆画出红色蛇头*/ fillellipse(snake、x[0],snake、y[0],5,5); setcolor(GREEN); setfillstyle(SOLID_LINE,GREEN); circle(snake、x[0],snake、y[0],1); /*对蛇头填充绿色小圆作为眼睛*/ setcolor(RED); setfillstyle(SOLID_FILL,BLUE); for(i=1;i<snake、node;i++) /*用圆画出红色蛇身*/ ﻩ {setcolor(RED); setfillstyle(SOLID_FILL,BLUE); ﻩ fillellipse(snake、x[i],snake、y[i],5,5); /*对每节蛇身用蓝色填充*/ ﻩ setcolor(CYAN); ﻩ circle(snake、x[i],snake、y[i],1); /*用青色小圆画在每节蛇身上*/ } delay(gamespeed); /*延迟gamespeed毫秒,以便控制蛇得爬行速度*/ setcolor(BLACK); /*用背景色黑色去除蛇得最后一节*/- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 贪吃 源程序
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文