ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:18.30KB ,
资源ID:23755386      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23755386.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(贪吃蛇java代码.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

贪吃蛇java代码.docx

1、贪吃蛇java代码用mvc方式实现的贪吃蛇游戏,共有4个类。运行greedsnake运行即可。主要是观察者模式的使用, 已经添加了很多注释了。1、/* 程序名称:贪食蛇* 原作者:bigf* 修改者:algo* 说明: 以前也用c写过这个程序,现在看到bigf用java写的这个,发现虽然作者自称是java的初学者,* 但是明显编写程序的素养不错,程序结构写得很清晰,有些细微得地方也写得很简洁,一时兴起之* 下, 认真解读了这个程序,发现数据和表现分开得很好,而 近日正在学习mvc设计模式,* 因此尝试把程序得结构改了一下,用mvc模式来实现,对源程序得改动不多。* 同时也为程序增加了一些自己理

2、解得注释,希望对大家阅读有帮助。*/package mvctest;/* author wangyu* version 1.0* description:* * create on :date :2005-6-13 time:15:57:16* lastmodified:* history:*/public class greedsnake public static void main(string args) snakemodel model = new snakemodel(20,30); snakecontrol control = new snakecontrol(model); s

3、nakeview view = new snakeview(model,control); /添加一个观察者,让view成为model的观察者 model.addobserver(view); (new thread(model).start(); -2、package mvctest;/snakecontrol.javaimport java.awt.event.keyevent;import java.awt.event.keylistener;/* mvc中的controler,负责接收用户的操作,并把用户操作通知model*/public class snakecontrol impl

4、ements keylistener snakemodel model; public snakecontrol(snakemodel model) this.model = model; public void keypressed(keyevent e) int keycode = e.getkeycode(); if (model.running) / 运行状态下,处理的按键 switch (keycode) case keyevent.vk_up: model.changedirection(snakemodel.up); break; case keyevent.vk_down: m

5、odel.changedirection(snakemodel.down); break; case keyevent.vk_left: model.changedirection(snakemodel.left); break; case keyevent.vk_right: model.changedirection(snakemodel.right); break; case keyevent.vk_add: case keyevent.vk_page_up: model.speedup(); break; case keyevent.vk_subtract: case keyevent

6、.vk_page_down: model.speeddown(); break; case keyevent.vk_space: case keyevent.vk_p: model.changepausestate(); break; default: / 任何情况下处理的按键,按键导致重新启动游戏 if (keycode = keyevent.vk_r | keycode = keyevent.vk_s | keycode = keyevent.vk_enter) model.reset(); public void keyreleased(keyevent e) public void k

7、eytyped(keyevent e) -3、/*/package mvctest;/* 游戏的model类,负责所有游戏相关数据及运行* author wangyu* version 1.0* description:* * create on :date :2005-6-13 time:15:58:33* lastmodified:* history:*/snakemodel.javaimport javax.swing.*;import java.util.arrays;import java.util.linkedlist;import java.util.observable;imp

8、ort java.util.random;/* 游戏的model类,负责所有游戏相关数据及运行*/class snakemodel extends observable implements runnable boolean matrix; / 指示位置上有没蛇体或食物 linkedlist nodearray = new linkedlist(); / 蛇体 node food; int maxx; int maxy; int direction = 2; / 蛇运行的方向 boolean running = false; / 运行状态 int timeinterval = 200; / 时

9、间间隔,毫秒 double speedchangerate = 0.75; / 每次得速度变化率 boolean paused = false; / 暂停标志 int score = 0; / 得分 int countmove = 0; / 吃到食物前移动的次数 / up and down should be even / right and left should be odd public static final int up = 2; public static final int down = 4; public static final int left = 1; public s

10、tatic final int right = 3; public snakemodel( int maxx, int maxy) this.maxx = maxx; this.maxy = maxy; reset(); public void reset() direction = snakemodel.up; / 蛇运行的方向 timeinterval = 200; / 时间间隔,毫秒 paused = false; / 暂停标志 score = 0; / 得分 countmove = 0; / 吃到食物前移动的次数 / initial matirx, 全部清0 matrix = new

11、booleanmaxx; for (int i = 0; i 20 ? 10 : maxx / 2; nodearray.clear(); for (int i = 0; i initarraylength; +i) int x = maxx / 2 + i;/maxx被初始化为20 int y = maxy / 2; /maxy被初始化为30 /nodearrayx,y: 10,15-11,15-12,1520,15 /默认的运行方向向上,所以游戏一开始nodearray就变为: / 10,14-10,15-11,15-12,1519,15 nodearray.addlast(new nod

12、e(x, y); matrixxy = true; / 创建食物 food = createfood(); matrixfood.xfood.y = true; public void changedirection(int newdirection) / 改变的方向不能与原来方向同向或反向 if (direction % 2 != newdirection % 2) direction = newdirection; /* * 运行一次 * return */ public boolean moveon() node n = (node) nodearray.getfirst(); int

13、x = n.x; int y = n.y; / 根据方向增减坐标值 switch (direction) case up: y-; break; case down: y+; break; case left: x-; break; case right: x+; break; / 如果新坐标落在有效范围内,则进行处理 if (0 = x & x maxx) & (0 = y & y 0 ? scoreget : 10; countmove = 0; food = createfood(); / 创建新的食物 matrixfood.xfood.y = true; / 设置食物所在位置 retu

14、rn true; else / 吃到蛇体自身,失败 return false; else / 如果新坐标的点上没有东西(蛇体),移动蛇体 nodearray.addfirst(new node(x, y); matrixxy = true; n = (node) nodearray.removelast(); matrixn.xn.y = false; countmove+; return true; return false; / 触到边线,失败 public void run() running = true; while (running) try thread.sleep(timein

15、terval); catch (exception e) break; if (!paused) if (moveon() setchanged(); / model通知view数据已经更新 notifyobservers(); else joptionpane.showmessagedialog(null, you failed, game over, joptionpane.information_message); break; running = false; private node createfood() int x = 0; int y = 0; / 随机获取一个有效区域内的与

16、蛇体和食物不重叠的位置 do random r = new random(); x = r.nextint(maxx); y = r.nextint(maxy); while (matrixxy); return new node(x, y); public void speedup() timeinterval *= speedchangerate; public void speeddown() timeinterval /= speedchangerate; public void changepausestate() paused = !paused; public string to

17、string() string result = ; for (int i = 0; i nodearray.size(); +i) node n = (node) nodearray.get(i); result += + n.x + , + n.y + ; return result; class node int x; int y; node(int x, int y) this.x = x; this.y = y; -4、package mvctest;/snakeview.javaimport javax.swing.*;import java.awt.*;import java.u

18、til.iterator;import java.util.linkedlist;import java.util.observable;import java.util.observer;/* mvc模式中得viewer,只负责对数据的显示,而不用理会游戏的控制逻辑*/public class snakeview implements observer snakecontrol control = null; snakemodel model = null; jframe mainframe; canvas paintcanvas; jlabel labelscore; public sta

19、tic final int canvaswidth = 200; public static final int canvasheight = 300; public static final int nodewidth = 10; public static final int nodeheight = 10; public snakeview(snakemodel model, snakecontrol control) this.model = model; this.control = control; mainframe = new jframe(greedsnake); container cp = mainframe.getcontentpane(); / 创建顶部的分数显示 labelscore = new jlabel(score:); cp.add(labelscore, borderlayout.north); / 创建中间的游戏显示区域 paintcanvas = new canvas(); paintcanvas.setsize(canvaswidth + 1, canvasheight + 1); pa

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1