欢迎来到天天文库
浏览记录
ID:41701371
大小:82.77 KB
页数:20页
时间:2019-08-30
《数据结构(cc版)参考案例2》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第4章贪吃蛇游戏的编制贪吃蛇游戏和俄罗斯方块游戏一样风靡全球,而且原理基本相似,是游戏编程人员入门学习的首选。4.1程序概述4.1.1游戏的功能游戏贪吃蛇就是在屏幕上画出蛇,同时随机地给出食物。游戏者通过键盘操作控制贪吃蛇的移动,去吃食物,吃到后食物消失,然后再随机给出食物同时蛇的身体增长,分数相应增加,当蛇碰撞到墙壁时或自身身体吋就死亡。画蛇的原理就是利用人眼的视觉效应先将蛇头向前移动一格,然后所有蛇身依次向前移动一格。4.1.2游戏的预览游戏运行的主操作界面如图4-1所示。图4-1主操作界面项目1图4-2颜色选择界面项目2在菜单栏中【游戏设置】中
2、对以选择【颜色设置】,可以设置蛇体和食物的颜色,颜色设置界面如图4-2所示。在菜单栏中【游戏设置】中的【难度选择】中,可以选择游戏的难度,共分四个级别:菜鸟.大鸟.老鸟和自虐。项H44.2游戏的概要设计4.2.1游戏实现方案项目6贪吃蛇的核心算法时如何实现移动和吃掉食物。没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色重绘这个节点。然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效果。而在吃到食物的时候,则只需把食物入队即可。I诩曰u4.2.2游戏逻辑设计蛇身由若干基本单元组成,这些单元存放在
3、一个Queue结构中,表示对象的先进先出集项口8合。Snake类里面主要包含Add(添加新对象),CT(清除对象),SIither(蛇身移动),PointOnSnake(判断某点是否在蛇身内部)几个方法。移动控制模块定义了蛇头的坐标,移动的方向等信息,并且判断下一步移动的点的坐标。「——主窗体实现游戏的核心是通过窗体接受键盘的按键来设置蛇身的移动方向,和判断项目9是否吃到食物是否游戏结束等逻辑处理,并实时更新游戏的画而。4.3游戏的详细设计及编码项U10•V工学结合创新教程数据库结构(C语言版)在游戏的概要设计中,己解决了实现该游戏需耍的方案和设计问
4、题。本节将介绍系统的详细设计。在游戏的详细设计中,将确定如何具体的实现该游戏,从而在编码阶段可以把这个描述直接翻译成用具体的程序语言书写的程序。4.3.1主界面设计编码主界面的作用就是显示本游戏所有的功能菜单项,提供游戏的显示界面。在本界面中共设计了4种控件,通过这些控件玩家可以方便的控制游戏,各个控件的名称、作用和类型如表4-1所示。表4T主界面的控件设计控件类型控件名称作用mainMenumenultem2蛇体颜色设置menultem3食物颜色设置menultem4游戏难度设置menultem6游戏控制说明menuExit退出panelPanel
5、1显示游戏界面textBoxtextBox1显示手速ButtonButton!开始【开始】按钮的事件调用画蛇的两数,开始游戏,并把各控件置于非操作状态。主要代码如例程4-1所示。例程4T【开始】按钮事件代码privatevoidbuttonl_Click(objectsender,System.EventArgse){//屏蔽游戏菜单this.menultem1.Enabled=false;this・menultem5.Enabled=false;〃画蛇this・snake・DrawSnake();game=newThread(newThreadSt
6、art(StartGame));game・Start();this.DrawSnake();this.button1・Enabled=false;this.Focus();privatevoidDrawSnakc()lock(this){forcach(Labeltempinsnake.GctSnakcO){this,panel1.Controls.Add(temp);}}}〃开始游戏privatevoidStartGame(){drawDclegate=newDrawDele(PutFood);this.Invoke(drawDclegate,nu
7、ll);while(true){Thread.Sleep(speed);if(this.IsGameOver()){MessageBox.Show("GAMEOVER");try{this.game.Abort();}catch{}}if(this,snake.Eat(this.foodPoint)){//改变积分this.tcxtBoxl.Text二System.Convert.ToString(++this.foodCount*10);//消除原本食物drawDelegate=newDrawDele(KillFood);this.Invoke(d
8、rawDelegate,null);//添加新食物项目1项目2项目3项H4项忖5项目6项目7项目9•V工学结
此文档下载收益归作者所有