贪吃蛇

来源:互联网 发布:研华工控机编程软件 编辑:程序博客网 时间:2024/04/30 13:04

代码如下

SE.java文件

import java.io.Serializable;/** * SE类--蛇的关节元素对象 * @author Administrator * */public class SE implements Serializable {private static final long serialVersionUID = -6058052882884632278L;/** * shift+alt+s  调出小菜单 * 自动生成: * 1--无参数构造器 * 2--全部参数构造器 * 3--setter和getter方法 * 4--重写hashCode和equals方法 * 5--重写toString方法 * 6--该类需要实现一个可序列化接口 serializable 并 添加可序列化的标识常量 */private int se_w ;private int se_h ;private int se_x ;private int se_y ;public SE() {super();// TODO Auto-generated constructor stub}public SE(int se_w, int se_h, int se_x, int se_y) {super();this.se_w = se_w;this.se_h = se_h;this.se_x = se_x;this.se_y = se_y;}public int getSe_w() {return se_w;}public void setSe_w(int se_w) {this.se_w = se_w;}public int getSe_h() {return se_h;}public void setSe_h(int se_h) {this.se_h = se_h;}public int getSe_x() {return se_x;}public void setSe_x(int se_x) {this.se_x = se_x;}public int getSe_y() {return se_y;}public void setSe_y(int se_y) {this.se_y = se_y;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + se_h;result = prime * result + se_w;result = prime * result + se_x;result = prime * result + se_y;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;SE other = (SE) obj;if (se_h != other.se_h)return false;if (se_w != other.se_w)return false;if (se_x != other.se_x)return false;if (se_y != other.se_y)return false;return true;}@Overridepublic String toString() {return "SE [se_w=" + se_w + ", se_h=" + se_h + ", se_x=" + se_x+ ", se_y=" + se_y + "]";} }
Bean.java文件

import java.io.Serializable;/* * 豆子类 */public class Bean implements Serializable{private static final long serialVersionUID = -8929116071517599107L;private int b_w ;private int b_h ;private int b_x ;private int b_y ;private int b_r ; private int b_g ;private int b_b ;public Bean() {super();// TODO Auto-generated constructor stub}public Bean(int b_w, int b_h, int b_x, int b_y, int b_r, int b_g, int b_b) {super();this.b_w = b_w;this.b_h = b_h;this.b_x = b_x;this.b_y = b_y;this.b_r = b_r;this.b_g = b_g;this.b_b = b_b;}public int getB_w() {return b_w;}public void setB_w(int b_w) {this.b_w = b_w;}public int getB_h() {return b_h;}public void setB_h(int b_h) {this.b_h = b_h;}public int getB_x() {return b_x;}public void setB_x(int b_x) {this.b_x = b_x;}public int getB_y() {return b_y;}public void setB_y(int b_y) {this.b_y = b_y;}public int getB_r() {return b_r;}public void setB_r(int b_r) {this.b_r = b_r;}public int getB_g() {return b_g;}public void setB_g(int b_g) {this.b_g = b_g;}public int getB_b() {return b_b;}public void setB_b(int b_b) {this.b_b = b_b;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + b_b;result = prime * result + b_g;result = prime * result + b_h;result = prime * result + b_r;result = prime * result + b_w;result = prime * result + b_x;result = prime * result + b_y;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Bean other = (Bean) obj;if (b_b != other.b_b)return false;if (b_g != other.b_g)return false;if (b_h != other.b_h)return false;if (b_r != other.b_r)return false;if (b_w != other.b_w)return false;if (b_x != other.b_x)return false;if (b_y != other.b_y)return false;return true;}@Overridepublic String toString() {return "Bean [b_w=" + b_w + ", b_h=" + b_h + ", b_x=" + b_x + ", b_y="+ b_y + ", b_r=" + b_r + ", b_g=" + b_g + ", b_b=" + b_b + "]";}}


SnakeMainFrame.java文件:

import java.awt.Color;import java.awt.Graphics;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.LinkedList;import java.util.Random;import java.util.Timer;import java.util.TimerTask;import javax.swing.JFrame;import javax.swing.JOptionPane;public class SnakeMainFrame extends JFrame{private static final long serialVersionUID = 4162523224330812384L;private static final String UP = "UP" ;private final static String DOWN = "DOWN" ;private static final String LEFT = "LEFT" ;private static final String RIGHT = "RIGHT" ;private static final String STOP = "STOP" ;private int fw = 400 ;private int fh = 400 ;private String direction = "UP" ;  //取值有四个方向  UP DOWN LEFT RIGHTpublic void init(){ //初始化//this.setAlwaysOnTop(true);this.setSize(fw, fh);this.setUndecorated(true);this.getContentPane().setBackground(Color.BLACK);this.setLocationRelativeTo(null);this.addKeyListener(new KeyListener() {@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {if(KeyEvent.VK_SPACE==e.getKeyCode()){ direction = STOP ;}if(KeyEvent.VK_LEFT==e.getKeyCode()&&direction!=RIGHT){ //说明你按下的键是  <--direction = LEFT ;}if(KeyEvent.VK_RIGHT==e.getKeyCode()&&direction!=LEFT){ direction = RIGHT ;}if(KeyEvent.VK_UP==e.getKeyCode()&&direction!=DOWN){ direction = UP ;}if(KeyEvent.VK_DOWN==e.getKeyCode()&&direction!=UP){ direction = DOWN ;}}});this.initSE_m();//调用初始化蛇this.initBean(); //调用初始化豆子this.timer.schedule(timertask, 1000/*延时时间 如果不想延时 设为0毫秒*/, 100/*执行的频率 毫秒数*/);this.setVisible(true);}/** * 产生豆子 */private int b_w = 20 ; private int b_h = 20 ;private int b_x ;private int b_y ;private int b_r ; private int b_g ;private int b_b ;private Random rand = new Random();private Bean bean = null ;public void initBean_data(){b_x = rand.nextInt(fw/20)*20;b_y = rand.nextInt(fh/20)*20;b_r = rand.nextInt(256);b_g = rand.nextInt(256);b_b = rand.nextInt(256);}//public Bean(int b_w, int b_h, int b_x, int b_y, int b_r, int b_g, int b_b) {public void initBean(){this.initBean_data();for(SE e:snake){if(e.getSe_x()==b_x&&e.getSe_y()==b_y){initBean_data();}}bean = new Bean(b_w,b_h,b_x,b_y,b_r,b_g,b_b);}/*产生蛇*/private int se_x = fw/2 ;private int se_y = fh/2 ;private int se_w = 20 ;private int se_h = 20 ;private SE se = null ;private LinkedList<SE> snake = new LinkedList<SE>();private Timer timer = new Timer();public void initSE(){//使用new关键字调用SE类的全部参数构造器创建一个SE实例(对象),//赋值给一个自定义的引用变量(引用该对象在堆内存中的首地址),//并指明该引用变量的类型se = new SE(se_w,se_h , se_x , se_y); //注意参数顺序se_y += se_h ;snake.add(se);}public void initSE_m(){snake.removeAll(snake);for (int i = 0; i < 3; i++) {initSE();}//System.out.println(snake);}@Overridepublic void paint(Graphics g) {super.paint(g);//画出豆子g.setColor(new Color(bean.getB_r(),bean.getB_g(),bean.getB_b()));g.fillRect(bean.getB_x(), bean.getB_y(), bean.getB_w(), bean.getB_h());if(!check(snake.get(0))){this.timer.cancel();int option = JOptionPane.showConfirmDialog(null,       "得分为:"+(this.snake.size()-3), "是否继续?", JOptionPane.YES_NO_OPTION,       JOptionPane.WARNING_MESSAGE, null);     switch (option) {     case JOptionPane.YES_NO_OPTION: {    this.dispose();    new SnakeMainFrame();      break;     }     case JOptionPane.NO_OPTION:      System.exit(0);     }};//画出蛇for (int i = 0; i < snake.size() ; i++) {if(i==0){g.setColor(Color.RED);}else{g.setColor(Color.GREEN);}g.fill3DRect(snake.get(i).getSe_x(), snake.get(i).getSe_y(), snake.get(i).getSe_w(), snake.get(i).getSe_h(), true);}}public boolean check(SE se){for(int i = 1 ; i < snake.size() ; i++){SE e = snake.get(i);if(snake.getFirst().getSe_x()==e.getSe_x()&&e.getSe_y()==snake.getFirst().getSe_y()){return false;}}if(se.getSe_x()>fw||se.getSe_y()>fh||se.getSe_x()<0||se.getSe_y()<0){return false;}else{return true;}}public boolean collision(){if(snake.get(0).getSe_x()==bean.getB_x()&&snake.get(0).getSe_y()==bean.getB_y()){initBean();return true;}else{return false;}}TimerTask timertask = new TimerTask() { //这是一个执行计划 就是准备做的事情 具体事情的逻辑代码在run方法中@Overridepublic void run() {//将蛇的最后一个关节移除 获取头部数据,在头部数据的基础上创建一个新关节元素并添加到容器中、if(SnakeMainFrame.STOP.equalsIgnoreCase(direction)){}if(SnakeMainFrame.UP.equalsIgnoreCase(direction)){SE e = new SE(SnakeMainFrame.this.snake.get(0).getSe_w(),SnakeMainFrame.this.snake.get(0).getSe_h(),SnakeMainFrame.this.snake.get(0).getSe_x(),SnakeMainFrame.this.snake.get(0).getSe_y() - SnakeMainFrame.this.snake.get(0).getSe_h());if(!collision()){SnakeMainFrame.this.snake.removeLast();}snake.addFirst(e);repaint();//执行重画方法}if(SnakeMainFrame.DOWN.equalsIgnoreCase(direction)){SE e = new SE(SnakeMainFrame.this.snake.get(0).getSe_w(),SnakeMainFrame.this.snake.get(0).getSe_h(),SnakeMainFrame.this.snake.get(0).getSe_x(),SnakeMainFrame.this.snake.get(0).getSe_y() + SnakeMainFrame.this.snake.get(0).getSe_h());if(!collision()){SnakeMainFrame.this.snake.removeLast();}snake.addFirst(e);repaint();//执行重画方法}if(SnakeMainFrame.LEFT.equalsIgnoreCase(direction)){SE e = new SE(SnakeMainFrame.this.snake.get(0).getSe_w(),SnakeMainFrame.this.snake.get(0).getSe_h(),SnakeMainFrame.this.snake.get(0).getSe_x() -SnakeMainFrame.this.snake.get(0).getSe_w() ,SnakeMainFrame.this.snake.get(0).getSe_y());if(!collision()){SnakeMainFrame.this.snake.removeLast();}snake.addFirst(e);repaint();//执行重画方法}if(SnakeMainFrame.RIGHT.equalsIgnoreCase(direction)){SE e = new SE(SnakeMainFrame.this.snake.get(0).getSe_w(),SnakeMainFrame.this.snake.get(0).getSe_h(),SnakeMainFrame.this.snake.get(0).getSe_x() + SnakeMainFrame.this.snake.get(0).getSe_w() ,SnakeMainFrame.this.snake.get(0).getSe_y());if(!collision()){SnakeMainFrame.this.snake.removeLast();}snake.addFirst(e);repaint();//执行重画方法}}};public SnakeMainFrame() {this.init();}public static void main(String[] args) {new SnakeMainFrame();}}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不会给宝宝拍嗝怎么办 打了肉毒素淤青怎么办 新生儿一吃母乳就睡觉怎么办 10岁半宝宝缺钾怎么办 宝宝吃不到乳晕怎么办 喂母乳乳头破了怎么办 宝宝吸了乳头痛怎么办 喂母乳奶头很疼怎么办 孩子吸的乳头痛怎么办 新生儿一直睡觉不吸吮怎么办 新生儿光睡觉不吃奶怎么办 婴儿不吸母亲的奶怎么办 肾里有结石一直不掉下来怎么办 宝宝拍不出来嗝怎么办 未满月宝宝溢奶怎么办 吃母乳老是吐奶怎么办 宝宝吃母乳吐奶怎么办 新生儿三天没大便了怎么办 奶水多宝宝呛奶怎么办 婴儿的含乳姿势不正确怎么办 一个月竖着抱了怎么办 乳头被婴儿吸痛怎么办 婴儿从鼻孔吐奶怎么办 宝宝习惯含着乳头睡觉怎么办? 宝宝习惯奶瓶不吃乳头怎么办 婴儿从鼻子吐奶怎么办 宝宝从鼻孔出奶怎么办 一个月婴儿溢奶怎么办 刚出生婴儿溢奶怎么办 宝宝含不住乳晕怎么办 宝宝含不了乳晕怎么办 宝宝溢奶一直哭怎么办 宝宝倒奶很多次怎么办 宝宝吃了润肤乳怎么办 奶瓶很难吸出奶怎么办 2个月宝宝奶睡怎么办 孕四个月轻度缺碘怎么办 宝宝吃了奶粉呕吐怎么办 宝宝吃奶只含乳头怎么办 母乳流的太快怎么办 两个月小孩乳头混淆了怎么办