VC贪蛇吃游戏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语言的贪吃蛇游戏的课程设计项目。
报告首先介绍了贪吃蛇游戏的背景和目标,然后详细说明了设计和实现过程中使用的数据结构、算法和关键技术。
最后,报告讨论了项目的测试结果和改进思路。
1. 引言贪吃蛇是一款经典的电子游戏,它的目标是控制一条蛇在有限空间内移动,吃掉食物并尽可能长大。
贪吃蛇游戏不仅有趣,而且对于初学者来说是一个很好的训练编程技巧的项目。
因此,在本课程设计中选择了贪吃蛇游戏作为项目的主题。
2. 设计目标本课程设计项目的主要目标是设计并实现一个使用C语言开发的贪吃蛇游戏。
具体目标包括: - 实现一个可用键盘控制的贪吃蛇游戏界面; - 设计合适的数据结构来表示贪吃蛇的状态; - 实现贪吃蛇的移动、吃食物、增长等基本功能; - 设计和实现合适的算法来检测和处理蛇与边界、蛇与自身以及蛇与食物的碰撞。
3. 设计与实现为了实现贪吃蛇游戏,我们使用了C语言作为开发语言,并采用了以下关键技术和数据结构:3.1 数据结构为了表示贪吃蛇的状态,我们设计了以下数据结构: - Point结构体用于表示二维坐标点,包括x和y坐标; - SnakeNode结构体用于表示贪吃蛇的每个节点,包括一个Point和指向下一个节点的指针; - Snake结构体用于表示整条贪吃蛇,包括一个指向头节点的指针和当前蛇的长度。
3.2 算法和关键技术为了实现贪吃蛇的移动、吃食物、碰撞等功能,我们采用了以下算法和关键技术: - 使用循环链表数据结构来表示贪吃蛇,使得贪吃蛇的移动和增长操作更高效;- 使用键盘输入来控制贪吃蛇的移动方向; - 使用随机数生成食物的位置; - 使用递归算法检测贪吃蛇与边界、自身以及食物之间的碰撞。
4. 测试与结果分析为了测试贪吃蛇游戏的功能和性能,我们设计了多个测试用例并进行了测试。
测试的结果表明我们的游戏实现了预期的功能,并且在性能方面表现良好。
然而,我们也发现了一些问题和改进的空间: - 贪吃蛇的移动速度过快,导致游戏难度较高; - 游戏界面设计简单,缺乏可玩性。
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库函数中几个关键函数的功能及用法。
VC课程设计报告贪食蛇
3.1.3资源.
主要功能的实现.
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
游戏界面.初始化食物 开始游戏.英雄榜
游戏设置.
第四章
4.1
4.2
结果与讨论
程序运行.错误调试与分析来自- 3- 3- 3
- 3
- 3
- 3
- 4
- 4
- 4
- 4
- 6
- 6
- 6
- 6
- 7
- 7
- 7
图1-1所示。
2.1.2
根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。贪吃蛇的内容主要包括:
出现食物;按下ToolBar中的暂停按钮或Space键可以实现暂停功能;按下帮助键或ToolBar中的“?”
键可获得游戏帮助说明;可播放背景音乐和音效并可通过菜单以及
- 8
- 9
11
11
12
12
14
第一章引言
1.1
1.1.1
利用Microsoft Visual C++制作一个贪吃蛇的小游戏,要求:
(1)应用MFC单文档制作
第二章概要设计
2.1
2.1.1
根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、暂停游戏以及 停止游戏,音乐音效的添加与控制,游戏帮助提示与英雄榜的显示等等。具体的程序结构如下面的
VC
设计题目:
学 院:
专业班级:
学生姓名:
学生学号:
指导教师:
成 绩:
第一章
1.2
1.3
引言
关于题目.
1.1.1题目要求
C#实验报告(贪吃蛇游戏)
《C#程序设计及应用教程》课程设计报告设计题目贪吃蛇游戏专业2011级软件工程班级2011级软件工程姓名学号*********完成日期2013-06-24目录1. 问题描述………………………………………………2. 系统设计………………………………………………3. 数据结构与算法描述…………………………………4. 测试结果与分析………………………………………5. 总结…………………………………………………6. 参考文献………………………………………………附录程序源代码…………………………………………(报告正文部分):课程设计题目1. 问题描述我设计的的游戏首先在主界面选择游戏难度,接着进行游戏,在游戏过程中贪吃蛇不停地吃掉随机产生的食物,蛇身增长,直到蛇触碰到自己的身躯或边框,游戏结束特色:1.游戏可以自选难度,且蛇身长每增加2游戏可以储存游戏分数,你可以查看最高分3游戏过程中蛇的颜色,食物的颜色,分数的颜色,可以不停变换,增加视觉效果2. 系统设计2.1 设计目标C#课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基础知识的基础上,进一步加深对C#的理解和掌握;提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质;培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新 2 月异的发展形势;本次课程设计是以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,做出设计报告。
2.2 设计思想程序关键在于表示蛇的图形及蛇的移动。
用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块。
移动时必须从蛇头开始,所以蛇不可以向相反的方向移动,如果不按任意键,蛇自行在当前方向右前移,但按下有效方向键后,蛇头朝该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后节用背景色覆盖。
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语言课程设计贪吃蛇设计
Part Three
C语言基础知识
数据类型和变量
基本数据类型:int、float、char、double等 复合数据类型:数组、结构体、指针等 变量声明:使用关键字"int"、"float"等声明变量 变量赋值:使用"="为变量赋值 变量作用域:局部变量、全局变量等 变量生命周期:从声明到释放的过程
结构体和联合体:包括结构 体定义、结构体初始化、结 构体访问、联合体定义、联 合体初始化、联合体访问等
函数和数组
函数:C语言中的基本单元,用于实现特定功能
数组:C语言中的基本数据类型,用于存储一组相同类型 的数据
数组函数:如strlen()、strcpy()等,用于操作字符串
指针:C语言中的重要概念,用于指向内存地址
Part Four
贪吃蛇游戏设计
游戏逻辑设计
游戏结束:当蛇碰到边界或 自己时结束
游戏循环:不断更新蛇的位 置和方向
游戏开始:初始化蛇的位置 和方向
得分计算:根据吃到的食物 数量计算得分
游戏难度:根据得分调整游 戏难度,如增加蛇的速度或
改变食物的位置
游戏界面:设计游戏界面, 包括蛇、食物、边界等元素
Part Seven
总结和展望
课程设计收获和体会
掌握了C语言的基本语法和编 程技巧
学会了如何设计并实现一个完 整的游戏项目
提高了解决问题的能力和团队 协作能力
对游戏开发有了更深入的了解 和兴趣
C语言在游戏开发中的应用前景
游戏开发中,C语言具有高效、稳定的特点,适合开发大型游戏。 C语言具有广泛的应用领域,可以开发各种类型的游戏,如动作、冒险、策略等。 C语言具有强大的社区支持,可以找到大量的游戏开发资源和教程。 C语言在游戏开发中具有广泛的应用前景,可以开发出更多优秀的游戏作品。
C语言贪吃蛇实验报告
C语言程序设计实训报告姓名专业班级指导教师二011 年 7 月 14 日目录1实训目的和要求 (1)1.1实训目的和任务 (1)1.2实训要求 (1)2实训任务内容 (1)2.1游戏规则 (1)2.2流程设计 (2)3软件使用说明 (3)3.1编辑程序主要软件 (3)3.2编辑程序辅助软件 (3)3.3程序使用过程 (3)3.3.1贪吃蛇进入 (3)3.3.2贪吃蛇的玩法 (4)3.3.3贪吃蛇的结束 (4)4实训心得和体会 (5)4.1实训的心得 (5)4.2实训的体会 (5)参考文献 (6)附录:部分程序清单 (7)1实训目的和要求1.1 实训目的和任务1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 实训要求1. 分析实训题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用4. 设计完成后提交实训报告2实训任务内容2.1 游戏规则通过一个学期对C语言程序设计的学习,经过实训,完善我们对C语言学习的漏洞和未学会的知识点,更加熟练的掌握C语言程序设计,锻炼我们独立自主设计程序编辑代码的能力,通过设计出来的程序,提高我们对C语言学习的兴趣,玩家通过键盘控制蛇在地图上寻找食物,蛇吃蛇食物,可以加分,碰到四壁游戏结束。
2.2流程设计贪吃蛇流程图如图1所示图1贪吃蛇流程图贪吃蛇运行说明图如图2所示图2贪吃蛇运行说明图3软件使用说明3.1 编辑程序主要软件对于这次实训,主要使用的软件是VC++6.0,在平日的学习中,我们也经常使用这种软件进行编程,已基本掌握此软件的用法,所以在此次实训中,我还是主要使用VC++6.03.2 编辑程序辅助软件辅助软件有turboc,因为在贪吃蛇程序代码设计阶段,VC++6.0需要自己人工绘图,还没有熟练掌握绘图功能时,我使用turboc 调用graphics中的函数避免了人工绘图的麻烦,利用turboc软件进行调试其他函数部分,待人工绘图结束后重新回归VC++6.0。
贪吃蛇游戏 C程序 报告
一、读程序题部分(贪吃蛇)1、程序的功能设计游戏界面,包括画墙、画蛇、画食物,并且设置蛇和食物的属性,编写蛇的运动方式和游戏方式。
2、主函数分析主函数中前两行与编写图形程序有关,第三行中调用Speed函数,把Speed 函数的返回值付给变量speed;第五行dwall函数的作用是画墙,函数中又调用wall函数来画墙上的砖块3、函数的调用关系4、数据变量定义作用定义食物的横坐标food.x和食物的纵坐标food.y可以有效的随机设置食物出现在界面的任何地方;定义snake.life表示蛇的生死以否,好判断是否结束游戏snake.dir=1;/*方向向右*/定义snake.x[0]和snake.y[0]表示蛇头的坐标,在后面蛇撞墙死的问题上用的到蛇头的坐标;定义蛇的节数snake.node,方便蛇每吃到食物节数增加;定义snake.level,显示蛇的闯关数5、主要函数的功能、流程图dwall():画墙wall():画组成墙的砖Speed():选择贪吃蛇的速度line():画线函数,画砖的线条gotoxy():定位坐标Play():调用各函数,开始完游戏GameOver():结束游戏6、程序的不足及改进没有障碍墙,游戏过于简单;没有游戏奖励,游戏趣味性不高;改进:设置障碍墙,蛇撞到墙也死;代码:for(j=200;j<=300;j+=10){wall(j,300);/*画横的障碍墙*/}for(j=300;j<=350;j+=10){wall(300,j);/*画竖的障碍墙*/}不足:没有游戏奖励,游戏趣味性不高;改进:增加生命值,蛇每吃到三颗食物,则增加一个生命值;代码:定义food.level,在Play函授中初始化,在设置蛇每吃到一颗食物就增长一节身体的代码后加上if(snake.node%3==0){snake.level++; /*除第一关外,其余每吃3颗食物,就增加一个生命值*/gotoxy(5,2);printf("The level is %d",snake.level); /*左上角显示出生命值(级别)*/}7、加上注释、改进后的完整代码#include <graphics.h>#include <stdlib.h>#include <dos.h>#include<conio.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define N 100/*贪吃蛇的最大长度*/#define P 0x1970/*定义暂停功能键*/int i,key;int speed;/*游戏速度*/struct FOOD{int x;/*食物的横坐标*/int y;/*食物的纵坐标*/int flag;/*标志是否要出现食物*/}food;struct Snake{int x[N];int y[N];int node;/*蛇的节数*/int dir;/*蛇移动方向*/int life;/*标志是死是活*/int level;/*定义生命值(级别)*/}snake;void GameOver();/*结束游戏*/void Play();/*玩游戏过程*/void dwall();/*画墙*/void wall(int x,int y);/*画组成墙的砖*/int Speed();/*选择贪吃蛇的速度*/main(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");speed=Speed();/*将函数返回值赋给speed*/cleardevice();/*清屏*/dwall();/*开始画墙*/Play();/*开始完游戏*/getch();closegraph();/*退出图形界面*/}void wall(int x,int y){int sizx=9;int sizy=9;setcolor(15);/*白色画砖的上边和左边*/line(x,y,x+sizx,y);line(x,y+1,x+sizx-1,y+1);line(x,y,x,y+sizy);line(x+1,y,x+1,y+sizy-1);setcolor(4);/*红色画砖的右面和下面*/line(x+1,y+sizy,x+sizx,y+sizy);line(x+2,y+sizy-1,x+sizx,y+sizy-1);line(x+sizx-1,y+2,x+sizx-1,y+sizy-1);line(x+sizx,y+1,x+sizx,y+sizy);setfillstyle(1,12);/*用淡红色填充砖的中间部分*/ bar(x+2,y+2,x+sizx-2,y+sizy-2);}void dwall()/*用前面画好的砖来画墙*/{int j;for(j=50;j<=600;j+=10){wall(j,40);/*画上面墙*/wall(j,451);/*画下面墙*/}for(j=40;j<=450;j+=10){wall(50,j);/*画左面墙*/wall(601,j);/*画右面墙*/}for(j=200;j<=300;j+=10){wall(j,300);/*画横的障碍墙*/}for(j=300;j<=350;j+=10){wall(300,j);/*画竖的障碍墙*/}}int Speed()/*选择贪吃蛇运行的速度*/ { int m;gotoxy(20,10);printf("level 1\n");gotoxy(20,12);printf("level 2\n");gotoxy(20,14);printf("level 3\n");gotoxy(20,16);/*增加一个速度选项*/ printf("level 4\n\t\tplease choose:");scanf("%d",&m);switch(m){case 1:return 60000;case 2:return 40000;case 3:return 20000;case 4:return 10000;default:cleardevice();Speed();}}void Play(void)/*游戏实现过程*/{srand((unsigned long)time(0));food.flag=1;/*1表示需出现新食物,0表示食物已存在*/ snake.life=0;/*标志贪吃蛇活着*/snake.dir=1;/*方向向右*/snake.x[0]=300;snake.y[0]=240;/*定位蛇头初始位置*/ snake.x[1]=300;snake.y[1]=240;snake.node=2;/*贪食蛇节数*/snake.level=1; /*生命值(级别)初始化*/do{while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/ {if(food.flag==1)/*需要出现新食物*/do{food.x=rand()%520+60;food.y=rand()%370+60;food.flag=0;/*标志已有食物*/}while(food.x%10!=0||food.y%10!=0);if(food.flag==0)/*画出食物*/{setcolor(WHITE);/*设置食物的颜色*/setlinestyle(3,0,3);rectangle(food.x,food.y,food.x+10,food.y+10); }for(i=snake.node-1;i>0;i--)/*实现蛇向前移动*/{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}switch(snake.dir){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;/*向下移*/}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;}}if(snake.x[0]<60||snake.x[0]>590||snake.y[0]<50||snake.y[0]>440)/*蛇是否撞到墙壁*/{GameOver();/*游戏结束*/snake.life=1; /*蛇死*/break;}if(snake.y[0]==300&&snake.x[0]>200&&snake.x[0]<=300)/*蛇是否撞到横的障碍墙*/ {GameOver();/*游戏结束*/snake.life=1; /*蛇死*/break;}if(snake.x[0]==300&&snake.y[0]>300&&snake.y[0]<=350)/*蛇是否撞到竖的障碍墙*/ {GameOver();/*游戏结束*/snake.life=1; /*蛇死*/break;}if(snake.x[0]==food.x&&snake.y[0]==food.y)/*判断是否吃到食物*/{setcolor(0);/*用背景色遮盖调食物*/rectangle(food.x,food.y,food.x+10,food.y+10);snake.node++;/*蛇的身体长一节*/if(snake.node%3==0){snake.level++; /*除第一关外,其余每吃3颗食物,就增加一个生命值*/gotoxy(5,2);printf("The level is %d",snake.level); /*左上角显示出生命值(级别)*/}food.flag=1;/*需要出现新的食物*/}setcolor(YELLOW);/*画蛇(设置蛇的颜色)*/for(i=0;i<snake.node;i++){ setlinestyle(0,0,1);rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]+10);}delay(speed);setcolor(0);/*用背景色遮盖蛇的的最后一节*/rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]+10);} /*endwhile(!kbhit)*/if(snake.life==1)/*如果蛇死就跳出循环*/break;key=bioskey(0);/*接收按键*/if(key==UP&&snake.dir!=4)/*判断是否往相反的方向移动*/snake.dir=3;elseif(key==DOWN&&snake.dir!=3)/*判断是否往相反的方向移动*/ snake.dir=4;elseif(key==RIGHT&&snake.dir!=2)/*判断是否往相反的方向移动*/snake.dir=1;elseif(key==LEFT&&snake.dir!=1)/*判断是否往相反的方向移动*/ snake.dir=2;elseif(key==P) getch();/*若按P键,则游戏暂停*/}while(key!=ESC);/*ESC键退出游戏*/}void GameOver(void){cleardevice();setcolor(RED);settextstyle(0,0,4);outtextxy(50,200,"GAME OVER,BYE BYE!");sleep(3);}。
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语言程序贪吃蛇课程设计报告
高级语言程序设计课程设计报告Experiment Designing reporter课程名称:高级语言程序设计英文名称 : C Program Experiment Designing专业:自动化 111学号: XXX姓名: XXX指导教师: XXX日期: 2012 年 6月 17日至 2011 年6 月 20 日山东工商学院信电学院山东工商学院信电学院自动111班第一组“贪吃蛇课程设计报告“一:课程设计内容程序功能介绍贪吃蛇游戏是一个经典小游戏,深受众多玩家喜爱,其规则是:一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
此游戏不仅能锻炼人的思维敏捷性,而且还可以提高玩家的逻辑判断能力。
设计思路我们小组称设计本次课题——贪吃蛇的思路为“贪快速上手贪吃蛇三步曲”:第一步:寻找到一个真正可以运行的已用C编好的贪吃蛇。
因为我们毕竟从未看到过用C编游戏的程序,让我们两手一抹黑的开始编写是有一定的困难的,如果我们自己找一个已经设计好的程序,以此为跳板实现我们想要达到的效果,那么肯定是高效的。
所以我们组统一决定,去寻找一个可以运行的C编译的贪吃蛇。
第二步:运行游戏并了解游戏程序。
我们认为,只有你运行并了解一个游戏,才能知道游戏里需要什么样的改进和创新,如果你自己本身就没玩过这个游戏,那么你就是再有技术,你也永远改进和改编不了一个游戏,因为你根本不知道你在干什么。
同样重要的是了解游戏程序。
因为只有看懂了程序,才能实现对他的改编,才能游刃有余。
第三步:寻找模块并分类,而后进行改编。
寻找到你想要改变的游戏内容的控制模块,比如,我想要增加一堵墙,那第一页共十六页自动化 111么就应该找到void DrawK(void){setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);for(i=200;i<=500;i+=10)rectangle(i,200,i+10,209);}然后要找到:改变蛇初始长度、颜色、初始位置的模块,改变苹果出现位置的模块,让蛇见墙死的模块,让蛇吃苹果加长的模块……….并且进行分类,这样下次再想实现某个目标时,可以一目了然的进行改编。
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语言中所学的知识,合理的运用资料,实现理论与实际相结合。
(1).收集资料,分析课题,分解问题,形成总体设计思路;(2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(4).完成课程设计报告,并进行答辩三、需求分析3.1、程序功能贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
3.2、设计思想程序关键在于表示蛇的图形及蛇的移动。
用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。
移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。
食物的出现与消失也是画矩形块和覆盖矩形块。
为了便于理解,定义两个结构体:食物与蛇。
3.3、流程图四、设计的具体实现(1)函数定义函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用#define N 200#define M 200#include"graphics.h"#include<stdlib.h>#include<stdio.h>#include<string.h>#include<iostream.h>#include<dos.h>#include<conio.h>#include <windows.h>#define LEFT 97//A#define RIGHT 100//D#define DOWN 115//S#define UP 119//W#define Esc 0x011bint i,key;int score=0;int gamespeed=250;//游戏速度可根据实际情况自行调整struct Food {int x;//食物的横坐标int y;//食物的纵坐标int yes;//判断是否要出现食物的变量}food;//食物的结构体struct Snake{int x[M];int y[M];int node;//蛇的节数int direction;//蛇的移动方向int life;//蛇的生命,0表示活着,1表示死亡}snake;void Init();//图形驱动void Close();//图形结束void DrawK();//开始画面void GamePlay();//玩游戏的具体过程void GameOver();//游戏结束void PrScore();//输出成绩(2)主函数main( )主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序void main()//主函数{Init();//图形驱动DrawK();//开始画面GamePlay();//玩游戏的具体过程Close();//图形结束}void Init()//图形驱动{int gd=DETECT,gm;initgraph(&gd,&gm," ");/*此处为turboc的路径,读者可以根据自己的电脑而改*/ cleardevice();}(3)画界面函数DrawK( )主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。
(完整word版)贪吃蛇实验报告.docx
(完整word版)贪吃蛇实验报告.docx《计算机程序设计》课程设计报告课题名称贪吃蛇游戏班级学号姓名指导教师设计时间至设计地点常熟理工学院计算机科学与工程学院常熟理工学院计算机科学与工程学院目录1需求分析 (1)2系统分析和设计 (1)2.1数据结构的设计和选择的理由 (1)2.2系统模块划分和模块结构 (2)2.3流程图 (2)2.4数据类型、全局变量和函数说明 (3)3程序测试和运行结果 (4)4课程报告小结 (5)4.1分数重叠显示 (5)4.2速度太快 (5)4.3食物可能出现在蛇身上 (5)附录 A :程序源代码 (6)《 C 程序设计》课程设计1 需求分析【阐述课程设计应该完成的功能】使用键盘的上下左右,来控制蛇的运动方向,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. 吃到一个食物以后,蛇身会增加一节。
即该数组中的有效数据个数加一。
c贪吃蛇程序课程设计
c 贪吃蛇程序课程设计一、教学目标本课程旨在通过编写“贪吃蛇程序”,让学生掌握C语言编程的基本语法,理解面向对象编程的基本思想,提高问题解决能力,培养逻辑思维和团队合作精神。
1.掌握C语言的基本语法。
2.理解面向对象编程的基本概念。
3.学习使用数据结构实现贪吃蛇游戏。
4.能够使用C语言编写简单的程序。
5.能够使用面向对象的方式设计程序。
6.能够独立或团队合作完成贪吃蛇游戏的编写。
情感态度价值观目标:1.培养对编程的兴趣和热情。
2.培养团队合作和解决问题的能力。
3.培养严谨的科学态度和良好的编程习惯。
二、教学内容本课程的教学内容主要包括C语言的基本语法、面向对象编程思想和贪吃蛇游戏的设计与实现。
1.C语言的基本语法:数据类型、变量、运算符、控制结构等。
2.面向对象编程:类与对象、构造函数、成员函数、继承与多态等。
3.贪吃蛇游戏设计与实现:游戏逻辑、数据结构选择、算法实现等。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:用于讲解C语言的基本语法和面向对象编程的基本概念。
2.案例分析法:通过分析已有的贪吃蛇游戏代码,让学生理解游戏的设计与实现。
3.实验法:让学生通过编写代码,实践贪吃蛇游戏的制作,巩固所学知识。
四、教学资源1.教材:选择适合初中生的C语言编程教材。
2.多媒体资料:提供相关的编程教程和贪吃蛇游戏的示例代码。
3.实验设备:提供计算机和网络环境,让学生能够在线编程和测试。
五、教学评估本课程的评估方式包括平时表现、作业、考试和项目演示。
1.平时表现:评估学生在课堂上的参与度、提问回答和团队合作表现。
2.作业:布置编程练习,评估学生的编程能力和理解程度。
3.考试:进行期中和期末考试,评估学生的综合理解和应用能力。
4.项目演示:学生团队合作编写贪吃蛇程序,进行演示,评估学生的实践能力。
评估方式应客观、公正,能够全面反映学生的学习成果。
教师应及时给予反馈,帮助学生提高。
c语言贪吃蛇实训报告
c语言贪吃蛇实训报告C语言贪吃蛇实验报告C语言程序设计实训报告姓名专业班级指导教师二011年7 月14 日11.1 1.2目录实训目的和要求 (1)实训目的和任务........................................................... .................................. 1 实训要求........................................................... .. (1)22.1 2.2实训任务内容 (1)游戏规则........................................................... .................................................. 1 流程设计........................................................... .. (2)33.1 3.2 3.3软件使用说明 (3)编辑程序主要软件........................................................... ............................. 3 编辑程序辅助软件........................................................... ............................. 3 程序使用过程........................................................... ........................................ 3 3.3.1 3.3.2 3.3.3贪吃蛇进入........................................................... ............................. 3 贪吃蛇的玩法........................................................... ........................ 4 贪吃蛇的结束........................................................... (4)44.1 4.2实训心得和体会 (5)实训的心得........................................................... ............................................. 5 实训的体会........................................................... (5)参考文献.............................. 6 附录:部分程序清单. (7)1 实训目的和要求1.1 实训目的和任务1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C 语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 实训要求1. 分析实训题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用4. 设计完成后提交实训报告2 实训任务内容2.1 游戏规则通过一个学期对C语言程序设计的学习,经过实训,完善我们对C语言学习的漏洞和未学会的知识点,更加熟练的掌握C语言程序设计,锻炼我们独立自主设计程序编辑代码的能力,通过设计出来的程序,提高我们对C语言学习的兴趣,玩家通过键盘控制蛇在地图上寻找食物,蛇吃蛇食物,可以加分,碰到四壁游戏结束。
VC++实现贪吃蛇的实验报告
题目:利用VC++实现贪吃蛇小游戏一、题目:利用VC++实现贪吃蛇小游戏利用VC++实现的贪吃蛇小游戏更加注重可视化。
一条蛇在封闭的围墙内,在围墙内会随机出现一个食物,通过键盘上的W S A D四个键控制它向上,下,左,右四个方向移动。
当蛇头撞到食物时表示将食物吃掉,这时蛇身增长一节,得分加一。
接着随机生成食物,等待被蛇吃掉。
如果在移动过程中撞到墙壁或者自己的身体,则游戏结束。
游戏过程中,可以在菜单中选择暂停或者结束游戏,对游戏进行暂停或者退出。
二、编程要点(或基本思路、算法分析与说明):本次游戏设计包含两大模块,一个模块是贪吃蛇游戏本身算法的设计,完成了贪吃蛇的食物产生,获取食物,蛇的移动等功能。
另一个模块是利用MFC完成贪吃蛇的可视化显示,产生了一个对话框,在对话框可以控制游戏及游戏的显示。
1.贪吃蛇游戏算法设计包括:<1>果实出现的设计思路:(1)采用随机数生成果实出现坐标(2)判断当前生成的果实是否在贪吃蛇身体范围内。
(3)如果在,重新生成直到不在为止。
如果不在,则把坐标位置返回给调用对象。
<2>贪吃蛇更新的算法设计(1)接收玩家按下的方向键消息,并保存到方向变量中。
(2)定义一个时间定时器,用来控制蛇运动的速度。
(3)当每次时间间隔到达时,则根据方向变量来更新贪吃蛇curr(即贪吃蛇身体)向量。
(4)判断curr向量的第一个元素中的坐标数据是否碰到边界或者蛇身,如果有,则游戏结束。
否则,进行下一步。
(5)判断curr向量的第一个元素中的坐标数据是否与当前果实重合,如果有,表示贪吃蛇已经吃到果实。
这时就向贪吃蛇curr向量添加一个元素,并重新生成一个果实。
(6)吃到食物后,得分会同步增加。
2.利用MFC完成贪吃蛇的可视化显示:首先初始对话框,完成游戏的整体框架的显示。
然后游戏玩家在菜单栏里选择开始,暂停,结束等,控制游戏状态。
游戏开始后,玩家通过键盘上的消息控制蛇的运动。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言课程设计报告目录1、设计任务书 (1)1.1 题目与要求 (1)1.2 本系统涉及的知识点 (1)2、功能设计 (1)2.1 算法设计 (2)3、程序代码设计 (6)3.1 规则模块与动画模块 (6)3.2 游戏开始与结束选择模块和游戏难度选择模块 (6)3.3 游戏主体模块 (7)3.4 游戏失败提示模块 (8)3.5游戏代码及其相应注释 (9)4、C程序设计总结 (30)4.1程序调试 (31)4.2 课程总结 (35)5、参考文献 (35)1、设计任务书1.1 题目与要求本人计划编写一个贪吃蛇游戏,让同学们在无聊之际可以玩一会游戏放松一下-.-此游戏不会像英雄联盟那样容易上瘾,是学习紧张,生活紧张时的良好选择。
具体要求如下:1.开始动画;2.游戏规则的说明;3.游戏开始与结束的选择;4.游戏难度的选择;5.游戏得分的实时显示;6.游戏失败时的提示与显示分数;1.2 本系统涉及的知识点for循环,while循环,一维,二维数组,if-else,if语句,结构体,函数调用,windows.h库,conio.h的一些使用等;2、功能设计2.1 算法设计本游戏需要实现的功能和要求:1. 在最开始选择游戏开始的时候:gui ( ) ;规则函数会在屏幕的右侧显示游戏的规则和一些说明提示。
dong ( ) ;动画函数会运行,屏幕的左侧会出现一个游戏开始的动画。
即main( )函数的运行过程如图1所示:gui( ) 函数dong()函数kai()函数图1.main函数2. Kai( ) (游戏开始与结束) 函数利用if-else语句设计如图2所示的主菜单请输入选择编号(1-2)1 ---- 开始游戏2 ---- 结束游戏图2.游戏开始3. 选择1后,调用游戏难度选择函数,进入函数后是一个if-else-if语句实现的一个如图3所示的请选择游戏困难程度:1.简单模式2.一般模式3.困难模式图3.难度选择根据你所选的1 2 3 游戏难度函数会返回相应的数,设置的有一个难度数组,里面有每个难度对应的反应时间。
4.选择完难度系数后,会自动的进入到youxi(int xx,int bei)函数,此函数是游戏的主要核心。
在youxi函数中,游戏已准备就绪,前几个蛇身和一个食物已经出现,我们可以进行入下功能:操作游戏游戏暂停游戏退出2.2 部分模块流程图gui ( ) 函数dong( )函数kai()函数xuan( )函数youxi ( )函数游戏结束游戏开始jiesu ( )函数3、程序代码设计3.1 规则模块与动画模块1)函数原型:void gui( );void dong( );2)功能:利用for循环语句和printf,COORD,Sleep()函数完成光标的移动和游戏规则的输出。
3)变量及类型:COORD coord; 定义坐标结构体,通过它来移动光标的坐标。
int x,y,R,i; 定义x,y两个变量,用来传递坐标的位置。
R为游戏高度。
i为光标与边界距离。
4)说明:gui();通过for循环与光标的移动输出分割线,然后再通过光标的移动输出游戏规则;dong();通过for循环和i,x,y的变化和Sleep()的停顿效果,改变光标的位置,从外围到内部逐次输出,达到动画的效果。
3.2 游戏开始与结束选择模块和游戏难度选择模块1)函数原型:int kai( ); int xuan( );2)功能:利用for循环语句和printf,COORD函数完成对游戏屏幕左侧的清空,然后利用printf,scanf函数输出游戏的选择类型和输入玩家的选择。
3)变量及类型:COORD coord; 定义坐标结构体,通过它来移动光标的坐标。
int x,y,lp,xx; 定义x,y两个变量,用来传递坐标的位置;lp里存入玩家的选择,是kai( )函数的返回值;xx是xuan( )函数的返回值。
4)说明:通过for循环和光标的移动,输出空格使屏幕为空,然后printf函数输出提示语,scanf函数让玩家输入他的选择,最后返回玩家的选择。
3.3 游戏主体模块1)函数原型:int youxi(int xx,int bei);2)功能:利用for循环语句,while循环语句,if-else,if语句,break语句,结构体,一维,二维数组,printf,rand,kbhit,getch,COORD函数,完成整个游戏运行的功能。
3)变量及类型:struct node{int x,y;}shen[1000]; 定义贪吃蛇的每个身体坐标。
COORD coord;定义坐标结构体,通过它来移动光标的坐标。
char map[60][30];定义游戏地图。
char xiang[4]={'w','a','s','d'}; 存放贪吃蛇的方向。
int x,y,i,R=50,D=24,ll=0,fen=0,p,wu=0,wux,wuy,fafe=0; 定义多个变量,x,y用来传递坐标的位置;i为变量;R,D 用来代表游戏右边界和下边界;ll表示贪吃蛇的长度;fen记录贪吃蛇所吃的食物;p 记录贪吃蛇的方向;wux,wuy通过rand函数随机得到食物的位置;wu表示食物的状态,fafe表示游戏的状态。
4)说明:先通过for循环和光标的移动和printf清空游戏界面和设置边界,然后通过rand()函数得到第一个贪吃蛇身体和它的方向;for 循环,增加贪吃蛇的3个身体;然后rand()使随机出现一个食物,一个while循环+ Sleep 的停顿效果使游戏暂停,printf输出提示语,kbhit和getch 判断是否有键盘输入和得到键盘输入值,跳出while 进入游戏操作while循环中,通过printf输出没时刻的分数,通过Sleep,结构体,for,printf使贪吃蛇每隔一段时间向前移动一下。
kbhit和getch 判断是否有游戏玩家的方向操作并得到方向值,如果输入空格游戏会暂停,然后可以选择游戏继续或退出。
食物被贪吃蛇所吃会再次随机出现一个食物,while循环一直循环直至游戏失败或游戏退出返回游戏得分。
3.4 游戏失败提示模块1)函数原型:void jiesu( );2)功能:利用for循环语句和printf,COORD函数完成对游戏屏幕左侧中间位置的清空,然后利用printf,scanf函数输出游戏失败提示语。
3)变量及类型:COORD coord; 定义坐标结构体,通过它来移动光标的坐标。
int x,y,i,j; 定义x,y两个变量,用来传递坐标的位置;i,j 为循环变量。
4)说明:通过for循环和光标的移动,输出空格使屏幕为空,然后printf函数输出提示语。
3.5游戏代码及其相应注释#include<stdio.h>#include<string.h>#include<memory.h>#include<stdlib.h>#include<conio.h>#include<time.h>#include<windows.h>#define CX coord.X=x#define CY coord.Y=y#define SCP SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDL E),coord)//宏定义-.-struct node{int x,y;}shen[1000];void dong();void gui();int kai();int youxi();int xuan();void jiesu();int main(){COORD coord;int x,y,xx,lp,kp,nan[4]={300,400,200,100};system("color 74");/*设置颜色*/gui();/*显示规则*/dong();/*显示动画*/while (1){lp=kai();/*选择是否开始游戏*/if (lp==2){printf("\n\n\n谢谢来玩贪吃蛇!!\n欢迎下次再玩-.-\n");return 0;}xx=xuan();/*选择游戏难度*/kp=youxi(nan[xx],xx);/*进入游戏,得到分数*/x=51;y=14;CX;CY;SCP;printf(" ");/*消游戏中显示的得分... */if (kp==-1){x=51;y=12;CX;CY;SCP;printf("游戏中退出-.-请重新选择...");}else{x=51;y=12;CX;CY;SCP;printf("本次游戏得分为:%d",kp*10*xx);}}Sleep(100000);/*暂停一段时间*/ return 0;}int xuan()/*游戏难度选择模块*/ {COORD coord;int x,y,xx;for (x=0;x<50;x++)for (y=0;y<24;y++){CX;CY;SCP;printf(" ");/*消去左边屏幕*/ }x=0;y=0;CX;CY;SCP;printf("请选择游戏困难程度:\n"); printf("1.简单模式\n");printf("2.一般模式\n");printf("3.困难模式\n");scanf("%d",&xx);return xx;}void dong()/*动画模块*/{COORD coord;int x=20,y=11,i,R=24;CX;CY;SCP;/*改变光标位置。
*/ printf("贪吃蛇!");for (i=0;i<10;i++){x=i;for (y=x;y<R-x;y++){coord.X=x*2;coord.Y=y;SCP;printf("0 ");}x=(23-i);for (y=i;y<=x;y++){coord.X=x*2;coord.Y=y;SCP;printf("0 ");}x=i;for (y=x;y<R-x;y++){coord.Y=x;coord.X=y*2;SCP;printf("0 ");}x=(23-i);for (y=i;y<=x;y++){coord.Y=x;coord.X=y*2;SCP;printf("0 ");}Sleep(100);}return ;}void gui()/*规则模块*/{COORD coord;int x=50,y;for (y=0;y<26;y++){CX;CY;SCP;printf("|");}x=52;y=0;CX;CY;SCP;printf("游戏规则:");x=52;y=2;CX;CY;SCP;printf("1. w a s d 键控制贪吃蛇的方"); y=3;CX;CY;SCP;printf("向.");x=52;y=4;CX;CY;SCP;printf("2.当贪吃蛇碰到结界或自身会"); y=5;CX;CY;SCP;printf("死亡.");x=52;y=6;CX;CY;SCP;printf("3.游戏中间按空格键会暂停."); x=52;y=8;CX;CY;SCP;printf("4.游戏暂停后,按'1'键游戏继"); y=9;CX;CY;SCP;printf("续,按'0'键会回到刚开始游戏"); y=10;CX;CY;SCP;printf("时的选择界面.");}int kai()/*游戏开始与结束选择模块*/ {COORD coord;int x,y,lp;for (x=0;x<50;x++)for (y=0;y<24;y++){CX;CY;SCP;printf(" ");}x=0;y=0;CX;CY;SCP;printf("1.游戏开始\n");printf("2.游戏结束\n");printf("请选择:");scanf("%d",&lp);return lp;}int youxi(int xx,int bei)/*游戏主体模块*/{COORD coord;char map[60][30];/*地图*/char xiang[4]={'w','a','s','d'};/*方向*/int x,y,i,R=50,D=24,ll=0,fen=0,p,wu=0,wux,wuy,fafe=0;/*fafe用1和0模拟bool 类型,,,R是右边界D是下边界.. */ char zhiling,kp;for (x=0;x<60;x++)for (y=0;y<30;y++)map[x][y]=' ';/*地图初始化*/for (x=0;x<50;x++)for (y=0;y<25;y++){CX;CY;SCP;printf(" ");}y=24;/*蛇x为0-49,,y为0-23; */for (x=0;x<50;x++){CX;CY;SCP;printf("="); /*下边界*/}shen[ll].x=rand()%8+20;shen[ll++].y=rand()%6+10;x=shen[ll-1].x;y=shen[ll-1].y;CX;CY;SCP;map[x][y]='+';printf("+");/*蛇头*/p=rand()%4;/*初始方向*/if (xiang[p]=='w'){for (i=0;i<3;i++)/*增加三个蛇身*/{shen[ll].x=shen[ll-1].x;shen[ll].y=shen[ll-1].y-1;ll++;x=shen[ll-1].x;y=shen[ll-1].y;CX;CY;SCP;map[x][y]='+';}}else if (xiang[p]=='a'){for (i=0;i<3;i++){shen[ll].x=shen[ll-1].x-1;shen[ll].y=shen[ll-1].y;ll++;x=shen[ll-1].x;y=shen[ll-1].y;CX;CY;SCP;map[x][y]='+';printf("+");}}else if (xiang[p]=='s'){for (i=0;i<3;i++){shen[ll].x=shen[ll-1].x;shen[ll].y=shen[ll-1].y+1;ll++;x=shen[ll-1].x;y=shen[ll-1].y;CX;CY;SCP;map[x][y]='+';}}else if (xiang[p]=='d'){for (i=0;i<3;i++){shen[ll].x=shen[ll-1].x+1;shen[ll].y=shen[ll-1].y;ll++;x=shen[ll-1].x;y=shen[ll-1].y;CX;CY;SCP;map[x][y]='+';printf("+");}}while (1){wux=rand()%R;wuy=rand()%D;if (map[wux][wuy]!='+'){x=wux;y=wuy;CX;CY;SCP;map[x][y]='#';break;}}while (1){x=51;y=12;CX;CY;SCP;printf("按任意方向键开始游戏...");if(kbhit())/*kbhit函数判断是否有键盘输入*/{kp=getch();/*得到键盘输入*/if (kp=='w'||kp=='a'||kp=='s'||kp=='d'){x=51;y=12;CX;CY;SCP;printf(" ");/*消提示语*/break;}}Sleep(100);}while (1){x=51;y=14;CX;CY;SCP;printf("得分:%d",fen*10*bei);if(kbhit())/*判断是否有键盘输入*/zhiling=getch();/*得到键盘输入*/if (zhiling!=xiang[p]){if(p<2&&zhiling!=xiang[p+2]||p>1&&zhiling!=xiang[p-2])/*判断方向不反向,不然会直接死亡。