贪吃蛇界面图及流程图

合集下载

VF游戏设计_贪吃蛇

VF游戏设计_贪吃蛇

游戏规则:移动“蛇”,使“蛇”吃掉“食物”(即“蛇”与“食物”重合)。

操作要求:单击“开始”按钮,“蛇”开始移动。

游戏者可通过操作键盘上的“↑”、“↓”、“←”、“→”键来控制“蛇”的移动方向,使“蛇”能够准确吃掉“食物”。

如果正确吞吃一次,“蛇”身将会自动增长一节,速度增加10s;反之,如果“蛇”在移动过程中撞到活动界面的边界线或碰到自己的身体,游戏结束。

通过游戏规则和操作要求的介绍,我主要从以下四个方面来介绍该款游戏的设计。

一、游戏界面部分的设计“蛇”的活动界面是一个9×9的方格。

这部分可利用容器控件Container1的Init初始化事件在容器控件Container1中增加9行9列81个标签控件对象lab1 ̄lab81来实现。

容器控件Container1的Init事件代码如下:public lab[9,9]for i=1 to 81 k=ALLT(STR(i)) this.addobject('lab&k','Label') lab[i]=this.lab&kendforfor i=1 to 9 for j=1 to 9 with lab[i,j] .left=25*(j-1)+2 .top=20*(i-1)+2 .height=20 .width=25VF游戏设计——贪吃蛇王宏宇 辽宁石油化工大学职业技术学院 113001我们都知道Visual FoxPro 是一种数据库管理语言,它简单、易学、易用,并因其可视化编程技术的完美表现和SQL语言功能的强大已成为编写数据库管理系统的主要语言之一。

但也正是因为它在数据库方面的广泛应用,使很多人认为它就只能在数据库系统中进行存取数据和管理资源的工作。

其实,利用它我们还可以做很多其它的事情,现在我就给大家介绍一款利用Visual FoxPro精美的控件和丰富的程序语句编写的游戏——“贪吃蛇”。

图1所表示的就是“贪吃蛇”的主界面,“蛇”由黑色方块表示,“食物”由深灰色方块表示。

贪吃蛇游戏设计课件(PPT31张)

贪吃蛇游戏设计课件(PPT31张)

一、 主界面(Start类)分析 此类继承自系统类 System.Windows.Forms.Form,是 本程序的主窗体。 Start类主要用了继承来的字段、属性、方法和事 件,我们只是在Start类中通过添加控件及设置控 件的属性添加了对象字段和对象属性字段。
WinForm项目开发》
项目:贪吃蛇游戏设计
分析设计并实现系统主菜单

//模式窗体
Form qform=new Form(); qform.ShowDialog(); 6)“帮助”子菜单 功能:在一个消息框中显示帮助信息。
WinForm项目开发》
项目:贪吃蛇游戏设计
项目总结

本章学习了使用类和对象、GDI+绘图来创建项目。 类是面向对象程序设计的一个基本概念,是 对一组类似的对象的一般化描述,它包括: 字段、属性、方法和事件几类成员。类是创 建对象的模板,由类创建对象,可由下式表 示它们的关系。
1、MenuStrip控件
– MenuStrip 控件表示窗体菜单结构的容器。 可以将 ToolStripMenuItem 对象添加到表示菜单结 构中各菜单命令的 MenuStrip中。 每个ToolStripMenuItem 可以成为应用程序的 命令或其他子菜单项的父菜单 进入每个toolStripMenuItem命令的单击事件方 法与其他控件相同,即通过双击此菜单项。
WinForm项目开发》
项目:贪吃蛇游戏设计
分析Start类、应用Timer控制系统

timer控件
_ 实现在用户定义的时间间隔引发事件的计时器,此 计时器最宜用于 Windows 窗体应用程序中,并且 必须在窗口中使用 –1)控件的属性 ⑴Enabled 属性 获取或设置计时器是否正在运行。 如果计时器当前处于启用状态,则为 true;否 则为 false。默认为 false。

Flash动画制作-贪吃蛇游戏ppt课件

Flash动画制作-贪吃蛇游戏ppt课件


{

if (getProperty("/worm", _x) == getProperty("/tail"add currenttail, _x))

{

if (getProperty("/worm", _y) == getProperty("/tail"add currenttail, _y))
the arrow keys to comtrol the snake”,拖入arrow 和 apple元件。最后创建动 态文本框。变量名为eaten。拖入New Game按钮,添加动作脚本:
• on (release) {

gotoAndPlay("initialize");
•}
贪吃蛇游戏
• 10.新建图层”蛇和苹果”,在第3帧插入空白关键帧,拖入 worm、 worm_tail、 food元件。实例名称分别为:worm、 tail1、 tail2、 food。在第6帧插入空白关键帧,输入静态 文本:Game Over!
• 6。新建元件worm_tail,直径为16,放射状灰色,插入点为 (-8,-8)。
贪吃蛇游戏
• 7.新建按钮元件new_game如下:
• 8.新建图层”小格子“:在蓝色矩形上绘制16*16的小格子,白色,线宽1。复制 更多的小格子,摆放整齐。每行25个,共25行。
贪吃蛇游戏
• 9.新建图层“右面板”,输入静态文本“Worm!”及“Use
•{

if (!../:mright) {

../:mleft = 1;

../:mright = 0;

贪吃蛇游戏程序的设计说明

贪吃蛇游戏程序的设计说明

测控技术与仪器专业课程设计题单班级0982011 学生某某课程名称计算机课程设计课题贪吃蛇游戏程序设计设计要求 1.学习游戏设计有关知识。

2.设计贪吃蛇游戏程序。

3.调试并修改程序。

4.完成课程设计论文。

课题发给日期2011年6月25日课程设计完成日期2011年7月09日指导教师余某某评语:贪吃蛇游戏学生:某某班级:0882011指导老师:余某某摘要:编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙,在围墙随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。

作为一个完整的程序,必须考虑人机交流与用户体验。

游戏的界面不能太丑,更不能连个简单的界面都没有。

游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。

游戏的美观是一方面,游戏的在素质是另一方面。

一个游戏的优劣,最终由玩家决定。

在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。

关键词:贪吃蛇流程图c语言源程序目录1 前言 (1)2 课设容 (3)2.1课设目的 (3)2.2设计功能 (3)2.3结构设计 (7)3结论 (11)参考文献 (15)附录A (16)1 前言C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。

作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。

制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。

贪吃蛇说详细明

贪吃蛇说详细明

贪吃蛇目录一、游系功能介绍二、窗体界面设计三、S nack蛇类四、F ood食物类五、窗体代码设计六、实现流程图七、运行图解八、说明图解九、总结一.游戏功能介绍本游戏主要实现的是贪吃蛇吃东西,吃食物加分,每次吃一个食物他会变长,当分数达到一定值会升级,所谓的升级就是速度加快,当蛇头撞到自己的身体部位或者是墙游戏就会结束,所谓的撞墙就是蛇头越界超出自己所规定的界面,在游戏未开始前可以对游戏难度进行设置,还可以设置蛇体颜色,食物颜色,蛇体。

食物大小,当游戏开始的时候,出了对游戏进行暂停外,不得对游戏进行其他操作。

二.窗体界面设计2个窗体,1个主窗体Form1里面第一层是建一个菜单栏包裹游戏选项,设置,帮助。

游戏选项里面包括(开始,暂停,退出)设置里面包括(难度等级(初级,中级,高级)蛇体颜色,食物颜色,蛇体大小)帮助里面显示的是Form2界面内容菜单栏下面一个容器panel 旁边是3个lable标签,第一个显示分数字;第二个是显示运行时的实际分数;第三个显示的是游戏规则说明下面就是一个文本框用来接收收状态的,旁边就是一个游戏结束按钮便于立刻结束,克服了玩家不想玩而又退不退不出去的障碍对了在窗体里面拖放一个计时器用来计时三.Snack蛇类1、定义字段:public static int SnakeBone = 10;//设置蛇体模块大小public static int Direct = 0;//设置方向public static Point[] Place = { new Point(-1, -1), new Point(-1, //设置蛇体各模块的位置public static bool hasFood = false;//是否有食物,有食物为truepublic static bool isGame = false;//游戏是否结束,游戏结束为true public static int Field_with = 0; //场地的宽度public static int Field_length = 0;//场地的长度public static Control control; //记录绘制贪吃蛇的控件public static Timer timer; //记录Time组件public static SolidBrush SolidSnake = new SolidBrush(Color.Green);//设置贪吃蛇身体颜色public static SolidBrush SolidBack = new SolidBrush(Color.Green); //设置背景颜色public static Label label; //记录label控件public static ArrayList List = new ArrayList();//实例化一个ArrayList 数组Graphics g;//实例化 Graphics类Food food = new Food();2、命名空间的支持using System.Drawing;支持:SolidBrush 、Graphics、Point类using System.Windows.Forms;支持:Control、Timer、Label类using System.Collections;支持:ArrayList类3 、定义一个函数用于绘制贪吃蛇的起始位置,以及对游戏场地进行初始化设置的方法public void GamePlaceSet(Control con, int Bone){Field_with = con.Width;//获取场地的宽度Field_length = con.Height;//获取场地的长度SnakeBone = Bone;//记录蛇体模块大小control = con;//记录背景控件g = control.CreateGraphics();//创建背景控件的Graphics类SolidBack = new SolidBrush(con.BackColor);//设置画刷颜色for (int i = 0; i < Place.Length; i++){Place[i].X = (Place.Length - i - 1) * SnakeBone;//设置蛇初始位置的横坐标Place[i].Y = (Field_length / 2) - SnakeBone;//设置蛇初始位置的纵坐标g.FillRectangle(SolidSnake, Place[i].X + 1, Place[i].Y + 1, SnakeBone - 1, SnakeBone - 1);//绘制蛇体}List = new ArrayList(Place);//记录每一个模块的位置isGame = false;//停止游戏Direct = 0;//设置方向向右}4、定义一个SnakeMove函数用于蛇体移动,根据蛇的位置,判断是否吃到食物,如果吃到食物,重新生成食物public void SnakeMove(int N, Form1 control1){Point tem_point = new Point(-1, -1);//定义坐标结构switch (N){case 0:{tem_point.X = ((Point)List[0]).X + SnakeBone;//蛇头右移动tem_point.Y = ((Point)List[0]).Y;break;}case 1:{tem_point.X = ((Point)List[0]).X - SnakeBone;//蛇头左移动tem_point.Y = ((Point)List[0]).Y;break;}case 2:{tem_point.X = ((Point)List[0]).X;tem_point.Y = ((Point)List[0]).Y - SnakeBone;//蛇头上移动break;}case 3:{tem_point.X = ((Point)List[0]).X;tem_point.Y = ((Point)List[0]).Y + SnakeBone;//蛇头下移动break;}}if (!EstimateMove(tem_point)) //如果没有向相反的方向移动{Direct = N; //改变贪吃蛇的方向if (!GameEnd(tem_point)) //如果游戏没有结束{ProtractSnake(tem_point); //重新绘制蛇体Eatefood(control1); //吃食物}//绘制食物g.FillRectangle(Food.SolidFood, Food.FoodPoint.X + 1,Food.FoodPoint.Y + 1, SnakeBone - 1, SnakeBone - 1);}}5、吃东西public void Eatefood(Form1 control1){int m, n; //记录分数if (((Point)List[0]) == Food.FoodPoint)//如果蛇头吃到了食物{List.Add(List[List.Count - 1]);//在蛇的尾部添加蛇身 hasFood = false;//没有食物food.Buildfood(hasFood, control);//生成食物m = Convert.ToInt32(label.Text);if (m == 10)//积分为10时加速{n = control1.speed - 50;timer.Interval = n;label.Text = Convert.ToString(m + 5);//显示当前分数g.DrawString("一级加速中", new Font("宋体", 15, FontStyle.Bold), new SolidBrush(Color.Green), new PointF(180, 30)); }else if (m == 20)//积分为20时加速{g.FillRectangle(Snake.SolidBack, 0, 0,control.Width, control.Height);control1.ProtractTable(g);g.DrawString("二级加速中", new Font("宋体", 15, FontStyle.Bold), new SolidBrush(Color.Blue), new PointF(180, 30)); n = control1.speed - 100;timer.Interval = n;label.Text = Convert.ToString(m + 5);//显示当前分数}else if (m == 30)//积分为30时加速{g.FillRectangle(Snake.SolidBack, 0, 0,control.Width, control.Height);control1.ProtractTable(g);g.DrawString("三级加速中", new Font("宋体", 15, FontStyle.Bold), new SolidBrush(Color.Red), new PointF(180, 30));n = control1.speed - 150;timer.Interval = n;label.Text = Convert.ToString(m + 5);//显示当前分数}elselabel.Text =Convert.ToString(Convert.ToInt32(label.Text) + 5);//显示当前分数}}6、用于判断当前游戏是否结束public bool GameEnd(Point GE){bool tem_e = false;//用于判断游戏是否结束bool tem_body = false;//用于判断蛇身是否重叠for (int i = 1; i < List.Count; i++){if (((Point)List[0]) == ((Point)List[i]))//如果重叠则返回ture,游戏结束{tem_body = true;}}//判断蛇头是否超出游戏场地if (GE.X <= -20 || GE.X >= control.Width - 1 || GE.Y <= -20 || GE.Y >= control.Height - 1 || tem_body){//游戏结束提示g.DrawString("游戏结束!", new Font("宋体", 50, FontStyle.Bold), new SolidBrush(Color.Yellow), new PointF(100, 150)); isGame = true;//游戏结束timer.Stop();//停止计时器tem_e = true;}return tem_e;}7、用于判断贪吃蛇的移动方向是否向相反的方向移动,如果方向移动则返回falsepublic bool EstimateMove(Point ES){bool tem_d = false;//记录蛇头是否向相反的方向移动if (ES.X == ((Point)List[0]).X && ES.Y ==((Point)List[0]).Y)//如果蛇头向相反的方向移动,则返回truetem_d = true;return tem_d;}8、重新画蛇public void ProtractSnake(Point Pr){bool tem_bool = false;//用于确定是否清除移动后的蛇体List.Insert(0, Pr);//根据蛇头的移动方向设置蛇头的位置Point tem_point = ((Point)List[List.Count - 1]);//记录蛇头的位置List.RemoveAt(List.Count - 1);//移除蛇的尾部for (int i = 0; i < List.Count - 1; i++)//使蛇体模块向前移动一位{if (tem_point == ((Point)List[i])){tem_bool = true;}}if (!tem_bool){//清除贪吃蛇移动前的尾部g.FillRectangle(SolidBack, tem_point.X + 1,tem_point.Y + 1, SnakeBone - 1, SnakeBone - 1);}for (int i = 0; i < List.Count; i++)//重新绘制蛇体{g.FillRectangle(SolidSnake, ((Point)List[i]).X + 1, ((Point)List[i]).Y + 1, SnakeBone - 1, SnakeBone - 1);}}四、Food食物类1、定义public static SolidBrush SolidFood = new SolidBrush(Color.Orange); //设置食物颜色public static Point FoodPoint = new Point(-1, -1);//设置蛇所在的位置2、生成食物函数public void Buildfood(bool hasFood, Control con){if (hasFood == false)//如果没有食物{Point tem_p = new Point(-1, -1);//定义坐标结构bool tem_bool = false;//计算出食物的位置为true,否则为falsewhile (!tem_bool)//计算显示食物的位置{bool tem_b = false;//用于确定生成的食物是否和蛇体重叠tem_p = RectPoint(con);//随机生成食物的位置for (int i = 0; i < Snake.List.Count; i++){if ((Point)Snake.List[i] == tem_p) //如果随机生成的食物和蛇体重叠{tem_b = true; //记录重叠break; //重叠则停止for循环}}if (tem_b == false)//如果食物和蛇体没有重叠{tem_bool = true;//计算出食物的位置位true,否则为falsebreak;}}FoodPoint = tem_p;//记录食物的显示位置}hasFood = true;//有食物}3、用Random类随机生成随机的纵坐标和横坐标,用返回Point结构public Point RectPoint(Control pon){int tem_R = pon.Width / Snake.SnakeBone;//获取场地的行数int tem_C = pon.Height / Snake.SnakeBone;//获取场地的列数Random RandomA = new Random();//实例化Random类tem_R = RandomA.Next(tem_R);//生成横坐标tem_C = RandomA.Next(tem_C);//生成纵坐标Point tem_RC = new Point(tem_R * Snake.SnakeBone, tem_C * Snake.SnakeBone);//生成随机点的显示位置return tem_RC;}五、窗体的代码设计Form1 类1、定义字段public int speed = 350; //用于设置贪吃蛇的速度单位为毫秒public static bool ifStart = false; //用于游戏是否开始public static bool pause = true; //用于游戏是否暂停,游戏暂停为true Snake snake = new Snake();//实例化Snake类Food food = new Food();2、绘制游戏场景的网格public void ProtractTable(Graphics G){for (int i = 0; i <= panel1.Width / Snake.SnakeBone; i++)//绘制单元格的纵向线{G.DrawLine(new Pen(Color.LightGreen, 1), new Point(i * Snake.SnakeBone,0), new Point(i * Snake.SnakeBone, panel1.Height));}for (int i = 0; i <= panel1.Height / Snake.SnakeBone; i++)//绘制单元格的横向线{G.DrawLine(new Pen(Color.LightGreen, 1), new Point(0, i * Snake.SnakeBone), new Point(panel1.Width, i * Snake.SnakeBone));}}3、游戏开始和为开始的2种情况private void panel1_Paint(object sender, PaintEventArgs e){Graphics G= panel1.CreateGraphics();//创建panel1控件的Graphics类ProtractTable(G); //绘制游戏场景if (!ifStart) //如果没有开始游戏{Snake.timer = timer1;bel = label2;snake.GamePlaceSet(panel1, Snake.SnakeBone);//初始化场地及贪吃蛇信息;}else{for (int i = 0; i < Snake.List.Count;i++)//绘制蛇体{e.Graphics.FillRectangle(Snake.SolidSnake, ((Point)Snake.List[i]).X +1, ((Point)Snake.List[i]).Y+1,Snake.SnakeBone-1,Snake.SnakeBone-1);}//绘制食物e.Graphics.FillRectangle(Food.SolidFood,Food.FoodPoint.X+1, Food.FoodPoint.Y+1, Snake.SnakeBone-1,Snake.SnakeBone-1);if(Snake.isGame)//如果游戏结束{e.Graphics.DrawString("游戏结束!", new Font("宋体", 50, FontStyle.Bold), new SolidBrush(Color.Yellow), new PointF(100, 150));}}}4、游戏操作说明private void游戏操作说明F3ToolStripMenuItem_Click(object sender, EventArgs e){if ((ifStart == false) || (Snake.isGame))//如果游戏正在运行{Form2 temp = new Form2();//初始一个 help实例if (temp.ShowDialog() == DialogResult.OK) //把Form2的对话说明框给显示出来temp.Dispose();//释放资源}}5、初始大小(设置初始大小为选中项)private void初始大小ToolStripMenuItem_Click(object sender, EventArgs e){if ((ifStart == false) || (Snake.isGame)){初始大小ToolStripMenuItem.Checked = false;放大2倍ToolStripMenuItem.Checked = false;放大3倍ToolStripMenuItem.Checked = false;((ToolStripMenuItem)sender).Checked = true;//设置当前项选中Snake.SnakeBone = 10;//设置蛇块的初始大小为10}}6、放大2倍private void放大2倍ToolStripMenuItem_Click(object sender, EventArgse){if ((ifStart == false) || (Snake.isGame)){初始大小ToolStripMenuItem.Checked = false;放大2倍ToolStripMenuItem.Checked = false;放大3倍ToolStripMenuItem.Checked = false;((ToolStripMenuItem)sender).Checked = true;//设置当前项选中Snake.SnakeBone = 20;}}7、放大3倍private void放大3倍ToolStripMenuItem_Click(object sender, EventArgs e){if ((ifStart == false) || (Snake.isGame)){初始大小ToolStripMenuItem.Checked = false;放大2倍ToolStripMenuItem.Checked = false;放大3倍ToolStripMenuItem.Checked = false;((ToolStripMenuItem)sender).Checked = true;//设置当前项选中Snake.SnakeBone = 30;//初始大小为30}}8、游戏等级为初级private void初级ToolStripMenuItem_Click(object sender, EventArgs e) {if ((ifStart == false) || Snake.isGame)//在游戏没有开始和游戏结束时才可以选择设置{初级ToolStripMenuItem.Checked = false;//设置初级项被选中中级ToolStripMenuItem.Checked = false;//设置中级项被选中高级ToolStripMenuItem.Checked = false;//设置高级项目被选中((ToolStripMenuItem)sender).Checked = true;//设置当前项选中speed = 350;//初始速度为350毫秒textBox1.Focus();//获得焦点}}9、游戏等级为中级private void中级ToolStripMenuItem_Click(object sender, EventArgs e) {if ((ifStart == false) || Snake.isGame)//在游戏没有开始和游戏结束时才可以选择设置{初级ToolStripMenuItem.Checked = false;//设置初级项被选中中级ToolStripMenuItem.Checked = false;//设置中级项被选中高级ToolStripMenuItem.Checked = false;//设置高级项目被选中((ToolStripMenuItem)sender).Checked = true;//设置当前项选中speed = 250;//中级初始速度为250毫秒textBox1.Focus();//获得焦点}}10、游戏等级为高级高级private void高级ToolStripMenuItem_Click(object sender, EventArgs e) {if ((ifStart == false) || (Snake.isGame))//在游戏没有开始和游戏结束时才可以选择设置{初级ToolStripMenuItem.Checked = false;//设置初级项被选中中级ToolStripMenuItem.Checked = false;//设置中级项被选中高级ToolStripMenuItem.Checked = false;//设置高级项目被选中((ToolStripMenuItem)sender).Checked = true;//设置当前项选中speed = 200;//高级初始速度为200毫秒textBox1.Focus();//获得焦点}}蛇体颜色(绿红蓝黑)11、绿色、private void绿色ToolStripMenuItem_Click(object sender, EventArgs e) {if ((ifStart == false) || (Snake.isGame)){绿色ToolStripMenuItem.Checked = false;红色ToolStripMenuItem.Checked = false;蓝色ToolStripMenuItem.Checked = false;黑色ToolStripMenuItem.Checked = false;((ToolStripMenuItem)sender).Checked = true;//设置当前项选中Snake.SolidSnake = new SolidBrush(Color.Green);}}12、红色private void红色ToolStripMenuItem_Click(object sender, EventArgs e) {if ((ifStart == false) || (Snake.isGame)){绿色ToolStripMenuItem.Checked = false;红色ToolStripMenuItem.Checked = false;蓝色ToolStripMenuItem.Checked = false;黑色ToolStripMenuItem.Checked = false;((ToolStripMenuItem)sender).Checked = true;//设置当前项选中Snake.SolidSnake = new SolidBrush(Color.Red);}}13、蓝色private void蓝色ToolStripMenuItem_Click(object sender, EventArgs e){if ((ifStart == false) || (Snake.isGame)){绿色ToolStripMenuItem.Checked = false;红色ToolStripMenuItem.Checked = false;蓝色ToolStripMenuItem.Checked = false;黑色ToolStripMenuItem.Checked = false;((ToolStripMenuItem)sender).Checked = true;//设置当前项选中Snake.SolidSnake = new SolidBrush(Color.Blue); }14、黑色private void黑色ToolStripMenuItem_Click(object sender, EventArgs e){if ((ifStart == false) || (Snake.isGame)){绿色ToolStripMenuItem.Checked = false;红色ToolStripMenuItem.Checked = false;蓝色ToolStripMenuItem.Checked = false;黑色ToolStripMenuItem.Checked = false;((ToolStripMenuItem)sender).Checked = true;//设置当前项选中Snake.SolidSnake = new SolidBrush(Color.Black); }}}食物颜色(橙黄紫)15、橙色private void橙色ToolStripMenuItem_Click(object sender, EventArgs e) {if ((ifStart == false) || (Snake.isGame)){橙色ToolStripMenuItem.Checked = false;黄色ToolStripMenuItem.Checked = false;紫色ToolStripMenuItem.Checked = false;((ToolStripMenuItem)sender).Checked = true;//设置当前项选中Food.SolidFood = new SolidBrush(Color.Orange);}}16、黄色private void黄色ToolStripMenuItem_Click(object sender, EventArgs e) {if ((ifStart == false) || (Snake.isGame)){橙色ToolStripMenuItem.Checked = false;黄色ToolStripMenuItem.Checked = false;紫色ToolStripMenuItem.Checked = false;((ToolStripMenuItem)sender).Checked = true;//设置当前项选中Food.SolidFood = new SolidBrush(Color.Yellow); }}17、紫色private void紫色ToolStripMenuItem_Click(object sender, EventArgs e) {if ((ifStart == false) || (Snake.isGame)){橙色ToolStripMenuItem.Checked = false;黄色ToolStripMenuItem.Checked = false;紫色ToolStripMenuItem.Checked = false;((ToolStripMenuItem)sender).Checked = true;//设置当前项选中Food.SolidFood = new SolidBrush(Color.Purple); }}18、开始private void开始F2ToolStripMenuItem_Click(object sender, EventArgs e) {//控制游戏的开始、暂停、和退出ifStart = false;Graphics G = panel1.CreateGraphics();//创建panel1控件的Graphics类//刷新游戏场地G.FillRectangle(Snake.SolidBack, 0, 0, panel1.Width, panel1.Height); ProtractTable(G);//绘制游戏场地ifStart = true;//开始游戏snake.GamePlaceSet(panel1, Snake.SnakeBone);//初始化场地以及贪吃蛇信息timer1.Interval = speed;//设置贪吃蛇的移动速度timer1.Start();//启动计时器pause = false;//游戏初始状态,暂停取消label2.Text = "0";//显示当前分数food.Buildfood(Snake.hasFood, Snake.control);//生成食物textBox1.Focus();//获得焦点,便于键盘操作 }19、暂停private void暂停spaceToolStripMenuItem_Click(object sender, EventArgs e){Graphics G = panel1.CreateGraphics();//创建panel1控件的Graphics类if ((pause == false && ifStart == true) && (!Snake.isGame))//如果游戏之前没暂停正在运行{G.DrawString("游戏暂停!", new Font("宋体", 50, FontStyle.Bold), new SolidBrush(Color.Yellow), new PointF(100, 150));timer1.Stop();//停止当前计时器pause = true;//当前游戏暂停}else if (pause == true && ifStart == true && (!Snake.isGame))//如果游戏暂停后重新开始正在运行{G.FillRectangle(Snake.SolidBack, 0, 0, panel1.Width, panel1.Height); ProtractTable(G);timer1.Start();//启动计时器pause = false;//开始游戏}}20、退出private void退出F4ToolStripMenuItem_Click(object sender, EventArgs e) {if ((ifStart == false) || (Snake.isGame))//如果游戏正在运行{if(DialogResult.Yes == MessageBox.Show("是否退出游戏?", "提示", MessageBoxButtons.YesNo)){timer1.Stop(); //停止计时器Application.Exit(); //停止运行,退出游戏}}elseMessageBox.Show("游戏正在运行中,暂时不允许退出!", "提示");}21、时间事件private void timer1_Tick(object sender, EventArgs e){snake.SnakeMove(Snake.Direct, this);//移动贪吃蛇}22、强制结束游戏private void label4_Click(object sender, EventArgs e){MessageBox.Show("游戏结束!","提示!");Application.Exit();}23、键盘控制private void Form1_KeyDown(object sender, KeyEventArgs e){int tem_p = -1;//记录控件键值if (e.KeyCode == Keys.F2)//如果按F2tem_p = 1;//开始游戏if (e.KeyCode == Keys.Space)//如果按空格键tem_p = 2;//暂停游戏或者继续游戏if (e.KeyCode == Keys.F4)//如果按F4tem_p = 3;//关闭游戏if (e.KeyCode == Keys.F3)tem_p = 4;//打开帮助信息if (tem_p != -1)//如果当前是操作标识NoviceControl(tem_p); //控制游戏的暂停和关闭if (ifStart == true && pause == false)//如果游戏启动,键盘方向键才起作用{int tem_n = -1;//记录移动键值if (e.KeyCode == Keys.Right || e.KeyCode == Keys.D)//按下右键向右移动tem_n = 0;if (e.KeyCode == Keys.Left || e.KeyCode == Keys.A)//按下左键向左移动tem_n = 1;if (e.KeyCode == Keys.Up || e.KeyCode == Keys.W)//按下上键向上移动tem_n = 2;if (e.KeyCode == Keys.Down || e.KeyCode == Keys.S)//按下键向下移动tem_n = 3;if (tem_n != -1 && tem_n != Snake.Direct){if (Snake.isGame == false){//如果移动的方向不是相反方向if (!((tem_n == 0 && Snake.Direct == 1 || tem_n == 1 && Snake.Direct == 0) || (tem_n == 2 && Snake.Direct == 3 || tem_n == 3 && Snake.Direct == 2))){Snake.Direct = tem_n;//记录移动的方向snake.SnakeMove(tem_n, this);//移动贪吃蛇}}}}}24、控制游戏的开始、暂停、和退出public void NoviceControl(int n){Graphics G = panel1.CreateGraphics();//创建panel1控件的Graphics类switch (n){case 1://开始游戏{ifStart = false;G.FillRectangle(Snake.SolidBack, 0, 0, panel1.Width, panel1.Height); //刷新游戏场地ProtractTable(G);//绘制游戏场地ifStart = true;//开始游戏snake.GamePlaceSet(panel1, Snake.SnakeBone);//初始化场地以及贪吃蛇信息timer1.Interval = speed;//设置贪吃蛇的移动速度timer1.Start();//启动计时器pause = false;//暂停游戏food.Buildfood(Snake.hasFood, Snake.control);//生成食物label2.Text = "0";//显示当前分数break;}case 2://暂停游戏{//Graphics G = panel1.CreateGraphics();//创建panel1控件的Graphics类if ((pause == false && ifStart == true) && (!Snake.isGame))//如果游戏正在运行{G.DrawString("游戏暂停!", new Font("宋体", 50, FontStyle.Bold), new SolidBrush(Color.Yellow), new PointF(100, 150));timer1.Stop();//停止当前计时器pause = true;//当前游戏暂停}else if (pause == true && ifStart == true && (!Snake.isGame))//如果游戏正在运行{G.FillRectangle(Snake.SolidBack, 0, 0, panel1.Width, panel1.Height); ProtractTable(G);timer1.Start();//启动计时器pause = false;//开始游戏}break;}case 3://退出游戏{if ((ifStart == false) || (Snake.isGame))//如果游戏正在运行{timer1.Stop(); //停止计时器Application.Exit(); //停止运行,退出游戏}break;}case 4://打开帮助信息{if ((ifStart == false) || (Snake.isGame))//如果游戏正在运行{Form2 temp = new Form2();//初始一个 help实例if (temp.ShowDialog(this) == DialogResult.OK)temp.Dispose();}break;}}}六.实现流程七.运行图解八、说明图解九、总结本次贪吃蛇游戏对我来说是一个具有挑战性的项目,刚开始编代码的时候发现:觉得很简单,当快打完一个方法的时候发现,和自己的想法又没有关联,功能串不起来,以至于突然感觉到无法下手,在这种情况下,我并没有放弃,而是重网上收些代码来组合,就这样:还是感觉压力非常大,组合困难,想要实现自己想要的功能真的不可能,后来我反复的看看,反复的研究,注释别人的代码,反复进行进行运行,终于,有一次,哎,好了,可以正常运行了,可是,新的问题又来了,键盘不好控制,上下左右,开始,暂停,结束,按钮无法用键盘进行控制,还有居然在调试的过程中蛇块居然不吃食物吃我画出来的线,我再纳闷,反复的检查,始终不知所措,,过了几天,结果有了好转,功能勉强实现,最后经过检查,功能得到了改善。

贪吃蛇游戏开发设计

贪吃蛇游戏开发设计

广州商学院课程论文题目:贪吃蛇游戏开发设计课程名称面对对象程序设计考查学期2016/2017学年第 1学期姓名陈思明李权康学号2 2专业计算机科学与技术指导教师包汉宗移植性和平台无关性等优点,得到了广泛地应用,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。

“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。

本文基于Java技术,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。

整个游戏程序分为二个功能模块,四个类模块,实现了游戏的开始、暂停、结束。

通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。

关键词:贪吃蛇,Java,游戏一、可行性分析1.1经济可行性游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件的水平的提高。

游戏开发新技术层出不穷,经典游戏比比皆是,游戏这个名称一直存在于每个人的日常生活中。

因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色.而从技术方面来看,现在的java技术也融入了手机中。

这些都为开发的这款贪吃蛇游戏提供了条件。

1.2技术可行性本次设计我将主要运用java语言来完成。

Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。

由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。

如果没有安全保证,用户从网络下载程序执行就非常危险。

Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。

二、需求分析2.1游戏的介绍游戏的名称叫“贪吃蛇”,节:一条蛇可以看成有许多正方形的“小格子”拼凑成,我把它称作节。

节是蛇身上最小的单位。

段:当许多节连成一条直线,我称它为段。

贪吃蛇只有一段,如果它拐弯就变成两段。

链表:用来保存每一段的状态,链表的元素单位是段。

且链表的最后一个元素表示蛇的头部段。

坐标系:MIDP中的坐标以左上角那点为(0,0),向右则x递增,向下则y递增。

高中 Scratch 课件:21_贪食蛇游戏

高中 Scratch 课件:21_贪食蛇游戏
– 前进一步消息处 理程序
1)根据前进方向 修改蛇头坐标
2)如果蛇头碰到 边框,即坐标绝 对值等于30,将 变量running设为 0,代表游戏结束
home back first prev next last 15
贪食蛇游戏
• Snake 角色代码
– 前进一步消息处 理程序
3)检查蛇头位置 是否与某一节蛇 身位置重合,如 果是,则将变量 running设为0, 代表游戏结束
home back first prev next last 8
贪食蛇游戏
• Snake 角色代码
– 变量 direct代表蛇前进的 方向: 0-向上; 1-向右; 2- 向下; 3- 向左
– 右边代码实现通过上下 左右方向键来改变蛇前 进的方向
home back first prev next last 9
得分清0 链表 listX,listY清空 方向向上 插入10个坐标到listX,list ,代
表初始长度为10节Y 的蛇身, (0,9) (0,8) (0,7)…(0,0) 绘制完整蛇身
home back first prev next last 14
贪食蛇游戏
• Snake 角色代码
本节目标
• 本节课即将学习
– 贪食蛇游戏实现原理 – MVC 设计模式
home back first prev next last 1
贪食蛇游戏
• 游戏规则
– 方向键控制黑色小蛇前进 – 碰到四周的墙壁、自己的身体游戏
结束 – 只能前进、左转、右转,向回走会
碰到自己,立即 “死亡” – 蛇头经过红色的食物,会吃掉食物;
贪食蛇游戏
• Snake 角色代码

贪吃蛇程序文档

贪吃蛇程序文档

1.需求分析1.1问题的描述本程序主要是一个交互式的游戏程序,通过玩家的键盘上下左右键控制贪吃蛇的运动方向。

程序会根据您按下的键判断贪吃蛇走向。

这个程序的关键是表示蛇的图形以及蛇的移动。

用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。

移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。

如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来社会多一节身体,所以将蛇的最后一节用背景色覆盖。

食物的出现和消失也是画圆形和覆盖圆形。

1.2基本要求应用Visual C++的MFC进行可视化编程,完成一个贪吃蛇小程序。

程序包含snake.EXE可执行文件和所有的可编译程序源码;能够实行游戏的开始、结束、得分和计时;屏幕上能够显示游戏规则和游戏的注意事项。

2.概要设计2.1数据结构数据结构是指相互之间存在一定关系的数据元素的集合。

按照视点的不同,数据结构分为逻辑结构和存储结构。

数据的逻辑结构(logical structure)是指数据元素之间逻辑关系的整体。

所谓逻辑关系是指数据元素之间的关联方式或邻接关系。

根据数据元素之间逻辑关系的不同,数据结构分为四类:集合;线性结构;树结构;图结构。

数据的逻辑结构属于用户视图,是面向问题的,反映了数据内部的构成方式。

为了区别于数据的存储结构,常常将数据的逻辑结构称为数据结构。

数据的存储结构(storage structure)又称为物理结构,是数据及其逻辑结构在计算机中的表示,换言之,存储结构除了数据元素之外,必须隐式或显示地存储数据元素之间的逻辑关系。

通常有两种存储结构:顺序存储结构和链接存储结构[1]。

贪吃蛇程序中的重要代码如下:动态数组:CArray<CPoint,CPoint> m_aBody // 保存蛇身点类:CPoint m_pAim / /保存一个食物目标的坐标函数:void CSnakeView::IniAim() //随机函数生成食物的X 和Y坐标voidCSnakeView::IniGame()//改函数对游戏初始化定义游戏的初始状态void CSnakeView::ReDisplay(CPoint pPoint)//刷新游戏区域中pPoint处的一个小方格void CSnakeView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) //判断键盘按钮事件CView::OnTimer(nIDEvent) //计时器函数来重画屏幕程序的功能是实现对贪吃蛇游戏的开始,如下图所示2.3各模块之间的调用关系及算法设计用流程图示出程序的主要控制流程和处理流程,其图形如下:3 详细设计构思如下:首先,设计者考虑设计一个可以游动的蛇。

c#贪吃蛇实现完整流程图

c#贪吃蛇实现完整流程图

最近老有人问我那个俄罗斯方块游戏的代码,解释了半天,觉得麻烦,干脆再做一个更简单的小游戏,贪吃蛇,和俄罗斯方块是一样的思路,只不过游戏相对俄罗斯方块来说简单了很多,把这个小游戏给大伙讲一下,希望对一些C#的初学者有帮助。

游戏很简单,通过WASD或上下左右几个按键控制贪吃蛇的前进方向,这个估计全世界都知道,先看一下游戏运行效果吧其中黑色的事物,红色是贪吃蛇,由于考虑到越简单越好,就没有追求过多的美化和修饰看一下程序结构吧程序结构很简单,一个Form,两个ClassFormMain是程序主界面,里面就一个PictureBox控件Block类是“蛇块”类,我不知道怎么换个词来描述,这个类就是用于描述蛇身子一节一节的信息,从运行效果图上可以看到就是那一个一个小方块的信息,等价于俄罗斯方块里的砖块信息类Palette类就是主画布,是游戏的主要代码,和俄罗斯方块里的画布是一样的作用。

从结构上可以看出,整个工程很简单,应该还算比较好理解吧。

下一篇给大伙从头到尾的把整个工程重现一遍。

呵呵,如果是高手的话,请勿见笑,初学者的话大可以“拿来主义”一下。

上一篇我们简单介绍了一下程序结构,接下来我们从头到尾把整个游戏重现一下1.新建一个Windows 应用程序,起名Snake吧2.重命名Form1,改为FormMain。

这是我的个人偏好,不改也行。

3.从工具栏里拖放一个picturebox到FormMain上面,设置属性picturebox1的BorderStyle属性选择为FixedSingle,这样能显示边框FormMain的KeyPreview属性设定为True,这样整个窗体可以响应键盘按键事件,这个在俄罗斯方块那个里面讲过了设定完以后大概应该是整个样子需要补充一下的是,这里面form的大小和picturebox的大小是不用刻意设置的,因为我们程序里面会根据设定贪吃蛇的大小和贪吃蛇的活动空间自动变大变小的,所以大致是整个样子就行了。

C语言 贪吃蛇游戏

C语言 贪吃蛇游戏
宏定义也是预处理命令的一种,以#define开头,提供了一种可以替换源代码中字符串的机制。本系 统将用户使用键盘操作棋子时,使用的方向键的键值定义为宏,定义形式如下:
#define LEFT 0x4b00/*向左键*/ #define RIGHT 0x4d00/*向右键*/ #define DOWN 0x5000/*向下键*/ #define UP 0x4800/*向上键*/ #define ESC 0x011b/*〈ESC〉退出键*/ #define N 100/*贪吃蛇的最大长度*/
setfillstyle(1,12);/*用淡红色填充砖的中间部分*/ bar(x+2,y+2,x+sizx-2,y+sizy-2); }
这个函数可以让用户按下任意键而不需要回车键就可以接收到用户的输入。可以用来作为 “press anykey to continue”的实现。
实现过程
(1)预处理模块 在本游戏系统中需要引用一些头文件,以便程序更好的运行。引用头文件需要使用#include命令,
下面即是要引用的文件和引用代码,实现代码如下:
表19.2 cmd参数的设置值
参数值
含义
cmd = 0
cmd = 1
cmd = 2
当cmd是0,bioskey()返回下一个在键盘键入的值(它将等待到按下一个键)。 它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8 位数存放该字符的ASCII码,高8位存放该键的扫描码;对于特殊键(如方向键、 F1~F12等等),低8位为0,高8位字节存放该键的扫描码
声明结构体,food是表示食物基本信息的结构体,snake是定义贪吃蛇基本信息的结构体,代码如下:
struct FOOD int x; /*食物的横坐标*/

贪吃蛇界面图及流程图

贪吃蛇界面图及流程图
如有你有帮助,请购买下载,谢谢! 1页
函数名 功能 输入参数 输出参数 返回值 流程图
OnPaint 完成区域,蛇,食物的绘制 无 无 void
如有你有帮助,请购买下载,谢谢!
开始
使用特别的颜色的正方形 绘制区域
使用特别的颜色的正方形 绘制食物

i<蛇身体的长


是 i 是否是蛇头 i++
否Байду номын сангаас
使用特别的颜色绘制 第 i 段身体
结束
VK_LEFT 蛇向左移动
结束
VK_RIGHT 蛇向右移动
结束
4页
如有你有帮助,请购买下载,谢谢! 开始 读取字符下标 如果没有选择
读取字符下标中的内容
显示“没有选择”对话框
“快” 速度为 150
“正常” 速度为 200
“慢” 速度为 250
结束
5页
使用正方形绘制蛇的第 i 段身体
结束
2页
如有你有帮助,请购买下载,谢谢!
开始 蛇吃食物 蛇身长加 1 随机产生食物
蛇与食物是否重合 重新产生食物
N 蛇头与蛇尾 相撞
Y
N 判断蛇与四 周边框相撞
Y
结束
3页
VK_UP 蛇向上移动
结束
如有你有帮助,请购买下载,谢谢! 开始
判断 nChar 的值
VK_DOWN 蛇向下移动

贪吃蛇C程序及流程图和模块设计说明

贪吃蛇C程序及流程图和模块设计说明

#define N 200#include <graphics.h>#include <stdlib.h>#include <dos.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score=0;/*得分*/int gamespeed=50000;/*游戏速度自己调整*/ struct Food{int x;/*食物的横坐标*/int y;/*食物的纵坐标*/int yes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/struct Snake{int x[N];int y[N];int node;/*蛇的节数*/int direction;/*蛇移动方向*/int life;/* 蛇的生命,0活着,1死亡*/}snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/ void PrScore(void);/*输出成绩*//*主函数*/void main(void){Init();/*图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/}/*图形驱动*/void Init(void){int gd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc");cleardevice();}/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/ void DrawK(void){/*setbkcolor(LIGHTGREEN);*/setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/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);/*右边*/}}/*玩游戏具体过程*//*第一部分初始设定*/void GamePlay(void){randomize();/*随机数发生器*/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)/*食物整个坐标大小需要符合10*10的大小否则社无法迟到*/ 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];} /*以蛇头的移动开始让整个身子移动,后一位补上前一位的位置坐标*//*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;}/*第二部分:死亡设定模块*/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(4);/*画出蛇*/for(i=0;i<snake.node;i++)rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);delay(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);} /*endwhile(!kbhit)*/if(snake.life==1)/*如果蛇死就跳出循环*/break;key=bioskey(0);/*接收按键*/if(key==ESC)/*按ESC键退出*/break;/*判断是否往相反的方向移动(向相反方向移动会死亡)第三类死亡条件*/ elseif(key==UP&&snake.direction!=4)snake.direction=3;elseif(key==RIGHT&&snake.direction!=2)snake.direction=1;elseif(key==LEFT&&snake.direction!=1)snake.direction=2;elseif(key==DOWN&&snake.direction!=3)snake.direction=4;}/*endwhile(1)*/}/*第五部分:游戏结束*/void GameOver(void){cleardevice();PrScore();setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,"GAME OVER"); getch();}/*第六部分:输出成绩*/void PrScore(void){char str[10];setfillstyle(SOLID_FILL,YELLOW); bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,"score:%d",score); outtextxy(55,20,str);}/*第七部分:结束图形*/void Close(void){getch();closegraph();}本系统分为:初始化即图形驱动函数init()模块、图形界面设计Drawk()模块、游戏GamePlay()模块、输出成绩PrScore()模块、退出游戏Close模块、在游戏模块中通过3个控制语句判断游戏中的蛇是否死亡(3中死亡方式),不出现死亡在游戏结束时候打出成绩,如果出现死亡则跳出循环并打出成绩并进行初始化设定,如果不玩游戏按ESC则退出游戏。

贪吃蛇游戏设计

贪吃蛇游戏设计

贪吃蛇游戏设计游戏是应用软件开发的一大方向。

利用我们之前学过的C语言知识,就可以设计一个简单的游戏了。

贪吃蛇游戏设计课件下载MYSNAKE.EXE(放在C:\TC下,双击运行) 程序模板一、设计目标用c 语言实现一个类似于手机游戏“贪吃蛇”的程序。

一条蛇在密闭的围墙内运动,通过键盘上的四个箭头键控制蛇向上下左右四个方向移动。

在围墙内随机出现一个食物,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时得分加10分,接着又出现食物,等待被蛇吃掉。

如果蛇在移动过程中,撞到墙壁或身体交叉:蛇头撞到自己的身体则游戏结束。

游戏参考画面如下:二、参考设计思路2.1 游戏逻辑:根据该游戏的设计目标,我们可以通过以下流程来实现游戏逻辑:(此为一种方式,也可采用其他顺序来实现)2.2 数据结构本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。

2.2.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]; //蛇身数组,保存每节蛇身的坐标。

实验八 贪吃蛇—主界面(Start)类设计与实现

实验八  贪吃蛇—主界面(Start)类设计与实现

任务8 贪吃蛇—主界面(Start)类设计与实现【实验目标】1.进一步掌握事件、事件驱动概念;2.熟练掌握事件相关联的事件处理代码编写;3.会时间控件(timer1)的Enable和Interval属性的代码设置;4.在运行时,会用代码设置改变菜单的Text属性;5.会编写MenuStrip控件和Timer控件代码;6.会编写按键按下事件处理代码。

【实验内容】在任务1的贪吃蛇主界面基础上,完成贪吃蛇界面主菜单的开始、暂停/继续、退出、游戏级别以及帮助等菜单项程序设计。

【任务实现步骤】1.声明私有变量在这里需要声明运动场对象字段、游戏级别、游戏计数三个私有变量。

private Floor floor; //运动场对象字段private int jibei; //游戏级别private int jisu; //游戏计数2.“开始/重新开始”菜单(1)功能:游戏开始或重新开始游戏;若本菜单项为“开始”,改为“重新开始”;并且“暂停”菜单项可用。

(2)设计思路及步骤:1)设置时间控件(timer1)的Enable属性为true。

2)判断菜单文字是否为“开始”用语句:if(this.menuItem2.Text=="开始")3)设置“暂停”菜单项的Enabled属性为true,使菜单项可用。

当菜单项文字为“重新开始”时,调用floor对象的ReSet方法重新开始游戏。

(3)“开始/重新开始”菜单单击事件方法流程图开始开始?重新开始游戏N结束设置分数为0改成“重新开始”“暂停/继续”可用Y开始游戏(4)开始/重新开始”菜单单击事件方法代码 //开始/重新开始菜单单击事件方法private void menuItem2_Click(object sender, System.EventArgs e) { this .timer1.Enabled=true ; //开始运行游戏 if (this .menuItem2.Text=="开始") //如果标题为“开始” { this .menuItem2.Text="重新开始"; //改为“重新开始” } else { floor.ReSet(this .CreateGraphics()); //重新开始游戏 floor.score=0; } menuItem3.Enabled =true ; //暂停/继续菜单可用}3.“暂停/继续”菜单(1)功能:设置程序暂停运行或继续运行。

0911090112-王玉涛-《贪吃蛇游戏》

0911090112-王玉涛-《贪吃蛇游戏》

一、题目描述模拟贪吃蛇游戏图1 贪吃蛇游戏界面二、功能分析通过体验并分析后得出贪吃蛇游戏主要功能包括:贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。

三、系统设计1.程序总体结构程序中由主模块负责协调各功能模块的工作。

开局后,根据输入操作,执行相应的初始化界面和蛇身、游戏者按键选择、放置食物、蛇开始运动、蛇吃到食物、蛇长大、蛇死亡等功能。

图2 贪吃蛇程序的流程图2.界面设计如图3,主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。

黄色的表示食物,红色的是蛇身,通过方向键移动蛇头的方向,从而吃到食物,增加蛇身的长度。

图3 游戏运行的界面3.输入方式设计上、下、左、右分别表示四个方向。

按上蛇向上运动;按下蛇向下运动;按左蛇向左运动;按右蛇向右运动;按ESC退出游戏4.重要数据的数据结构设计1.宏定义:#define N200;2.贪吃蛇游戏的结构体struct Food{int x;/*食物的横坐标*/int y;/*食物的纵坐标*/int yes;/*判断是否要出现食物的变量*/ }food;/*食物的结构体*/struct Snake{int x[];/*蛇的横坐标*/int y[];/*蛇的纵坐标*/int node;/*蛇的节数*/int direction;/*蛇移动方向*/int life;/* 蛇的生命,0活着,1死亡*/ }snake; /*蛇身的结构体*/5.函数设计四、关键技术、难点及其解决方法程序关键在于表示蛇的图形及蛇的移动。

用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。

冀佳伟-贪吃蛇游戏设计

冀佳伟-贪吃蛇游戏设计

贪吃蛇游戏设计文档一、项目构思本项目实现可一个在wintc环境下运行的贪吃蛇游戏。

游戏在屏幕上的一个给定区域内进行,玩家通过控制键盘上的上、下、左、右方向键来控制蛇的前进方向。

屏幕上随机出现食物,只要蛇头位置与食物有重合,就认为蛇吃到了食物,蛇身增长一节,分数也增加。

玩家一直玩下去,直到蛇碰到周围的墙壁或蛇头撞上蛇身体,游戏宣告结束。

1.功能需求贪吃蛇游戏的总体需求就是能够正常玩游戏并能正常玩游戏并能够观察到自己的得分。

具体的功能型需求如下:(1)玩家只能在屏幕上固定的区域内玩游戏,区域周围用墙壁状的图形来标识;(2)蛇的身体有一个个小方块构成,蛇头由两个小方块构成;(3)食物由一个方块构成,食物要随机出现在游戏区域内;(4)玩家可用键盘上的上、下、左、右四个方向键来控制蛇的运行方向;(5)当蛇向前一定过程中,碰上了食物,则蛇身增长一节,当前食物消失,并且在另一边游戏区域随机出现一个食物;(6)蛇每增长一节,则得分相应增加,得分增加的原则如下:原得分+ 10(0<原得分<=100)原得分+ 20(100<原得分<=400)原得分+ 50(400<原得分<=1000)原得分+ 100(1000<原得分)(7)得分实时显示在屏幕顶部(游戏区域边框外的某个位置)(8)蛇在移动的过程中,蛇头不能撞上蛇身,蛇头也不能撞上周围墙壁,若这两种情况任意一种情形发生,则认为蛇已死,在游戏区域内显示“GAME OVER”信息,并在顶部显示所得分数,游戏结束;(9)在游戏过程中,玩家可随时按“ESC”键结束游戏。

2.非功能需求(1)界面友好,图形界面,游戏开始前有游戏的简单使用说明,方便玩家使用;(2)具有较好的容错能力,玩家在游戏过程中,除了规定的按键外,其他按键均忽略,不予处理;(3)发布游戏时,将图形驱动加载到程序中,使系统具有良好的可扩展性和平台适应性,可在任何PC机上运行。

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