(完整版)《贪吃蛇游戏课程设计》报告
原创c语言贪吃蛇课程设计报告

原创C语言贪吃蛇课程设计报告1. 引言贪吃蛇游戏是一款经典的电子游戏,它可以帮助玩家提高反应能力和思维敏捷性。
本文档旨在介绍一个基于C语言的贪吃蛇课程设计项目。
通过这个项目,我们可以学习C语言的基本语法、算法和程序设计方法。
2. 项目概述2.1 项目背景贪吃蛇游戏是一款非常受欢迎的经典游戏,现在几乎在所有平台都有相应的版本。
它的原理很简单:玩家控制一条蛇在屏幕上移动,蛇吃掉食物后身体长度增加,游戏结束条件为蛇撞到屏幕边缘或自己的身体。
通过这个项目的设计与实现,我们可以提高自己的编程能力,并加深对C语言的理解。
2.2 项目目标本项目的目标是设计并实现一个具有基本功能的贪吃蛇游戏。
主要功能包括:•蛇的移动控制:玩家可以通过键盘控制蛇的移动方向。
•食物的生成:在屏幕上随机生成食物,蛇吃掉食物后身体长度增加。
•碰撞检测:判断蛇是否撞到屏幕边缘或自己的身体,游戏在此情况下结束。
•分数统计:记录玩家的得分,并在游戏结束时显示最终得分。
3. 设计思路3.1 游戏界面设计游戏界面需要在控制台中实现,使用C语言的标准输入输出函数可以很方便地实现界面的绘制和更新。
我们可以使用二维数组来表示屏幕,每个元素代表一个方格,蛇和食物在屏幕上的位置可以通过修改二维数组的值来实现。
3.2 蛇的移动控制蛇的移动控制是游戏的核心功能之一。
我们可以使用一个链表数据结构来表示蛇的身体,每个节点代表一个蛇的身体节。
通过不断更新链表节点的位置,实现蛇的移动。
玩家可以通过键盘输入来控制蛇的移动方向。
3.3 食物的生成食物的生成是游戏的另一个重要功能。
我们可以随机生成一个二维数组的坐标,在该坐标上放置食物。
在蛇吃掉食物后,就可以在链表的末尾添加一个新的节点,使蛇的长度增加。
3.4 碰撞检测碰撞检测是判断蛇是否与屏幕边缘或自身的身体相撞的过程。
我们需要判断蛇的头节点是否与屏幕边缘或其他身体节点的位置重叠,如果重叠则游戏结束。
3.5 分数统计分数统计是记录玩家得分的功能。
贪吃蛇游戏课程设计

贪吃蛇游戏课程设计一、课程目标知识目标:1. 学生能理解贪吃蛇游戏的基本原理,掌握游戏设计中涉及的坐标、方向和移动等概念。
2. 学生能运用所学的编程知识,使用合适的数据结构和算法实现贪吃蛇游戏的主体功能。
3. 学生了解游戏设计中的用户界面设计原则,并能将其应用于贪吃蛇游戏的界面设计。
技能目标:1. 学生掌握运用编程语言进行游戏设计的基本技巧,提高编程实践能力。
2. 学生能够运用逻辑思维和问题分析能力,解决游戏设计过程中遇到的问题。
3. 学生通过团队协作,提高沟通能力和项目协作能力。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣,增强学习信息技术的积极性。
2. 学生在游戏设计过程中,培养创新意识和审美观念,提高对美的追求。
3. 学生通过课程学习,认识到编程对生活的影响,激发将所学知识应用于实际生活的意识。
课程性质:本课程为信息技术学科选修课程,适用于有一定编程基础的学生。
学生特点:学生具备基本的计算机操作能力,对编程有一定了解,对游戏设计感兴趣。
教学要求:结合学生特点,注重实践操作,鼓励学生创新和团队协作,提高学生的编程能力和审美观念。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 游戏设计基本原理:介绍游戏设计的基本概念、流程和原则,结合贪吃蛇游戏案例分析游戏设计中的核心要素。
- 课本章节:第三章“游戏设计概述”- 内容:游戏设计流程、游戏类型、游戏设计原则2. 编程语言和工具:复习巩固编程基础,介绍贪吃蛇游戏所需的基本编程知识和工具。
- 课本章节:第二章“编程基础”- 内容:变量、数据类型、运算符、流程控制、函数、数组3. 数据结构和算法:分析贪吃蛇游戏中涉及的数据结构(如链表、数组)和算法(如坐标计算、碰撞检测)。
- 课本章节:第四章“数据结构与算法”- 内容:链表、数组、坐标计算、碰撞检测4. 游戏界面设计:介绍用户界面设计原则,指导学生设计贪吃蛇游戏的界面。
贪吃蛇设计报告

贪吃蛇设计报告1. 引言贪吃蛇是一款经典的游戏,它的目标是通过操纵蛇的移动,吃掉尽量多的食物,并尽可能长大。
本文将介绍贪吃蛇游戏的设计过程和实现细节。
2. 游戏介绍贪吃蛇游戏由一个蛇和若干个食物组成。
玩家通过控制蛇的移动方向,使蛇能够吃到食物并增长身体长度。
当蛇撞到游戏边界或自己的身体时,游戏结束。
3. 游戏设计3.1 游戏场景贪吃蛇游戏的场景是一个矩形的游戏区域,可以使用二维数组来表示。
每个数组元素可以表示该位置的状态,如蛇的身体部分、食物或空白区域。
3.2 蛇的移动蛇的移动是关键部分,可以通过控制蛇的方向来实现。
蛇的长度会随着吃到食物而增加,当蛇移动时,蛇的尾部会被剪切掉,而蛇头会根据移动方向新增一个位置。
3.3 食物的生成食物的生成可以随机选择游戏区域的一个空白位置,并将该位置设置为食物。
3.4 碰撞检测碰撞检测主要检测蛇是否撞到了游戏边界或自己的身体。
当蛇的头部位置与边界或身体的其他部分位置重叠时,游戏结束。
4. 游戏实现贪吃蛇游戏可以使用编程语言来实现。
以下是一个示例的实现代码:import random# 游戏区域的大小width =10height =10# 蛇的初始位置和方向snake = [(0, 0)]direction = (1, 0)# 食物的位置food = (random.randint(0, width-1), random.randint(0, height-1))# 游戏是否结束的标志game_over =False# 游戏主循环while not game_over:# 处理输入# ...# 更新蛇的位置head = snake[0]new_head = (head[0] + direction[0], head[1] + direction[1])snake.insert(0, new_head)# 如果蛇头位置与食物位置重叠,则吃掉食物并生成新的食物if new_head == food:food = (random.randint(0, width-1), random.randint(0, height-1)) else:snake.pop()# 检测碰撞if new_head[0] <0or new_head[0] >= width or new_head[1] <0or ne w_head[1] >= height:game_over =Trueif new_head in snake[1:]:game_over =True# 渲染游戏界面# ...# 游戏结束,显示得分等信息# ...5. 总结贪吃蛇游戏是一款简单但耐人寻味的游戏,通过实现蛇的移动、食物的生成和碰撞检测等功能,可以让玩家体验到游戏的乐趣。
java贪吃蛇课程设计报告总结

课程设计报告:Java贪吃蛇游戏1. 背景贪吃蛇是一款经典的街机游戏,通过控制蛇的移动,吃掉食物,使蛇变得越来越长,直到触碰到边界或自己的身体为止。
该游戏在20世纪80年代流行起来,并成为了一种代表性的休闲娱乐方式。
贪吃蛇游戏可以提高玩家的反应能力、体力协调和空间感知能力。
本次课程设计旨在通过使用Java编程语言,设计实现一个简化版的贪吃蛇游戏,以加深学生对面向对象程序设计的理解和应用,并培养学生的逻辑思维能力和团队协作精神。
2. 分析2.1 游戏规则分析在贪吃蛇游戏中,玩家通过控制蛇的移动方向,使蛇吃到食物从而变长,直到游戏结束。
具体规则如下:•初始状态下,蛇由一个长度为3的身体组成,呈水平放置。
•蛇的移动方式为每个时间单位(通常为固定时间间隔)前进一格,移动方向由玩家通过键盘输入控制。
•蛇在吃到食物后,身体变长一节,并在地图上随机生成新的食物。
•蛇头碰到地图边界或自身身体的任意部分,游戏结束。
2.2 功能模块分析基于对游戏规则的分析,可以将贪吃蛇游戏的功能模块划分如下:•游戏初始化模块:初始化地图、蛇的初始位置和长度、生成初始食物等。
•用户输入模块:读取用户的键盘输入,控制蛇的移动方向。
•游戏逻辑模块:根据用户输入和游戏规则,更新蛇的位置、判断是否吃到食物或撞到障碍物等。
•地图绘制模块:将地图、蛇、食物等元素绘制到屏幕上。
•游戏循环模块:根据固定时间间隔循环执行游戏逻辑、用户输入和地图绘制等操作。
•游戏结束模块:在游戏结束时输出游戏得分等信息。
2.3 设计思路基于上述功能模块的分析,我设计了如下的实现思路:1.使用Java面向对象编程的思想,抽象出地图、蛇、食物等对象,并为其封装相应的属性和方法。
2.在游戏初始化模块中,创建地图对象、蛇对象,初始化位置和长度,并生成初始食物。
3.在用户输入模块中,利用Java的键盘事件监听机制,获取用户的方向输入,并通过调用蛇对象的移动方法实现控制蛇的移动方向。
贪吃蛇游戏课程设计实验报告

贪吃蛇游戏课程设计实验报告辽宁科技⼤学课程设计说明书设计题⽬:基于C#的贪吃蛇游戏学院、系:装备制造学院专业班级:计算机科学与技术学⽣姓名:叶佳佳指导教师:丁宁成绩:2015年 12⽉ 12⽇⽬录⼀、概述 (1)1、⽤C#实现该设计的⽅法 (1)2、贪吃蛇游戏说明 (1)⼆、实验⽬的及设计要求 (1)1、实验⽬的 (1)2、实验要求 (2)三、课程设计具体实现 (2)1、概要设计 (2)1.1、设计思想 (2)1.2、主模块实现 (2)1.3、主函数流程图 (4)2、详细设计 (5)2.1、设计思想 (5)2.2、具体模块实现: (5)四、调试过程及运⾏结果 (10)1、调试过程 (10)2、实验结果 (11)五、实验⼼得 (12)六、参考资料 (13)七、附录:源代码 (13)⼀、概述1、⽤C#实现该设计的⽅法⾸先应该了解设计要求,然后按照功能设计出实际模块,每个模块都要完成特定的功能,要实现模块间的⾼内聚,低耦合。
设计模块是⼀个相当重要的环节,模块的数量不宜太多,也不宜太少,要是每个模块都能⽐较简单的转换成流程图。
模块设计完成后,就该给每个模块绘制流程图。
流程图要尽可能的简单且容易理解,多使⽤中⽂,补⼀些过长的代码,增加理解难度。
此外,流程图应容易转换成代码。
根据流程图编写好代码后在WindowsXP操作系统,/doc/a45d421c80c758f5f61fb7360b4c2e3f5627252f.html 2008开发环境下进⾏运⾏测试,检查错误,最终设计出可⾏的程序。
2、贪吃蛇游戏说明游戏操作要尽可能的简单,界⾯要尽可能的美观。
编写程序实现贪吃蛇游戏,贪吃蛇游戏是⼀个深受⼈们喜欢的游戏:⼀条蛇在密闭的围墙内,在围墙内随机出现⼀个⾷物,通过键盘上的四个光标键控制蛇向上下左右四个⽅向移动,蛇头撞到⾷物,则表⽰⾷物被吃掉,这时蛇的⾝体长⼀节,同时计10分;接着⼜出现⾷物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或⾝体交叉(蛇头撞到⾃⼰的⾝体),则游戏结束。
设计贪吃蛇实验报告

一、实验目的1. 掌握游戏设计的基本流程和原则。
2. 学会使用Unity游戏引擎进行游戏开发。
3. 提高编程能力和逻辑思维能力。
4. 实现贪吃蛇游戏,并优化游戏性能。
二、实验环境1. 操作系统:Windows 102. 开发工具:Unity 2019.4.10f13. 编程语言:C#三、实验内容1. 游戏设计2. 场景搭建3. 贪吃蛇游戏逻辑实现4. 游戏优化四、实验步骤1. 游戏设计(1)确定游戏主题:贪吃蛇(2)游戏规则:玩家控制蛇头,通过移动蛇头吃到食物,蛇的长度逐渐增加。
同时,蛇头不能撞到墙壁或自己的身体,否则游戏结束。
(3)游戏界面:包括游戏主界面、游戏场景、得分显示、游戏结束界面等。
2. 场景搭建(1)创建游戏场景:使用Unity编辑器创建一个3D场景,命名为“贪吃蛇场景”。
(2)添加墙壁:使用Unity编辑器中的Cube对象创建墙壁,设置墙壁的位置和大小,使墙壁围成一个封闭的空间。
(3)添加食物:使用Unity编辑器中的Sphere对象创建食物,设置食物的位置和大小。
3. 贪吃蛇游戏逻辑实现(1)创建蛇头和蛇身:使用Unity编辑器中的Cube对象创建蛇头和蛇身,设置蛇头和蛇身的位置和大小。
(2)控制蛇头移动:编写C#脚本,实现蛇头在四个方向上的移动。
(3)蛇头吃到食物:当蛇头与食物接触时,蛇的长度增加,食物消失。
(4)蛇头撞到墙壁或自身:当蛇头与墙壁或自身接触时,游戏结束。
4. 游戏优化(1)提高游戏帧率:通过优化代码和减少资源消耗,提高游戏帧率。
(2)优化蛇身移动:在蛇身移动时,减少不必要的计算,提高游戏性能。
五、实验结果与分析1. 实验结果通过以上步骤,成功实现了一个简单的贪吃蛇游戏。
游戏界面简洁,操作方便,符合游戏设计原则。
2. 实验分析(1)游戏设计方面:游戏规则简单易懂,游戏画面简洁,符合玩家需求。
(2)场景搭建方面:墙壁和食物的布局合理,有利于游戏进行。
(3)游戏逻辑实现方面:蛇头移动、吃到食物、撞墙等逻辑实现正确,游戏运行稳定。
贪吃蛇课程设计报告
本科课程设计贪吃蛇游戏设计摘要 (3)Abstract (3)一.详细设计 (4)1.属性解释 (4)2.初始化坐标: (4)3.调用线程 (4)4.具体功能实现: (5)4.1.移动功能的实现: (5)4.2.吃食物功能实现: (6)4.3.判断游戏是否结束的功能实现: (8)4.4.画图方法的实现 (9)4.5.监听键盘动作: (10)5.界面的设计: (11)5.1进入程序界面设计 (11)5.2第2个界面的设计: (12)5.3第3个界面设计: (12)6.把程序植入手机中 (13)二.字符设备驱动程序实现 (13)三.总结: (14)四.参考文献: (14)五.致谢 (15)摘要程序核心思想:运行程序首界面(进入游戏,退出游戏)进入游戏后选择难度(简单,普通,高难)根据不同的难度设置相应的属性。
进入游戏界面。
首先初始化蛇的坐标,食物的坐标,和障碍物的坐标。
然后获取当前屏幕的大小为将来的边界判断做准备。
然后创建并执行线程。
线程基本流程:判断是否是暂停阶段,如果没有暂停就执行:eatFood();move(direction); repaint();如果游戏结束了就重新游戏或者退出。
AbstractCore of the process: first running the program interface (into the game, withdraw from the game) into the game after the difficult choice of (simple, ordinary, highly difficult) depending on the difficulty of setting the corresponding attribute. Into the game interface. First initialize the coordinates of the snake, coordinates food, and the coordinates of obstructions. And access to the size of the current screen for the future of the border to prepare for judgement. And then create and execution threads. Thread the basic process: determine whether the stage is suspended, if not the moratorium on the implementation of: eatFood (); move (direction); repaint (); game to an end if the game or out on the re.一.详细设计1.属性解释用1个2维数组snake[200][2]存放蛇身坐标,第2维是0的时候代表横坐标,为1的时候为纵坐标。
c贪吃蛇游戏课程设计
c 贪吃蛇游戏课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言的基本语法和编程逻辑。
2. 学生能运用C语言编写简单的贪吃蛇游戏,包括游戏界面显示、蛇的移动、食物的生成和得分功能。
3. 学生了解并掌握结构体、数组、函数等C语言核心概念在游戏编程中的应用。
技能目标:1. 学生通过编写贪吃蛇游戏,提高逻辑思维和问题解决能力。
2. 学生能够运用C语言进行程序设计和调试,培养编程实践能力。
3. 学生能够自主查找并利用相关资料,提高信息检索和自主学习能力。
情感态度价值观目标:1. 学生在编程过程中,培养耐心和细心的品质,增强面对困难的勇气和毅力。
2. 学生通过团队协作,培养沟通和合作意识,提高团队协作能力。
3. 学生在完成游戏项目的过程中,激发对编程和计算机科学的兴趣,树立学习信心。
课程性质:本课程为C语言编程实践课,以贪吃蛇游戏为载体,让学生在实际编程过程中掌握C语言的基本知识和技能。
学生特点:学生处于初中阶段,对计算机编程有一定的好奇心,但编程基础薄弱,需要通过具体实例来激发学习兴趣。
教学要求:教师需关注学生的个体差异,提供个性化的指导,帮助学生掌握C 语言编程技能,并注重培养学生的学习兴趣和情感态度。
在教学过程中,将课程目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. C语言基础知识回顾:变量、数据类型、运算符、控制结构(循环和条件语句)。
2. 函数:介绍函数定义、调用、参数传递和返回值,强调模块化编程的重要性。
3. 结构体:讲解结构体的定义和使用,以及如何用结构体表示贪吃蛇和食物。
4. 数组:介绍数组的概念和应用,特别是在贪吃蛇游戏中存储和操作蛇的移动。
5. 图形显示:利用C语言图形库(如curses或SDL)实现贪吃蛇游戏的图形界面。
6. 游戏逻辑:编写蛇的移动、食物的随机生成、吃到食物后的身体增长和得分逻辑。
7. 键盘输入:处理玩家的键盘输入,实现蛇的方向控制。
8. 游戏循环:构建游戏循环,使游戏能够在用户输入下不断运行和更新状态。
贪吃蛇课程设计python报告
贪吃蛇课程设计python报告一、教学目标本课程旨在通过学习Python编程语言实现一个贪吃蛇游戏,让学生掌握以下知识目标:1.理解Python的基本语法和数据类型。
2.学会使用Python进行流程控制和函数定义。
3.理解面向对象编程的基本概念。
4.能够独立编写简单的Python程序。
5.能够利用Python实现基本的贪吃蛇游戏。
情感态度价值观目标:1.培养学生对编程的兴趣,提高学生的信息素养。
2.培养学生解决问题的能力,提高学生的创新意识。
二、教学内容根据课程目标,我们选择Python作为编程语言,以贪吃蛇游戏为例,让学生在实践中掌握编程知识和技能。
具体的教学大纲如下:1.第一章:Python基础。
学习Python的基本语法、数据类型和变量。
2.第二章:流程控制。
学习条件语句、循环语句和函数定义。
3.第三章:面向对象编程。
学习类和对象的概念,以及如何定义和调用方法。
4.第四章:贪吃蛇游戏实现。
利用所学知识编写贪吃蛇游戏的代码,并进行调试和优化。
三、教学方法为了激发学生的学习兴趣和主动性,我们采用以下教学方法:1.讲授法:讲解Python的基本语法、数据类型和流程控制知识。
2.讨论法:学生讨论面向对象编程的概念和实现方法。
3.案例分析法:通过分析贪吃蛇游戏的代码,让学生理解编程思路。
4.实验法:让学生动手编写和调试贪吃蛇游戏,提高实际操作能力。
四、教学资源为了支持教学内容和教学方法的实施,我们准备以下教学资源:1.教材:《Python编程:从入门到实践》2.参考书:《Python核心编程》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、网络环境通过以上教学资源,学生可以更好地学习Python编程,并在实践中掌握贪吃蛇游戏的开发技能。
五、教学评估本课程的教学评估将采取多元化方式进行,以全面、客观、公正地评估学生的学习成果。
评估方式包括:1.平时表现:通过课堂参与、提问、小组讨论等环节,评估学生的学习态度和积极性。
贪吃蛇设计报告
目录1. 课题分析与方案选择 (3)2.总体设计 (4)2.1 理论分析 (5)2.1.1 算法设计分析 (5)2.1.2 数据结构分析 (8)2.1.1 流程框图 (9)2.2 代码编写 (9)2.2.1 工具类 (9)2.2.2 载入类 (11)2.2.3 蛇类 (12)2.2.4 食物类 (13)2.2.5 地图类 (14)2.2.6 运行类 (15)3. 游戏测试 (15)3.1 载入界面测试 (16)3.2 简单模式测试 (16)3.3 普通模式测试 (16)3.4 困难模式测试 (17)4. 问题分析与解决 (19)5. 总结 (20)摘要贪吃蛇游戏作为一款简单游戏,是手机游戏的代表,在十多年前风靡全世界,时至今日,贪吃蛇游戏任然活跃的网络的各个角落。
本次编写的便是一款经典的贪吃蛇游戏,任务确定为实现贪吃蛇游戏过程。
作为游戏的组成,通过必要的图形,文字界面来引导游戏者参与到这款游戏中,更有效的吸引游戏者的兴趣,为了拓展游戏者对高分和刺激的追求,设定各种难度的关卡也成为了游戏的必需品,贪吃蛇游戏的编写共有八个类,其中,主要包括游戏的控制与游戏界面的建立两个方面,对于前者,需要通过控制台来获取输入,而对于后者,要求应用合适的数据结构和算法,通过编写本次课程设计,对理论知识与实际作品之间的关系有了更加深刻影响。
关键字:贪吃蛇,界面,难度控制,数据结构1 课题析与方案选择1.1课题分析本次设计为贪吃蛇游戏,一款游戏就必须要与使用者拥有良好的交互界面,使用C++对DOS界面显示的处理需要细致和精细,在游戏过程中,那么就会有游戏载入界面,游戏进行界面,和结束界面,在输入方面,这款游戏采用上下左右四个按键进行控制,需要用到回车键进行选择确定,而游戏的目标,则是获取更高分数,挑战更高难度。
功能设计框图1.2方案选择1.1.1软件选择本次编写软件为CODEBLOCKS 16.011.1.2设计选择通过分析,将游戏分为输入,游戏运行,输出三大部分,对于每个部分需要用不同的类进行实现和联系,大概将其分为五个类,分别为工具类,载入类,蛇体类,游戏界面类和运行类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
贪吃蛇游戏程序设计一、课程设计任务贪吃蛇小游戏程序设计二、设计要求通过游戏程序设计,提高编程兴趣与编程思路,巩固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( )主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。
void DrawK()//开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙{setbkcolor(GREEN);setcolor(LIGHTRED);setlinestyle(0,0,5);//设置线型for(i=50;i<=600;i+=10)//画围墙{rectangle(i,40,i+10,49);//上边rectangle(i,451,i+10,460);//下边}for(i=40;i<=450;i+=10){rectangle(50,i,59,i+10);//左边rectangle(601,i,610,i+10);//右边}}(4)游戏具体过程函数GamePlay()这是游戏的主要组成部分,他采用将前一节的坐标赋给后一节,用背景颜色将最后节去除,当蛇头的坐标与食物的坐标相等时,表示食物被吃掉了。
void GamePlay()//玩游戏的具体过程{rand();//随机数发生器food.yes=1;//1表示需要出现新食物,0表示已经存在食物snake.life=0;//蛇活着snake.direction=1;//方向往右snake.x[0]=100;snake.y[0]=100;//舌头坐标snake.x[1]=110;snake.y[1]=100 ;snake.node=2;//蛇的节数PrScore();//输出分数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);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.direction)//1,2,3,4表示上下左右四个方向,通过这个判断来移动蛇头{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]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)//蛇是否撞到墙壁{GameOver();//本次游戏结束snake.life=1;//蛇死}if(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.x[snake.node]=-20;snake.y[snake.node]=-20;//新的一节先放在看不见得位置,下次循环就取前一节的位置snake.node++;//蛇的身体长一节food.yes=1;score+=10;PrScore();//输出新的得分}setcolor(WHITE);//画出蛇for(i=0;i<snake.node;i++)rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);Sleep(gamespeed);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);}if(snake.life==1)//如果蛇死就跳出循环break;key=getchar();//接受案件if(key==Esc)//按ESC键退出break;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)}(5)游戏结束函数GameOver()游戏结束,清除屏幕,输出分数,显示游戏结束信息。
void GameOver()//游戏结束{PrScore();setcolor(RED);outtextxy(100,100,"我会回来的");getch();}void PrScore()//输出成绩{char str[10];setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);sprintf(str,"score:%d",score);outtextxy(55,20,str);}void Close()//图形结束{getch();closegraph();}五、调试及解决方法可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。