C语言课程设计报告——贪吃蛇源程序之欧阳家百创编

合集下载

原创c语言贪吃蛇课程设计报告

原创c语言贪吃蛇课程设计报告

原创C语言贪吃蛇课程设计报告1. 引言贪吃蛇游戏是一款经典的电子游戏,它可以帮助玩家提高反应能力和思维敏捷性。

本文档旨在介绍一个基于C语言的贪吃蛇课程设计项目。

通过这个项目,我们可以学习C语言的基本语法、算法和程序设计方法。

2. 项目概述2.1 项目背景贪吃蛇游戏是一款非常受欢迎的经典游戏,现在几乎在所有平台都有相应的版本。

它的原理很简单:玩家控制一条蛇在屏幕上移动,蛇吃掉食物后身体长度增加,游戏结束条件为蛇撞到屏幕边缘或自己的身体。

通过这个项目的设计与实现,我们可以提高自己的编程能力,并加深对C语言的理解。

2.2 项目目标本项目的目标是设计并实现一个具有基本功能的贪吃蛇游戏。

主要功能包括:•蛇的移动控制:玩家可以通过键盘控制蛇的移动方向。

•食物的生成:在屏幕上随机生成食物,蛇吃掉食物后身体长度增加。

•碰撞检测:判断蛇是否撞到屏幕边缘或自己的身体,游戏在此情况下结束。

•分数统计:记录玩家的得分,并在游戏结束时显示最终得分。

3. 设计思路3.1 游戏界面设计游戏界面需要在控制台中实现,使用C语言的标准输入输出函数可以很方便地实现界面的绘制和更新。

我们可以使用二维数组来表示屏幕,每个元素代表一个方格,蛇和食物在屏幕上的位置可以通过修改二维数组的值来实现。

3.2 蛇的移动控制蛇的移动控制是游戏的核心功能之一。

我们可以使用一个链表数据结构来表示蛇的身体,每个节点代表一个蛇的身体节。

通过不断更新链表节点的位置,实现蛇的移动。

玩家可以通过键盘输入来控制蛇的移动方向。

3.3 食物的生成食物的生成是游戏的另一个重要功能。

我们可以随机生成一个二维数组的坐标,在该坐标上放置食物。

在蛇吃掉食物后,就可以在链表的末尾添加一个新的节点,使蛇的长度增加。

3.4 碰撞检测碰撞检测是判断蛇是否与屏幕边缘或自身的身体相撞的过程。

我们需要判断蛇的头节点是否与屏幕边缘或其他身体节点的位置重叠,如果重叠则游戏结束。

3.5 分数统计分数统计是记录玩家得分的功能。

c语言贪吃蛇课程设计报告

c语言贪吃蛇课程设计报告

C语言贪吃蛇课程设计报告摘要本报告介绍了一个基于C语言的贪吃蛇游戏的课程设计项目。

报告首先介绍了贪吃蛇游戏的背景和目标,然后详细说明了设计和实现过程中使用的数据结构、算法和关键技术。

最后,报告讨论了项目的测试结果和改进思路。

1. 引言贪吃蛇是一款经典的电子游戏,它的目标是控制一条蛇在有限空间内移动,吃掉食物并尽可能长大。

贪吃蛇游戏不仅有趣,而且对于初学者来说是一个很好的训练编程技巧的项目。

因此,在本课程设计中选择了贪吃蛇游戏作为项目的主题。

2. 设计目标本课程设计项目的主要目标是设计并实现一个使用C语言开发的贪吃蛇游戏。

具体目标包括: - 实现一个可用键盘控制的贪吃蛇游戏界面; - 设计合适的数据结构来表示贪吃蛇的状态; - 实现贪吃蛇的移动、吃食物、增长等基本功能; - 设计和实现合适的算法来检测和处理蛇与边界、蛇与自身以及蛇与食物的碰撞。

3. 设计与实现为了实现贪吃蛇游戏,我们使用了C语言作为开发语言,并采用了以下关键技术和数据结构:3.1 数据结构为了表示贪吃蛇的状态,我们设计了以下数据结构: - Point结构体用于表示二维坐标点,包括x和y坐标; - SnakeNode结构体用于表示贪吃蛇的每个节点,包括一个Point和指向下一个节点的指针; - Snake结构体用于表示整条贪吃蛇,包括一个指向头节点的指针和当前蛇的长度。

3.2 算法和关键技术为了实现贪吃蛇的移动、吃食物、碰撞等功能,我们采用了以下算法和关键技术: - 使用循环链表数据结构来表示贪吃蛇,使得贪吃蛇的移动和增长操作更高效;- 使用键盘输入来控制贪吃蛇的移动方向; - 使用随机数生成食物的位置; - 使用递归算法检测贪吃蛇与边界、自身以及食物之间的碰撞。

4. 测试与结果分析为了测试贪吃蛇游戏的功能和性能,我们设计了多个测试用例并进行了测试。

测试的结果表明我们的游戏实现了预期的功能,并且在性能方面表现良好。

然而,我们也发现了一些问题和改进的空间: - 贪吃蛇的移动速度过快,导致游戏难度较高; - 游戏界面设计简单,缺乏可玩性。

C语言课程设计报告——贪吃蛇源程序

C语言课程设计报告——贪吃蛇源程序

C 语止课程安排之阳早格格创做(小游戏贪吃蛇的步调安排报告)安排人:班级:201年月号目录一:概括1:钻研背景及意思2:安排的任务与需要知识面3:简曲完毕安排真量二:需要领会1:功能需要2:支配要领三:总体安排1:模块区分2:数据结构安排四:仔细安排1:主空摸块安排2:画造游戏界里3:游戏的简曲历程4:游戏的中断处理5:隐现排止榜疑息模块五:步调的调试与尝试1:动画与音乐共步2:蛇的运止3:末止步调六:论断七::中断语八:步调浑单九:参照文献一.概括本课程安排以硬件工程要领为指挥,采与了结构化,模块化的步调安排要领,以C谈话技能为前提,使用TurboC++3.0为主要启垦工具,对付贪吃蛇游戏举止了需要领会,总体安排,仔细安排,最后完毕系统的真止与尝试.1.1 钻研的背景及意思随着社会的死少,人们死计的节奏日益加快,越去越多的人加进了寰球化的天下.人们不再拘泥与一小块天天,加班,出好成了新颖人不可预防的公务.而此时一款不妨随时随天娱乐的游戏成为了人们的需要.此次课程安排完毕的贪吃蛇小游戏,正是为了谦脚上述需要而安排出去的.贪吃蛇游戏虽小,却安排诸多的知识面.通过启垦贪吃蛇游戏系统,可使读者收端相识使用硬件工程的战那个收,技能战工具启垦硬件的历程,进一步掌握结构化,模块化的步调安排要领战步调,进一步掌握总体数据结构安排,模块区分要领,掌握局部变量,齐部变量,结构体,共用体,数组,指针,文献等数据结构的使用要领,掌握图形,声音,随机数等多种库函数的使用要领,教习动画,音乐,窗心,菜单,键盘等多项编程技能,进一步教会硬件调试,尝试,组拆等硬件尝试要领,为后绝课程的教习战将去本量硬件启垦挨下脆真的前提.1.2 安排的任务战需要的知识面1.2.1 课程安排主要完毕的任务1).通过编写“贪吃蛇游戏”步调,掌握结构化,模块块化步调安排的思维,培植办理本量问题的本领.2) 有共步播搁动画,声音效验.3) 安排佳数组元素与蛇,食物的对付应关系.4) 随机爆收食物.5) 有分数统计,排止榜,分数保存等功能.通过此次课程安排,期视使读者能更深进的明黑战掌握课程教教中的基础观念,培植读者应用基础技能办理本量问题的本领,进而进一步普及领会问题妥协决问题的本领.1.2.3本次课程安排需要掌握战使用如下的知识面:1) 数组的应用.2) 齐部变量的使用.3) 按键处理.4)结构体的应用.5)图形,音乐战动画的有关知识.6)随即函数的使用.7)文献的基础出支配.8) 结构化,模块化的安排要领.正在本次课程安排中需要完毕的任务有:包罗下令,齐部变量的定义战宏定义,函数声明等(50止),主控模块(MAIN函数,14止),动画,音乐播搁模块(DRAWSNOW函数,33止),画出游戏启初界里模块,简曲游戏历程模块,游戏中断处理模块.启垦中处事量约为215止源代码.二 .需要领会贪吃蛇游戏是个简朴的小游戏,能让游戏者的身心得到娱乐,进而不妨更佳天加进到教习或者处事核心.虽然目前市里上出去那百般百般的游戏版本,但是贪吃蛇那类的小游戏其商场仍旧相称大的,果为它玩法简朴易止,不管是脚机,仍旧小游戏机,皆能很成功的运止.对付于正在中闲碌的人,不可能耗费洪量时间正在娱乐上,庞大游戏是止短亨的,那样的小游戏刚刚佳迎合了他们的需要.要启垦贪吃蛇游戏步调,最先要领会改步调应真止哪些功能.对付贪吃蛇游戏步调的功能需要可形貌如下:步调运止后隐现动画,音乐,按ESC 键退出游戏界里后,左边有一个矩形区,中游戏天区,正在矩形区中有食物战贪食蛇,上圆有统计分数及关数隐现天区.蛇正在启关围墙利用绿色矩形表示,围墙里随机的出现一个食物,通过按键盘四个光标键统造蛇进与,下,安排四个目标移动,蛇头碰到食物,则食物被吃掉,蛇身体少一节,接着又出现食物,等待蛇去吃.食物用一个面表示,而且屡屡食物的位子皆是随机出现的.游戏中要使贪吃蛇尽大概的少,然而是不克不迭使贪吃蛇碰到四里的墙壁,而且蛇的身体不克不迭碰到所有,可则游戏中断.游戏中每吃掉一个食物要有积分,随着分数的减少可加进下一关,纵然速度会加快.游戏中断时,如果分数加进前5名则沉新排榜并保存.隐现排止榜.由于有关贪吃蛇战食物的数据较多,而且关系稀切,贪吃蛇及食物皆是定义结构体数据典型,那样定义便于支配与处理.2.2 支配要领三 总体安排决定贪吃蛇游戏体捆绑构,给出总体模块结构图,决定步调的主要函数及之间的调用关系,共时安排蛇与游戏者等的数据结构.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 200Struct 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 FILENAME四. 仔细安排根据总体安排的模块功能战结构,完毕所负担的步调模块的算法安排.给出每个模块的仔细的算法,算法分别用保守过程图战笔墨证明去形貌.4.1 主控模块main函数主函数是步调的主控模块.最先初初化图形系统,而后使用drawsnow函数播搁动画战声音,接着调用init函数初初化图形系统,之后调用drawk函数画出游戏启初画里,正在调用g ameplay函数,即启初了游戏的简曲历程,游戏中断后调用endplay函数举止游戏中断处理;从文献中读与记录疑息,排序,隐现排止榜疑息,末尾关关图形系统,中断步调.主控模块的过程图如图6-2所示.其中戴有二个横线的矩形框表示对付自定义函数的调用.4.2函数主界里便是一个启关的围墙,用二个循环语句分别正在火仄目标战笔曲目标输出连绝的宽度战下的均为10个像素单位的距止小圆块,围成启关图形表示围墙,为了醉目,树坐为浓青色,用函数setlinestyle设曲线型宽度为3个像素,树坐3个像素的围墙线,.末尾,正在界里的左上部输出游戏步调的版本疑息,正在左上部输出游戏结果(score)战关(level)的表头.4.3 游戏简曲历程gameplay函数该函数是游戏的核心部分.游戏简曲历程gameplay函数的大概算法过程图如图6-4所示.余下过程图正在下页4.3.1那24.3.21 0个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所示I 其次,推断游戏者的结果是可不妨上排止榜.如果不妨上榜,则画出浓蓝色矩形界里,正在界里中输进游戏者姓名,对付结果举止赋值,而后调用CompareScore 函数对付记录排序,并调用Writefiles 函数将记录写进排止榜助文献;如果不克不迭上榜,则间接正在游戏界里输出不克不迭上榜疑息.末尾,调用 pain_board 函数隐现排止榜疑息.函数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 filename "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 comparescore(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,"WELCOME 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); /*用背景致乌色去除蛇的末尾一节*/circle(snake.x[snake.node-1],snake.y[snake.node-1],5) ;setfillstyle(SOLID_FILL,BLACK);fillellipse(snake.x[snake.node-1],snake.y[snake.node-1],5,5);}if(snake.life==1) break; /*如果蛇死便跳出循环*/key=bioskey(0); /*接支按键*/if(key==esc) break; /*按esc键退出*//*推断是可往好异的目标疏通*/else if(key==up&&snake.direction!=4)snake.direction=3;else if(key==right&&snake.direction!=2)snake.direction=1;else if(key==left&&snake.direction!=1)snake.direction=2;else if(key==down&&snake.direction!=3)snake.direction=4;} /*endwhile(1)*/} /*中断游戏*//*读与文献支配函数*/void readfiles(){FILE * fpread;/*如果文献不存留,则创造1个空文献,可则挨启该文献*/if((fpread=fopen(filename,"ab+"))==NULL){printf("cant't open the file person.dat! ");exit(0);}if(fgetc(fpread)==EOF) /*如果文献真量为空*/initscorefiles(); /*调用函数举止记录初初化处事*/rewind(fpread); /*沉新复位文献位子指针*/fread(per,sizeof(struct person),5,fpread);fclose(fpread); /*关关排止榜文献*/}/*写进文献支配函数*/void writefiles(struct person *tmp){FILE * fpwrite;/*以读写办法挨启文献,文献内本有的数据将被浑空*/if((fpwrite=fopen(filename,"wb+"))==NULL){printf("cant't open the file person.dat! ");exit(0);}fwrite(tmp,sizeof(struct person),5,fpwrite);fclose(fpwrite);}/*初初化记录函数*/void initscorefiles(){int i;struct person a[5];for(i=0;i<5;i++){a[i].score=0; /*5人的分数为0*/strcpy(a[i].name,"nobody"); /*5人的名为nobody*/}writefiles(a); /*调用记录写进函数*/}/*排序函数,如果玩家分数超出最矮记录,则将玩家分数拔出到符合的位子,共时简略本先的最矮记录 */void comparescore(struct person des)。

C语言课程设计报告(贪吃蛇)

C语言课程设计报告(贪吃蛇)

C语言课程设计报告(项目:贪吃蛇)学号:姓名:课程设计题目:贪吃蛇游戏专业班级:核工程与核技术4班报告人姓名:学号:同组组长:同组其他成员:课程教师:实验地点:95101实验室完成起止日期:2011年3月7日至2011年3 月15日一、课程设计概述(目的、任务、开发环境、参考资料)课程目的:1.熟悉二维数组的应用2.图形库文件中图形函数的使用3.通过游戏程序增加编程兴趣,提高编程水平课程任务:1.数组元素为结构体的数组应用2.全局变量应用3.按键处理4.数组元素与蛇食物对应关系5.图形方式开发环境:turbo C参考资料:《C语言课程设计案例精编》郭翠英等编著中国水利水电出版社二、项目的可行性研究项目流程图三、项目设计的基本原理和采用的主要方法与技术1.项目流程图2.graphics.h库函数中的矩形函数rectangle()等图形函数的应用3.二维数组的应用4.按键控制5.全局变量四、本人实现项目的过程与步骤1.画出项目流程图(如上图)2.写出主函数的整个运行过程3.整理函数运行过程中所需要的函数及定义如:(1).矩形图形函数rectangle()(2).定义蛇和实物的二维数组结构体struct Snake{int x[N]; int y[N]; int node; int direction;int life;}snake;(3).按键定义#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b4.定义各函数,分配功能void Init(void);图形驱动void Close(void);图形结束void DrawK(void);开始画面void GameOver(void);游戏结束void GamePlay(void);游戏过程void PrScore(void);输出成绩5.各函数的编辑开始画面函数(画围墙)游戏过程函数(蛇移动的算法蛇吃食物的算法按键算法等)游戏结束及成绩输出函数6.定义与各函数的整合嵌入7.编译调试8.对程序的扩展功能的调整9.完成实验报告五、个人遇到的困难与获得的主要成果(一)遇到的主要主要困难1.程序结构的理解由于长时间对C语言与数据结构没有接触,使我们对这些有一些相对陌生,主要是二维数组的引用以及循环的控制方面,如:(1) for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}(2)for(i=3;i<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/ {if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) {GameOver();/*显示失败*/snake.life=1;break;}}2.graphics.h图形库函数的陌生第一次接触graphics.h库函数,对其一无所知通过查阅资料找到graphics.h库函数中几个关键函数的功能及用法。

c语言贪吃蛇课程设计

c语言贪吃蛇课程设计

c语言贪吃蛇课程设计一、教学目标本课程旨在通过学习C语言实现贪吃蛇游戏,让学生掌握C语言编程的基本技能,培养学生的逻辑思维能力和问题解决能力。

具体的教学目标如下:1.理解C语言的基本语法和数据类型。

2.掌握C语言的运算符和表达式。

3.学习C语言的控制结构,包括条件语句和循环语句。

4.了解C语言的函数和数组。

5.能够使用C语言编写简单的程序。

6.能够使用C语言实现贪吃蛇游戏的基本功能,包括蛇的移动、食物的生成和 collision检测。

7.能够优化代码,提高游戏的性能和可读性。

情感态度价值观目标:1.培养学生的团队合作意识和沟通能力,通过小组合作完成游戏项目。

2.培养学生的创新思维和问题解决能力,鼓励学生进行游戏的创意设计和优化。

3.培养学生的学习兴趣和自信心,通过完成游戏项目感受到编程的乐趣和成就感。

二、教学内容根据课程目标,本课程的教学内容主要包括C语言的基本语法和数据类型、运算符和表达式、控制结构、函数和数组。

具体的教学大纲如下:1.第一章:C语言概述•C语言的发展历史和特点•C语言的基本语法和结构2.第二章:数据类型和运算符•基本数据类型和变量•运算符和表达式3.第三章:控制结构4.第四章:函数和数组•函数的定义和调用•一维数组和多维数组5.第五章:贪吃蛇游戏实现•蛇的移动和食物的生成•collision检测和游戏结束条件•游戏界面的设计和美化三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法。

1.讲授法:通过教师的讲解和演示,向学生传授C语言的基本语法和编程技巧。

2.讨论法:通过小组讨论和分享,培养学生的团队合作意识和沟通能力。

3.案例分析法:通过分析具体的贪吃蛇游戏案例,引导学生思考和解决问题。

4.实验法:通过编写代码和调试程序,培养学生的动手能力和问题解决能力。

四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:《C语言程序设计》2.参考书:《C语言编程实例解析》3.多媒体资料:PPT课件、视频教程4.实验设备:计算机、编程环境(如Visual Studio、Code::Blocks等)通过以上教学资源的使用,将丰富学生的学习体验,提高学生的学习效果。

贪吃蛇c语言课程设计

贪吃蛇c语言课程设计

贪吃蛇c语言课程设计一、课程目标知识目标:1. 让学生掌握C语言的基本语法和编程结构,能独立编写简单的贪吃蛇游戏程序。

2. 使学生理解贪吃蛇游戏的逻辑和算法,并能运用所学知识对其进行分析和优化。

3. 帮助学生了解计算机图形处理原理,学会使用C语言进行简单的图形绘制。

技能目标:1. 培养学生运用C语言进行问题求解的能力,特别是针对游戏编程的逻辑思维和算法设计能力。

2. 提高学生分析问题和解决问题的能力,通过编写贪吃蛇游戏,熟练运用循环、条件判断等基本编程结构。

3. 培养学生团队协作和沟通能力,能够在小组合作中共同完成课程设计任务。

情感态度价值观目标:1. 激发学生对计算机编程的兴趣和热情,培养良好的编程习惯和严谨的科学态度。

2. 培养学生面对困难和挑战时,勇于尝试、不断探索的精神,增强自信心和自我成就感。

3. 通过课程设计,引导学生体验编程带来的快乐,培养学生积极向上的学习态度和团队精神。

课程性质分析:本课程设计以实践为主,注重培养学生的动手能力和编程思维,结合贪吃蛇游戏这一趣味性课题,提高学生对C语言的兴趣。

学生特点分析:考虑到学生所在年级,已具备一定的C语言基础,但编程实践能力和问题求解能力有待提高,因此课程设计需兼顾知识巩固和技能提升。

教学要求:课程设计应注重理论与实践相结合,充分调动学生的主观能动性,鼓励学生自主探究和团队合作,以提高学生的编程能力和综合素质。

二、教学内容1. C语言基础知识回顾:变量、数据类型、运算符、控制结构(循环、分支)等基本概念。

2. 函数的定义和使用:重点复习和巩固函数的定义、调用、参数传递等知识,为编写模块化程序打下基础。

3. 数组和字符串操作:学习数组的使用,了解字符串处理的基本方法,为处理游戏中的数据结构做准备。

4. 指针的概念和应用:理解指针的基本概念,掌握指针在数组、字符串等中的应用。

5. 图形编程基础:介绍C语言图形库的使用,学习基本的图形绘制函数,如画点、画线等。

C语言贪吃蛇实验报告

C语言贪吃蛇实验报告

C语言程序设计实训报告姓名专业班级指导教师2011 年7月14日目录一.实训目的和要求....................................................................... 1二.实训任务内容........................................................................... 1三.详细设计说明........................................................................... 1四.软件使用说明........................................................................... 3五.实训心得与体会....................................................................... 3六.参考文献................................................................................... 5七.部分程序清单(带有详细的注释)....................................... 6八.程序结果............................................................................... 10一.实训目的和要求1.实训目的本实训是软件技术专业重要的实践性环节之一,是在学生学习完《C语言程序设计》课程后进行的一次全面的综合练习。

本实训的目的和任务:(1). 巩固和加深学生对C语言课程的基本知识的理解和掌握(2). 掌握C语言编程和程序调试的基本技能(3). 利用C语言进行基本的软件设计(4). 掌握书写程序设计说明文档的能力(5). 提高运用C语言解决实际问题的能力2.实训要求(1). 分析实训题目的要求(2). 写出详细设计说明(3). 编写程序代码,调试程序使其能正确运行(4). 设计完成的软件要便于操作和使用(5). 设计完成后提交实训报告二.实训任务内容设计贪吃蛇游戏玩家通过键盘控制蛇在地图上寻找食物,蛇吃下食物,可以加分,碰到四壁游戏结束。

c语言贪吃蛇课程设计报告

c语言贪吃蛇课程设计报告

c语言贪吃蛇课程设计报告Revised by Liu Jing on January 12, 2021C语言课程设计报告贪吃蛇专业学生姓名班级学号完成日期一、游戏规则需求1、在打开程序后,出现选择界面,里面包含难度选择,其中难度选择能够使程序出现相应的游戏难度。

2、开始游戏后,W A S D键控制贪吃蛇的移动方向。

3、当贪吃蛇向一个方向移动时,不能立刻向反方向移动。

4、贪吃蛇撞到的自己的身体或者撞到墙时,游戏结束,并输出“GAME OVER!”。

5、贪吃蛇吃到一个食物后,出现白色闪烁一次,身体随之增加一个单位长度。

二、所需数据结构分析1、所需函数模块void begin(); //登陆界面void start(); //鼠标移动事件void init(); // 初始化游戏void setfoodcrd(); // 设置食物要出现的坐标void showfood(); // 在相应的坐标画出食物void snakemove(); // 移动蛇,实际就是改变蛇各节的坐标void judgeslod(); // 判断蛇是否撞墙或者撞到自己void judgesef(); // 判断蛇是否吃到食物了void showsnake(); // 在屏幕上画出蛇void changeskdir(); // 接受用户输入,改变蛇的前进方向void gameover(); // 游戏结束2、蛇及食物数据结构typedef struct // 定义一个结构体表示坐标{int x;int y;}COOR;struct FOOD // 定义结构体,来存储食物的相关信息{COOR crd; // 食物出现的坐标int flag; // 食物的状态,1表示食物还没被吃,0表示食物被吃了}food;struct SNAKE // 定义结构体,来存储蛇的相关信息{COOR crd[SIZEMAX]; // 保存蛇的每个结数的坐标,最多有100节int node; // 保存蛇当前节数DIR dir; // 当前蛇行进的方向}snake;3、游戏流程图三、所需核心算法分析1.主函数void main() //主函数{initgraph(640, 640);loadimage(&img[0], "denglu3.jpg"); //导入图片loadimage(&img[1], "a1.jpg");loadimage(&img[2], "a2.jpg");loadimage(&img[3], "b1.jpg");loadimage(&img[4], "b2.jpg");loadimage(&img[5], "c1.jpg");loadimage(&img[6], "c2.jpg");loadimage(&img[7], "beijing.jpg");begin(); //登陆界面init(); // 初始化游戏while(1){while(!kbhit()){if (!food.flag){setfoodcrd();}showfood();judgeslod();judgesef();snakemove();Sleep(speed);}changeskdir();}}2.图形初始化void init() // 初始化游戏{putimage(0, 0, &img[7]);setbkcolor(RGB(124,107,7));food.flag = 0;snake.crd[0].x = 80+ SNAKELEN;snake.crd[0].y = 155;snake.crd[1].x = 80;snake.crd[1].y = 155;snake.node = 2;snake.dir = right;}3.读入操作信息的处理void snakemove(){int i;for (i=snake.node; i>0; i--){snake.crd[i].x = snake.crd[i-1].x;snake.crd[i].y = snake.crd[i-1].y;}switch (snake.dir){case up:snake.crd[0].y -= SNAKELEN;break;case down:snake.crd[0].y += SNAKELEN;break;case left:snake.crd[0].x -= SNAKELEN;break;case right:snake.crd[0].x += SNAKELEN;} showsnake();}四、关键函数介绍1.贪吃蛇链表用链表的节点表示蛇,移动的时候增加一个头节点隐藏一个尾节点,吃食物只需增加一个头节点。

C语言课程设计报告——贪吃蛇源程序

C语言课程设计报告——贪吃蛇源程序

C 语言课程设计(小游戏贪吃蛇得程序设计报告)设计人:班级:201年月号目录一:概述1:研究背景及意义2:设计得任务与需要知识点3:具体完成设计内容二:需求分析1:功能需求2:操作方法三:总体设计1:模块划分2:数据结构设计四:详细设计1:主空摸块设计2:绘制游戏界面3:游戏得具体过程4:游戏得结束处理5:显示排行榜信息模块五:程序得调试与测试1:动画与音乐同步2:蛇得运行3:终止程序六:结论七::结束语八:程序清单九:参考文献一. 概述本课程设计以软件工程方法为指导,采用了结构化,模块化得程序设计方法,以C语言技术为基础,使用TurboC++3、0为主要开发工具,对贪吃蛇游戏进行了需求分析,总体设计,详细设计,最终完成系统得实现与测试。

1、1 研究得背景及意义随着社会得发展,人们生活得节奏日益加快,越来越多得人加入了全球化得世界。

人们不再拘泥与一小块天地,加班,出差成了现代人不可避免得公务。

而此时一款可以随时随地娱乐得游戏成为了人们得需要。

此次课程设计完成得贪吃蛇小游戏,正就是为了满足上述需求而设计出来得。

贪吃蛇游戏虽小,却设计诸多得知识点。

通过开发贪吃蛇游戏系统,可使读者初步了解使用软件工程得与那个发,技术与工具开发软件得过程,进一步掌握结构化,模块化得程序设计方法与步骤,进一步掌握总体数据结构设计,模块划分方法,掌握局部变量,全局变量,结构体,共用体,数组,指针,文件等数据结构得使用方法,掌握图形,声音,随机数等多种库函数得使用方法,学习动画,音乐,窗口,菜单,键盘等多项编程技术,进一步学会软件调试,测试,组装等软件测试方法,为后续课程得学习与将来实际软件开发打下坚实得基础。

1、2设计得任务与需要得知识点1、2、1 课程设计主要完成得任务1)、通过编写“贪吃蛇游戏”程序,掌握结构化,模块块化程序设计得思想,培养解决实际问题得能力。

2)有同步播放动画,声音效果。

3)设计好数组元素与蛇,食物得对应关系。

c课程设计贪吃蛇代码

c课程设计贪吃蛇代码

c 课程设计贪吃蛇代码一、教学目标本课程旨在让学生掌握贪吃蛇游戏的基本原理和编程技巧,通过学习C语言编程,培养学生的逻辑思维能力和问题解决能力。

具体目标如下:知识目标:使学生了解C语言的基本语法和编程思想,掌握贪吃蛇游戏的设计原理和实现方法。

技能目标:培养学生运用C语言编写程序的能力,提高学生的编程技巧和调试能力。

情感态度价值观目标:激发学生对计算机科学的兴趣,培养学生的创新精神和团队合作意识。

二、教学内容本课程的教学内容主要包括C语言基础知识、贪吃蛇游戏的设计原理和编程技巧。

具体安排如下:1.C语言基础知识:介绍C语言的基本语法、数据类型、运算符、控制结构等。

2.贪吃蛇游戏设计原理:讲解贪吃蛇游戏的基本概念、游戏机制和算法。

3.编程技巧:教授如何使用C语言编写程序,包括变量声明、函数定义、条件判断、循环结构等。

4.贪吃蛇游戏编程实践:指导学生动手编写贪吃蛇游戏程序,并进行调试和优化。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式,包括讲授法、讨论法、案例分析法和实验法等。

1.讲授法:讲解C语言的基本语法和编程思想,使学生掌握贪吃蛇游戏的设计原理。

2.讨论法:学生进行小组讨论,分享编程经验和解决问题的方式。

3.案例分析法:分析典型的贪吃蛇游戏案例,引导学生学会分析问题和解决问题。

4.实验法:让学生动手编写贪吃蛇游戏程序,培养学生的实际编程能力和调试能力。

四、教学资源为了支持教学内容和教学方法的实施,本课程将提供以下教学资源:1.教材:选用权威、实用的C语言编程教材,为学生提供系统性的知识学习。

2.参考书:提供丰富的参考书籍,方便学生课后自主学习。

3.多媒体资料:制作精美的PPT课件,辅助课堂教学。

4.实验设备:提供计算机实验室,让学生进行编程实践和实验操作。

五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用多种评估方式,包括平时表现、作业、考试等。

具体评估方法如下:1.平时表现:关注学生在课堂上的参与程度、提问回答等情况,给予相应的平时分。

c程序贪吃蛇课程设计

c程序贪吃蛇课程设计

c程序贪吃蛇课程设计一、课程目标知识目标:1. 学生能理解C语言中数组、函数、循环和条件语句的基本概念及应用。

2. 学生能够运用C语言编写简单的贪吃蛇游戏,理解游戏逻辑和程序结构。

3. 学生了解如何在C程序中处理键盘输入和图形界面输出。

技能目标:1. 学生掌握利用C语言进行结构化编程,培养解决问题的能力。

2. 学生能够运用调试工具检查和修正程序中的错误,提高程序调试能力。

3. 学生通过团队协作完成项目,提高沟通与协作能力。

情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习计算机科学的热情。

2. 学生通过编写游戏程序,体会编程的乐趣和挑战,形成积极的学习态度。

3. 学生在团队协作中学会相互尊重、支持和鼓励,培养集体荣誉感。

课程性质分析:本课程为实践性较强的课程设计,通过贪吃蛇游戏的开发,让学生将所学的C 语言知识应用于实际项目中,提高编程能力和实际问题解决能力。

学生特点分析:考虑到学生为初学者,课程设计将从简单到复杂逐步引导,使学生在已有知识基础上,逐步掌握C语言的高级应用。

教学要求:1. 教师应注重理论与实践相结合,指导学生完成课程设计。

2. 教学过程中,强调学生自主探究和团队协作,培养学生独立思考和解决问题的能力。

3. 教师应及时给予反馈,帮助学生不断调整和完善课程设计,提高学习效果。

二、教学内容1. C语言基础知识复习:数组、函数、指针、循环和条件语句等基本概念。

相关教材章节:第1章-第4章2. 游戏逻辑设计:- 蛇的移动原理。

- 食物的随机生成。

- 判断撞墙和自撞逻辑。

相关教材章节:第6章-第7章3. 图形界面输出:- 使用标准库函数进行图形界面输出。

- 蛇和食物的图形表示。

相关教材章节:第9章4. 键盘输入处理:- 键盘事件监听。

- 响应按键改变蛇的移动方向。

相关教材章节:第8章5. 程序结构设计:- 模块化编程,划分功能函数。

- 程序流程控制。

相关教材章节:第5章6. 调试与优化:- 使用调试工具进行程序调试。

c程序课程设计贪吃蛇

c程序课程设计贪吃蛇

c程序课程设计贪吃蛇一、教学目标本章节的教学目标是让学生掌握C程序设计的基本知识,学会使用C语言编写简单的程序,并通过编写“贪吃蛇”游戏,提高学生的编程能力和逻辑思维能力。

1.掌握C语言的基本语法和数据类型。

2.学会使用C语言进行控制结构和函数的编写。

3.了解C语言的面向对象编程思想。

4.能够使用C语言编写简单的程序。

5.能够运用面向对象编程思想进行程序设计。

6.能够独立完成“贪吃蛇”游戏的编写。

情感态度价值观目标:1.培养学生对计算机编程的兴趣和热情。

2.培养学生解决问题的能力和团队协作精神。

3.培养学生遵守编程规范和道德准则的意识。

二、教学内容本章节的教学内容主要包括C语言的基本语法、数据类型、控制结构、函数和面向对象编程思想。

通过编写“贪吃蛇”游戏,让学生将这些知识点运用到实际编程中。

1.C语言的基本语法和数据类型。

2.控制结构的使用和面向对象编程思想。

3.函数的编写和调用。

4.“贪吃蛇”游戏的编写和调试。

教材章节:《C程序设计原理与应用》(第1章至第4章)三、教学方法本章节的教学方法采用讲授法、案例分析法和实验法相结合的方式。

1.讲授法:通过讲解C语言的基本语法、数据类型、控制结构和函数等内容,使学生掌握C语言的基础知识。

2.案例分析法:通过分析“贪吃蛇”游戏的编程案例,使学生了解如何将所学知识点运用到实际编程中。

3.实验法:让学生动手编写“贪吃蛇”游戏,提高学生的编程能力和解决问题的能力。

四、教学资源本章节的教学资源包括教材、参考书、多媒体资料和实验设备。

1.教材:《C程序设计原理与应用》2.参考书:《C语言程序设计》3.多媒体资料:C语言编程教程视频4.实验设备:计算机、编程软件(如Visual Studio、Code::Blocks等)五、教学评估本章节的评估方式包括平时表现、作业和考试三个方面,以保证评估的客观性和公正性,全面反映学生的学习成果。

1.平时表现:通过课堂参与、提问、小组讨论等方式评估学生的学习态度和积极性。

C语言程序设计课程设计(论文)-贪吃蛇

C语言程序设计课程设计(论文)-贪吃蛇

C语言程序设计课程设计(论文)-贪吃蛇------------ 大学C语言程序设计课程设计(论文)题目: 贪吃蛇院(系):专业班级:学号:学生姓名:指导教师:教师职称:起止时间:课程设计(报告)任务及评语院(系): 教研室:学号学生姓名专业班级程序设计(报告)贪吃蛇题目程序设计的任务与要求:(1)掌握C语言编程的基础知识。

(2)较熟练地编写C语言应用程序。

(3)了解C语言的常用标准函数、编程技巧、异常处理。

程序(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。

设(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能计)力都有一个很大的提高。

报告(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素) 质的提高起一个积极的推动作用。

任务课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。

正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。

指导教师评语及成绩成绩: 指导教师签字:2011年 1 月 4 日辽宁工业大学 C 语言课程设计说明书(论文)目录第1章 C语言课程设计的实训目的与要求 (1)1.1 C语言课程设计目的 (1)1.2 C语言课程设计的实验环境 (1)1.3 C语言课程设计的预备知识 (1)1.4 C语言课程设计要求 .................................................. 1 第2章 C语言课程设计内容 .. (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (2)2.2.1设计思路 ......................................................22.2.2数据结构设计及用法说明 ........................................32.2.4各模块的功能及程序说明 ........................................72.2.5程序结果 ......................................................82.3程序源代码及注释 (10)第3章 C语言课程设计总结 .................................................. 17 参考资料.. .................................................................20辽宁工业大学 C 语言课程设计说明书(论文)第1章 C语言课程设计的目的与要求 1.1 C语言课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。

C语言课程设计贪吃蛇源代码

C语言课程设计贪吃蛇源代码

C语言程序贪吃蛇代码#include<stdio.h>#include<windows.h>#include<time.h>#include<stdlib.h>#include<conio.h>#define N 21FILE *fp;int S;void boundary(void);//开始界面void end(void); //结束void gotoxy(int x,int y)//位置函数{COORD pos;pos.X=x;pos.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); }void color(int a)//颜色函数{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}void init(int food[2])//初始化函数(初始化围墙、显示信息、苹果){system("cls");int i,j;//初始化围墙int wall[N+2][N+2]={{0}};//初始化围墙的二维数组for(i=1;i<=N;i++){for(j=1;j<=N;j++)wall[i][j]=1;}color(10);for(i=0;i<N+2;i++)//畵围墙{for(j=0;j<N+2;j++){if(wall[i][j])printf(" ");else printf("#") ;}printf("\n") ;}gotoxy(N+3,3);//显示信息color(14);printf("\t\t按a,b,c,d改变方向\n");gotoxy(N+3,1);color(14);printf("\t\t按任意键暂停,按1返回,按2退出\n"); gotoxy(N+5,3);color(14);printf("score:\n");food[0]=rand()%N+1;//随机出现食物food[1]=rand()%N+1;gotoxy(food[0],food[1]);color(12);printf("*\n");}void play()//具体玩的过程{system("cls");int i,j;int** snake=NULL;//定义蛇的二维指针int food[2];//食物的数组,food[0]代表横坐标,food[1]代表纵坐标int score=0;//为得分int tail[2];//此数组为了记录蛇的头的坐标int node=3;//蛇的节数char ch='p';srand((unsigned)time(NULL));//随机数发生器的初始化函数init(food);snake=(int**)realloc(snake,sizeof(int*)*node);//改变snake所指内存区域的大小为node长度for(i=0;i<node;i++)snake[i]=(int*)malloc(sizeof(int)*2);for(i=0;i<node;i++)//初始化蛇的长度{snake[i][0]=N/2;snake[i][1]=N/2+i;gotoxy(snake[i][0],snake[i][1]);color(14);printf("*\n");}while(1)//进入消息循环{gotoxy(5,0);color(10);printf("#");gotoxy(0,5);color(10);printf("#");gotoxy(0,7);color(10);printf("#");gotoxy(0,9);color(10);printf("#");tail[0]=snake[node-1][0];//将蛇的后一节坐标赋给tail数组tail[1]=snake[node-1][1];gotoxy(tail[0],tail[1]);color(0);printf(" ");for(i=node-1;i>0;i--)//蛇想前移动的关键算法,后一节的占据前一节的地址坐标{snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];gotoxy(snake[i][0],snake[i][1]);color(14);printf("*\n");}if(kbhit())//捕捉输入信息gotoxy(0,N+2);ch=getche();}switch(ch){case 'w':snake[0][1]--;break;case 's':snake[0][1]++;break;case 'a':snake[0][0]--;break;case 'd':snake[0][0]++;break;case '1':boundary() ;break;case '2':end();break;default: break;}gotoxy(snake[0][0],snake[0][1]);color(14);printf("*\n");Sleep(abs(200-0.5*score));//使随着分数的增长蛇的移动速度越来越快if(snake[0][0]==food[0]&&snake[0][1]==food[1])//吃掉食物后蛇分数加1,蛇长加1 {score++;//分数增加S=score;node++;//节数增加snake=(int**)realloc(snake,sizeof(int*)*node);snake[node-1]=(int*)malloc(sizeof(int)*2);food[0]=rand()%N+1;//产生随机数且要在围墙内部food[1]=rand()%N+1;gotoxy(food[0],food[1]);color(12);printf("*\n");gotoxy(N+12,3);color(14);printf("%d\n",score);//输出得分}if(snake[0][1]==0||snake[0][1]==N+1||snake[0][0]==0||snake[0][0]==N+1)//撞到围墙后失败{gotoxy(N/2,N/2);color(30);printf("GAME OVER\n");for(i=0;i<node;i++)free(snake[i]);Sleep(INFINITE);exit(0);}}//从蛇的第四节开始判断是否撞到自己,因为蛇头为两节,第三节不可能拐过来for (i=3; i<node; i++){for(j=0;j<node;j++){if (snake[i][0]==snake[j][0] && snake[i][1]==snake[j][1]){gotoxy(N/2,N/2);color(30);printf("GAME OVER\n");for(i=0;i<node;i++)free(snake[i]);Sleep(INFINITE);exit(0);;}}}}void end()//结束函数{system("cls");system("cls");printf("EXIT\n");}void grade()//成绩记录函数{system("cls");int i=0;char s;if( (fp=fopen("f:\\贪吃蛇\\贪吃蛇.txt","ar") )==NULL)//打开文件{printf("\nCannot open file!\n");exit(0);}if(i<S)i=S;color(14);fwrite(&i,sizeof(i),1,fp);fclose(fp);printf("最高的分为:%d\n\n",i);printf("\t按1返回\n\n");printf("\t按2退出\n\n");s=getche();switch(s){case '1':boundary();break;case '2': end();break;}}void boundary()//开始界面{system("cls");char s;color(14);printf("\t\t欢迎来玩!!\n\n");printf("\t\t1:开始\n\n");printf("\t\t2:查看成绩\n\n");printf("\t\t3:退出\n\n");printf("\t\t请选择:");s=getche();switch(s){case '1': play();break;case '2': grade();break;case '3': end();break;}}int main(){boundary();getchar();return 0;}。

贪吃蛇游戏c课程设计

贪吃蛇游戏c课程设计

贪吃蛇游戏c 课程设计一、课程目标知识目标:1. 学生能理解并掌握编程语言的基本语法和结构,特别是Python语言的基本操作和流程控制。

2. 学生能运用所学知识,创建并完善一个简易的贪吃蛇游戏,包括蛇的移动、食物的生成和得分机制。

3. 学生理解二维数组的使用,并能将其应用于游戏界面的构建。

技能目标:1. 学生通过编写代码,培养逻辑思维和问题解决能力,提高编程实践技能。

2. 学生学会运用调试工具,能够自主发现并修正程序中的错误。

3. 学生能够合作完成项目,培养团队协作能力和沟通技巧。

情感态度价值观目标:1. 学生培养对计算机科学的兴趣和热情,认识到编程对于未来发展的重要性。

2. 学生在编程实践中体会失败与成功,培养面对困难的坚持和克服能力。

3. 学生通过小组合作,学会尊重他人意见,共享成果,增强集体荣誉感。

课程性质:本课程为信息技术课程,通过实践操作使学生掌握编程技能,培养创新思维。

学生特点:学生为初中年级,对新鲜事物充满好奇,动手能力强,但注意力集中时间有限。

教学要求:教学应注重实践与理论相结合,关注个体差异,鼓励学生探索和创造,确保每个学生都能参与并完成任务。

教学过程中,应将目标具体化为可观察的学习成果,便于进行有效的教学设计和学习成效评估。

二、教学内容本课程依据课程目标,结合教材内容,主要包括以下部分:1. Python基础语法:变量、数据类型、运算符、条件语句和循环语句,让学生掌握编程的基本结构。

- 教材章节:第一章 Python基础2. 列表和二维数组:介绍列表的基本操作,二维数组在游戏中的应用,为构建游戏界面打下基础。

- 教材章节:第二章 数据结构3. 函数和模块:学习编写函数,实现代码的模块化,提高代码的可读性和可维护性。

- 教材章节:第三章 函数与模块4. 图形用户界面(GUI):利用Python的图形库,如Tkinter,设计贪吃蛇游戏的用户界面。

- 教材章节:第四章 图形用户界面5. 游戏设计:结合以上知识,设计并实现一个简易的贪吃蛇游戏,包括蛇的移动、食物的生成、得分和游戏结束条件。

贪吃蛇简易代码之欧阳语创编

贪吃蛇简易代码之欧阳语创编

#include<windows.h>#include "resource1.h"#include <stdio.h>#include <stdlib.h>#include <time.h>//蛇的结构体typedef struct SNAKE{int x;int y;struct SNAKE *pNext;}Snake;//豆的结构体typedef struct BEAN{int x;int y;struct BEAN *pNext;}Bean;//函数原型void CreateSnake(Snake **pSnake);void deleteAll(Snake **pSnake);void ShowSnake(Snake *pSnake);void CreateBean(Bean **pBean,Snake *pSnake);void ShowBean(Bean *pBean);void DeleteBean(Bean **pBean);void SnakeRun(Snake **pSnake);void SnakeGrowUp(Snake *pSnake);int CanEatBean(Snake *pSnake,Bean *pBean);int CanDie(Snake *pSnake);///////////////////////////////////////////////////////////// ////////////////////////char g_ClassName[20] = "ClassName";LRESULT CALLBACK WndProc(HWND hwnd,UINT nMsg,WPARAM wParam,LPARAM lParam); HBITMAP hBitMap;int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance,LPSTR pCmdLine,int nCmdShow){HBRUSH hBrush =CreateSolidBrush(RGB(100,100,410));HICON hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_wnd_icon ));HICON hIconsm = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_wnd_icon sm));hBitMap = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_wdnbi tmap));//设计类WNDCLASSEX wndClass;wndClass.cbClsExtra = NULL;wndClass.cbSize = sizeof(wndClass);wndClass.cbWndExtra = NULL;wndClass.hbrBackground = hBrush;wndClass.hCursor = LoadCursor(hInstance,IDC_ARROW);wndClass.hIcon = hIcon;wndClass.hIconSm = hIconsm;wndClass.hInstance = hInstance;wndClass.lpfnWndProc = WndProc;wndClass.lpszClassName = g_ClassName; wndClass.style = CS_HREDRAW|CS_VREDRAW; wndClass.lpszMenuName = NULL;//注册if (!RegisterClassEx(&wndClass)){MessageBox(NULL,"注册失败","消息",MB_OK); }//创建HWND hwnd = CreateWindow(g_ClassName, "贪吃蛇",WS_OVERLAPPEDWINDOW,200,50,600+16,600+38,NULL,NULL,hInstance,NULL);if (!hwnd){MessageBox(NULL,"创建失败!","消息",MB_OK);}//显示ShowWindow(hwnd,nCmdShow);//消息循环MSG msg;while (GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg); //翻译DispatchMessage(&msg); //回调函数}return 0;}HDC dc = NULL;Bean *pBean = NULL;Snake *pSnake = NULL;int VK = VK_RIGHT;LRESULT CALLBACK WndProc(HWND hwnd,UINT nMsg,WPARAM wParam,LPARAM lParam){switch (nMsg){case WM_CREATE:{CreateSnake(&pSnake); //创建蛇CreateBean(&pBean,pSnake); dc = GetDC(hwnd);}break;case WM_KEYDOWN:{switch (wParam){case VK_RETURN://按下后就开始SetTimer(hwnd,1,150,NULL); break;case VK_UP:VK = VK_UP;break;case VK_DOWN:VK = VK_DOWN;break;case VK_LEFT:VK = VK_LEFT;break;case VK_RIGHT:VK = VK_RIGHT;break;case ' ':KillTimer(hwnd,1);break;}break;}case WM_TIMER:{/*创建背景*/RECT rect;GetWindowRect(hwnd,&rect);HDC hmeDc = CreateCompatibleDC(dc);SelectObject(hmeDc,hBitMap);StretchBlt(dc,0,0,rect.right-rect.left,rect.bottom-rect. top,hmeDc,0,0,500,600,SRCCOPY);DeleteDC(hmeDc);/*背景创建结束*///各种函数if (CanDie(pSnake)){KillTimer(hwnd,1);MessageBox(NULL,"笨蛋,撞到自己身上,我死啦!","消息",MB_OK);}if ( CanEatBean(pSnake,pBean) ){SnakeGrowUp(pSnake);DeleteBean(&pBean);CreateBean(&pBean,pSnake);SnakeRun(&pSnake);}else{SnakeRun(&pSnake);}ShowSnake(pSnake);ShowBean(pBean);}case WM_PAINT:{/*创建背景*/RECT rect;GetWindowRect(hwnd,&rect);HDC hmeDc = CreateCompatibleDC(dc);SelectObject(hmeDc,hBitMap);StretchBlt(dc,0,0,rect.right-rect.left,rect.bottom-rect. top,hmeDc,0,0,500,600,SRCCOPY);/*背景创建结束*/ShowSnake(pSnake); //显示蛇ShowBean(pBean); //显示豆DeleteDC(hmeDc);break;}case WM_CLOSE:deleteAll(&pSnake);DeleteBean(&pBean);DestroyWindow(hwnd);break;case WM_DESTROY:ReleaseDC(hwnd,dc);PostQuitMessage(0);break;case WM_QUIT:break;}returnDefWindowProc(hwnd,nMsg,wParam,lParam);}/////////////////////////////////函数/////////////////////////////////////////////////////////// //创建蛇Create Snake()void CreateSnake(Snake **pSnake){Snake *u = NULL,*w = NULL;int i = 3; //开始的蛇有三截int x = 0; //蛇头的初始位置int y = 0; //蛇尾的初始位置while (i--){u = (Snake *)malloc(sizeof(Snake));u->pNext = NULL;u->x = x;u->y = y;x +=20;if (NULL == *pSnake){*pSnake = u;}else{w->pNext = u;}w = u;}/*蛇的三届创建完毕*/}//创建豆void CreateBean(Bean **pBean,Snake *pSnake) {Snake *ji;int x = 0; //随机的位置x坐标int y = 0; //随机的位置y坐标srand(time(NULL));x = ((unsigned)rand()%29)*20;y = ((unsigned)rand()%29)*20;ji = pSnake;while(pSnake){if ((x == pSnake->x) && (y == pSnake->y) ) {x = ((unsigned)rand()%29)*20;y = ((unsigned)rand()%29)*20;pSnake = ji;}pSnake = pSnake->pNext;}Bean *u;u = (Bean *)malloc(sizeof(Bean));u->pNext = NULL;u->x = x;u->y = y;*pBean = u;}//删掉全部蛇void deleteAll(Snake **pSnake){Snake *del;while(*pSnake){del = *pSnake;(*pSnake) = (*pSnake)->pNext;free(del);}}//删掉豆void DeleteBean(Bean **pBean){free(*pBean);*pBean = NULL;}//显示蛇void ShowSnake(Snake *pSnake){while (pSnake){Rectangle(dc,pSnake->x,pSnake->y,pSnake->x+20, pSnake->y+20);pSnake = pSnake->pNext;}}//显示豆void ShowBean(Bean *pBean){Rectangle(dc,pBean->x,pBean->y,pBean->x+20,pB ean->y+20);}//贪吃蛇移动void SnakeRun(Snake **pSnake){Snake *ji, //记录变化的蛇头*round; //循环遍历int x, //蛇头的当前位置x坐标y; //蛇头的当前位置y坐标ji = *pSnake;round = *pSnake;while (round->pNext){round = round->pNext;}x = round->x;y = round->y; switch(VK){case VK_UP:if (y == 0){y = 600;}y -=20; break;case VK_DOWN: if (y==600){y = 0;}y +=20; break;case VK_LEFT: if (x == 0){x = 600;}x -= 20;break;case VK_RIGHT:if (x == 600){x = 0;}x +=20;break;}*pSnake = (*pSnake)->pNext;ji->x = x;ji->y = y;ji->pNext = NULL;round->pNext = ji;}//下一步能吃到豆吗? 返回1吃到int CanEatBean(Snake *pSnake,Bean *pBean) {while (pSnake->pNext){pSnake = pSnake->pNext;}if((pSnake->x==pBean->x)&&(pSnake->y==pBean->y )){return 1;}return 0;}//长大void SnakeGrowUp(Snake *pSnake){Snake *u;u = (Snake *)malloc(sizeof(Snake));u->pNext = NULL;u->x = pBean->x;u->y = pBean->y;while(pSnake->pNext){pSnake = pSnake->pNext;}pSnake->pNext = u;}//蛇会死吗返回1会死int CanDie(Snake *pSnake) {Snake *ji = NULL;int x = 0,y = 0;ji = pSnake;while (pSnake->pNext){pSnake = pSnake->pNext;}x = pSnake->x;y = pSnake->y;switch(VK){case VK_UP:y -=20;break;case VK_DOWN:y +=20;break;case VK_LEFT:x -= 20;break;case VK_RIGHT:x +=20;break;}while(ji->pNext){if ((x == ji->x) && (y == ji->y)) {return 1;}ji = ji->pNext;}return 0;}。

C++贪吃蛇说明之欧阳家百创编

C++贪吃蛇说明之欧阳家百创编

C语言课程设计报告欧阳家百(2021.03.07)题目:贪吃蛇指导教师:许盟院系:电气信息工程学院班级:01姓名:齐英帅学号:15目录1、课程设计目的:1.进一步掌握和利用C语言进行行程设计的能力;2.进一步理解和运用结构化程序设计的思想和方法;3.初步掌握开发一个小型实用系统的基本方法;4.学会调试一个较长程序的基本方法;5.学会利用流程图表示算法;6.掌握书写程序设计开发文档的能力(书写课程设计报告)。

2、课程设计具体要求:贪吃蛇是一种风靡全球的小游戏,就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的蛋,越吃越长。

只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。

和别的游戏不同,贪食蛇是一个悲剧性的游戏。

许多电子游戏都是打通关到底,游戏操作者以胜利而告终。

而贪食蛇的结局却是死亡。

“贪食蛇”,要命的就在一个“贪”字上。

所以,有时候真的需要及时收手,不要逼人太甚。

如果没有余地,就算你的手再快,面临的结局也是——崩盘。

3、程序功能:我设计的贪吃蛇V1.00主要具有以下功能1.每吃到一个普通食物,蛇的身体增长一节,玩家的分数加1。

同时,蛇移动的速度也会随之加快。

2.可以选择FAST NOMAL SLOW三个速度等级。

3.可以选择单人游戏或者双人游戏,选择双人游戏时,按方向键控制Player1,按W A S D控制Player2.首先撞死的蛇为败者。

4.每吃掉3个普通食物,将产生一个奖励食物,如果吃掉奖励食物,玩家的分数加1,但是蛇的身体不增长。

5.每吃掉3个普通食物,同时将产生一个障碍,如果吃掉奖励食物,障碍也将随之消失。

另外,每次产生的障碍形状不同。

6.如果在难度等级对应的时间内没有吃掉奖励食物,食物消失,障碍也会消失。

7.按空格键可以控制暂停与开始,按ESC键退出游戏。

8.游戏有排行榜功能,当得分不为0时,玩家的姓名将被记录到排行榜中;进行双人游戏时,胜利玩家的姓名将被记录到排行榜中。

贪吃蛇实验报告之欧阳化创编

贪吃蛇实验报告之欧阳化创编

《计算机程序设计》课程设计报告课题名称贪吃蛇游戏班级学号姓名指导教师设计时间至设计地点常熟理工学院计算机科学与工程学院目录1 需求分析12 系统分析和设计12.1 数据结构的设计和选择的理由12.2 系统模块划分和模块结构12.3 流程图22.4 数据类型、全局变量和函数说明23 程序测试和运行结果44 课程报告小结54.1分数重叠显示54.2速度太快54.3食物可能出现在蛇身上5附录A:程序源代码61 需求分析【阐述课程设计应该完成的功能】使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。

2 系统分析和设计2.1 数据结构的设计和选择的理由本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。

2.1.1从游戏参考画面中我们可以看到,贪吃蛇的身体是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。

为表示连续的多节身体,那么我们可以采用数组(或链表,或线性表)等数据结构来表示。

下面以数组方式为例:struct Point {int x, y; }struct Point nodes[MAX_LENGTH]; //蛇身数组,MAX_LENGTH为最大蛇长贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点:1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用int direction;表示)2. 运动时,蛇身后面一节移动到前面一节的位置。

当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处...。

3. 吃到一个食物以后,蛇身会增加一节。

即该数组中的有效数据个数加一。

(用int length;表示)根据上面的情况,我们可以设计蛇的数据结构如下:struct Snake { struct Point nodes[MAX_LENGTH]; //蛇身数组,保存每节蛇身的坐标。

贪吃蛇实训报告之欧阳学文创编之欧阳索引创编

贪吃蛇实训报告之欧阳学文创编之欧阳索引创编

欧阳索引创编2021.02.02郑州轻工业学院欧阳家百(2021.03.07)实训报告实训名称:贪吃蛇指导教师:姓名:学号:班级:提交日期:一.实验目的通过开发一款贪吃蛇游戏程序,熟练掌握C#编程语言、和面向对象程序设计方法,独立完成一个游戏程序的开发。

二.实验题目本次实训的题目为贪吃蛇。

通过使用C#编程语言来实现。

三.功能描述1.游戏的基本功能描述1)游戏场地是一片矩形区域的空地构成,蛇可以在这片定义的区域中自由移动。

2)定义一个Block来构成石块,蛇头,蛇身以及豆。

蛇由蛇头和蛇身组成。

3)当游戏开始之后,定义的区域中出现一颗豆和一条蛇,并且蛇不停地移动,蛇移动的方向与蛇头的方向一致。

4)通过space或者暂停键可以使游戏停止,蛇停止移动,分数停止积分。

5)当蛇移动时,玩家可以使用“↑”、“↓”、“←”和“→”四个方向键改变蛇的移动方向。

6)当蛇头与豆的位置重合时,豆被蛇吃掉,同时在草坪中再生成一颗新的豆,蛇身增加一节。

7)当蛇头碰到石块时,蛇死亡,游戏结束。

8)当蛇头咬到蛇身时,则蛇死亡,游戏结束。

9)当蛇头碰到草坪四周时,蛇立即毙命,游戏结束。

10)游戏分为不同的级别,第一关游戏速度为200,当蛇吃五个豆子就可以过关,级别显示为2,速度增加100变为300.第二关为吃够10个豆子,速度增加50,以后以此类推。

11)游戏菜单中设有游戏帮助,玩家可以通过点击帮助了解游戏的玩法。

12)对于不是第一次玩的玩家可以改变蛇的运动速度,来增加难度。

在菜单中设有加速和减速两个键,单击可以改变速度。

13)游戏菜单中还有时间显示。

14)当游戏暂停时,可以通过“继续”键使游戏继续进行。

四.需求分析本游戏用户可以自己练习和娱乐。

本游戏需要满足以下几点要求:(1)利用方向键“↑、↓、←、→”来改变蛇的运行方向。

(2)空格键暂停游戏,并在随机的地方产生食物。

(3)吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

欧阳家百创编C 语言课程设计欧阳家百(2021.03.07)(小游戏贪吃蛇的程序设计报告)设计人:班级:201年月号欧阳家百创编目录一:概述1:研究背景及意义2:设计的任务与需要知识点3:具体完成设计内容二:需求分析1:功能需求2:操作方法三:总体设计1:模块划分2:数据结构设计四:详细设计1:主空摸块设计2:绘制游戏界面3:游戏的具体过程4:游戏的结束处理5:显示排行榜信息模块五:程序的调试与测试1:动画与音乐同步2:蛇的运行3:终止程序六:结论七::结束语八:程序清单九:参考文献一.概述本课程设计以软件工程方法为指导,采用了结构化,模块化的程序设计方法,以C语言技术为基础,使用TurboC++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 200Struct 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 FILENAME四. 详细设计根据总体设计的模块功能和结构,完成所承担的程序模块的算法设计。

给出每个模块的详细的算法,算法分别用传统流程图和文字说明来描述。

4.1 主控模块main函数主函数是程序的主控模块。

首先初始化图形系统,然后使用drawsnow函数播放动画和声音,接着调用init函数初始化图形系统,之后调用drawk函数画出游戏开始画面,在调用ga meplay函数,即开始了游戏的具体过程,游戏结束后调用endplay函数进行游戏结束处理;从文件中读取记录信息,排序,显示排行榜信息,最后关闭图形系统,结束程序。

主控模块的流程图如图6-2所示。

其中带有两个竖线的矩形框表示对自定义函数的调用。

4.2 函数主界面就是一个封闭的围墙,用两个循环语句分别在水平方向和垂直方向输出连续的宽度和高的均为10个像素单位的距行小方块,围成封闭图形表示围墙,为了醒目,设置为淡青色,用函数setlinestyle 设直线型宽度为3个像素,设置3个像素的围墙线,。

最后,在界面的左上部输出游戏程序的版本信息,在右上部输出游戏成绩(score )和关(level)的表头。

4.3 游戏具体过程gameplay 函数该函数是游戏的核心部分。

游戏具体过程gameplay 函数的大致算法流程图如图6-4所示。

余下流程图在下页4.3.1设置这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=向下。

判断是还考虑相反的方向键无效,比如蛇正在向上爬行,按下一键方向是无效的。

相关文档
最新文档