毕业设计方案思路.doc
《毕业设计方案思路.doc》由会员分享,可在线阅读,更多相关《毕业设计方案思路.doc(13页珍藏版)》请在咨信网上搜索。
1、Java编写贪吃蛇游戏思绪一、 需求分析:1. 游戏以经典贪吃蛇默认规则设计需要蛇能够根据给定方向每隔一段时间自动移动;方向键“”、“”、“”、“”能够控制蛇移动方向,蛇每吃到一个食物后身体长度增加一格,原有食物消失,再随机生成一个不再石头上新食物;石头即为地图,蛇吃到石头后游戏结束。2. 为了使游戏愈加含有娱乐性和挑战性,增设关卡,伴随关卡等级升高,蛇移动速度加紧,蛇吃到食物难度加大,吃到一定数量食物即可过关进入下一个关卡;为蛇吃到食物后添加声音效果,增设背景音乐,能够控制背景音乐开关;3. 为了区分和经典模式不一样,游戏增加新规则模式,新模式规则中,初始化蛇长度一定,蛇吃到食物后,食物随机
2、产生一个新食物,原来食物经过蛇消化后变为石头固定在原处不能移动。二、 设计思绪:1. 首先考虑所需要总体框架贪吃蛇游戏专题应为蛇,需要创建蛇这个类命名为Snake,还要有食物类命名为Food,石头类命名为Stone,显示面板类命名为DisplayPanel,逻辑处理类命名为Logic和主函数类命名为MainOfGreedySnake。2. 搭建类和类之间关系蛇吃食物,食物在被蛇吃到后随机产生新食物,食物不能在石头上生成,关系复杂,我们能够将这些关系在逻辑处理类Logic中搭建,这么即降低了上面三个类之间耦合性,又方便以后对辅助功效添加。蛇,食物,石头需要在显示面板中显示出来,而三者又在逻辑处理
3、这个类Logic中做逻辑关系运算,我们可创建自己显示面板类DisplayPanel,用逻辑处理类Logic创建对象作为参数传输给显示面板,使得蛇,食物,石头和显示面板直接关系愈加简单。3. 添加简单测试功效首先需要创建主函数,主函数中创建逻辑处理类Logic实例对象,创建自定义显示面板对象DisplayPanel,将逻辑处理类Logic实例对象作为参数传输给显示面板DisplayPanel实例对象中,显示面板需要寄托在Frame框架上,这就需要在主函数中创建一个JFrame对象,然后将自定义显示面板添加到JFrame对象上。接着是在每个类中添加一个测试用功效函数,简单打印一条输出语句,在蛇类S
4、nake中,创建一个功效函数打印“蛇类被加载”,食物类,石头类,逻辑处理类,显示面板类中添加一样功效,在逻辑处理类中定义蛇,食物,石头对象,创建结构函数参数传入蛇,食物,石头类型对象;自定义显示面板继承JPanel类,定义逻辑处理类对象,创建结构函数传入逻辑处理类对象。经过调用类中功效函数来测试,确保她们之间已经建立联络。4. 类中填充功效及参数首先分析蛇:图2-4.1我们把显示面板划分为格子,每个单位蛇身占一个格子,食物,石头一样,经过抽取定义一个格子类命名为Square;蛇身体由多个格子组成,需要一个链表集合存放,定义一个LinkedList类型集合命名为snakeBody,存放类型为格子
5、类型Square对象;蛇有一个长度,定义一个int型变量Length存放长度,定义一个int型direction变量控制蛇移动方向;定义一个boolean类型变量iseatfood,来标识蛇是否吃到食物;定义一个boolean类型变量iseatstone来标识蛇是否吃到石头;蛇功效有移动功效,创建功效函数move(),相关蛇移动,我们能够让存放蛇身体集合snakeBody添加一个蛇头,去掉一个尾巴来实现,蛇头添加位置又应该由蛇移动方向控制,所以在添加蛇头之前应该判定蛇头方向,假如蛇向上移动,direction应为1,我们让改变之前snakeBody调用addFirst()功效添加蛇头,里面参数
6、应为改变之前蛇头纵坐标减一个格子,向下,向左,向右原理相同。蛇已更改含有改变方向功效,方便于后面控制蛇移动时候改变方向,定义函数changeDirection(),传入int型方向值。蛇还应该有判定是否吃到食物功效,定义功效函数isEatFood(),判定蛇是否吃到食物只需判定蛇头坐标是否和食物坐标相同,这里有一个小问题,蛇类中没有定义食物Food类型引用,判定时还要有食物类型对象,为了降低蛇和食物之间联络,不得不传入一个Food 类型参数。图:2-4.2蛇应该有判定是否吃到石头功效,因为石头是一个比较大集合,若沿用判定是否吃到食物方法必将浪费大量资源,在后面设计石头时候我们能够用一个bool
7、ean类型二维数组来存放一组石头命名为map,是石头设置这个坐标为true,不是则设为false,这么判定蛇是否吃到食物就较为简单,只需判定蛇头坐标作为石头数组时是否为treu即可。图2-4.2所表示,也即是直接反回mapsnakeBody.getfirst().getx()snakeBody.getfirst().getx()即可。蛇另一个功效是判定蛇是否吃到自己身体,需要定义一个功效函数isEatBoody()判定蛇是否吃到身体同判定是否吃到食物相同,只需判定蛇头坐标和蛇身坐标是否相同,为了降低CPU工作量,能够稍微优化一点,判定蛇头和蛇身坐标是否相同时从第4截身体开始判定即可,因为不管蛇
8、怎么移动全部不会和第二截、第三截身体相撞。蛇要在显示面板中显示,根据面向对象思想,蛇要在面板中显示身体,设计到两个对象,蛇、面板,显然显示这个动作蛇本身应该最具权威性,蛇对自己属性最了解,就应该把显示蛇这个功效定义在蛇这个类中,创建功效函数drawMe()给它传输一个画笔Graphics g,从蛇头到蛇身依次画出每个格子。最终考虑到以后重新开始游戏,和多个关卡问题,这里先定义好一个蛇初始化功效函数init()。相关蛇分析先到这里。其次是对食物分析:食物在游戏中自始至终只会有一个,只需定义一个Square对象即可,命名为food;因为后面蛇吃到食物后要随机生成一个新食物,需要用到Random类中
9、随机函数,这里事先定义好一个Random ran;确定好参数后确定功效函数,首先应该是判定食物是否被吃掉,定义函数isFoodEaten();同isEatFood相同。其次食物被吃掉以后会随机产生一个新食物,定义函数setFood(),产生新食物瞬间,旧食物已经消失,没有必需在去创建一个food对象,只需将food中坐标改变一下即可,x坐标传入一个随机参数,y坐标传入一个随机参数,显示面板大小先确定划分为30*30个格子,x坐标和y坐标应该在029之间,只需简单一句话x = (int)(ran.nextFloat()*30),经过Random类获取01之间小数,乘以30得到030之间数,在强制
10、转换为int类型数传输给x,y;最终同蛇相同,食物也应该在面板中显示,定义显示功效函数drawMe()传入参数Graphics g。再接着对石头分析:在对蛇分析时候仍然考虑到石头存放,定义一个boolean类型数组统计是否画石头,boolean map = new boolean 3030;考虑到以后地图改变,在创建石头时候应该设计不一样地图,依据传入参数不一样,创建不一样地图,定义结构函数Stone();传入一个int类型参数,依据参数创建不一样地图;地图设计较为简单,利用switch()case:判定需要创建何种地图。创建地图既是在map数组中不一样位置设置成true。同蛇和食物相同,石头
11、类应该含有显示功效drawMe(),传入参数Graphics g。完善以上功效以后就能够在逻辑处理类Logic中先搭建简单处理关系,以确保蛇,食物,石头能够显示出来;Snake snake = new Sanke();Food food = new Food();Stone stone = new Stone(1);先显示地图1作为测试。在显示面板类DisplayPanel中创建结构函数传入Logic实例对象;重写paint方法,paint()方法中调用logic.Snake.drawMe() logic.Stone.drawMe() logic.food.drawMe() ;运行可显示效果,
12、看到蛇,食物,石头已经显示到面板中。5. 逻辑关系处理做好蛇还不会移动,接下来就来实现此功效:蛇要在每隔一段时间移动一个格子。蛇要移动,还要在没有死亡之前一直移动,主函数所开启根本程任务是开启窗体和在内存中创建好所需要资源,这里必需另开一个新线程。开启线程方法有两种,这里选择实现Runnable接口方法,让Logic implements Runnable,实现run()方法,因为蛇要不停运动在蛇move方法之外加入while(true),蛇每隔一段时间会自动移动一格,在move方法以后添加Thread.sleep(300),经过数次运行测试得出时间;在主函数MainOfGreedySnake
13、中创建线程thread t = new Thread(logic);运行观察效果,会发觉蛇依旧不会移动,这是因为显示面板中paint函数需要重新被调用才会重新绘制图形,在DisplayPanelpaint最终加上repaint();再次运行,蛇已经能够自己移动。现在蛇仍然能够移动,但不受控制,会移动出边界,所以需要在蛇移动以后判定蛇是否移出边界,将此功效封装成函数,显然应该定义在蛇类中,命名为isOverBand(),函数所需功效即判定蛇头是否移出边界,若是则将蛇头坐标更换为另一边界坐标,实现了蛇在要求范围内自动移动。蛇能够自动移动,但仍然还不受控制,后面将实现键盘控制蛇移动方向:键盘控制蛇移
14、动方向,也即是每按下一个键,经过某种响应,让蛇方向改变,很轻易想到Java GUI开发中提供事件监听机制,但问题在于事件监听机制是针对GUI组件设计,这就需要将蛇方向和主函数创建JFrame联络到一起,主函数中需要创建Logic实例对象,Logic中有创建蛇对象,能够直接在主函数JFrame上添加监听器,相关监听器创建这里为了以后添加更多功效不至于关系复杂化,采取匿名内部类方法为JFrame添加监听器,JFrame jf = new JFrame();jf.addKeyListener(new KeyListener()),监听器里面重写keyPressed()功效函数,利用switch()c
15、ase语句判定方向键调用logic.snake.chageDirection()方法改变方向。到这里程序调试运行方向以然能够控制,但根据要求,蛇不能向相反方向运行,在改变方向时候应该做一个判定,新传入方向值若和snake对象中方向值相同话,snake方向值不做改变,加以判定以后,蛇运行轨迹同想象中运行规则几乎没有差异了,不过还有一个小小bug存在,就是假如蛇向下移动话,在下一次移动触发前,先按下向左,在按下向上,蛇还会向相反方向移动,对于这个问题处理首先要找到问题根源,假如蛇向下移动时候,先按下向左方向,蛇direction会被赋值为向左,但在蛇下一次移动之前,又按下向上方向键,在判定方向时候
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 方案 思路
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。