废话不多说了,直接转发上代码:
框架.java
包蛇;导入java.awt.Graphics;导入java.awt.Menu;导入java.awt.MenuBar;导入java.awt.MenuItem;导入java.awt.event.ActionEvent;导入java.awt.event.ActionListener;导入java.awt .event.KeyEvent;导入java.awt.event.KeyListener;导入 javax.swing.JFrame;公共类 Frame 扩展 JFrame 实现 KeyListener { /** * */ Boolean isAlive;布尔值是暂停;面板面板;人物方向;私有静态最终长serialVersionUID = 1L; public Frame(){ // TODO 自动生成的构造函数存根 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);设置大小(300,300);添加KeyListener(这个);面板=新面板();添加(面板);设置可见(真);还活着=真; isPause = false;方向=新角色('d');菜单栏 menuBar = new 菜单栏();菜单菜单=新菜单(“菜单”);菜单项重置=新菜单项(“新游戏”);菜单项暂停=新菜单项(“暂停”); pause.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 if(!isPause) isPause= true; else isPause= false; } }); reset.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 reset(); } });菜单.添加(重置);菜单.添加(暂停);菜单栏.add(菜单);设置菜单栏(菜单栏); } 公共无效重置(){ 面板.重置();还活着=真; } @Override public void keyTyped(KeyEvent e) { // TODO 自动生成的方法存根 } @Override public void keyPressed(KeyEvent e) { // TODO 自动生成的方法存根 if(e.getKeyCode()==KeyEvent.VK_UP ) 方向 = 'w'; if(e.getKeyCode()==KeyEvent.VK_DOWN) 方向 = 's'; if(e.getKeyCode()==KeyEvent.VK_LEFT) 方向 = 'a'; if(e.getKeyCode()==KeyEvent.VK_RIGHT) 方向 = 'd'; } @Override public void keyReleased(KeyEvent e) { // TODO 自动生成的方法存根 } public void Paint(Graphics g){ panel.repaint(); } }启动.java
包蛇;导入 java.util.Timer;导入 java.util.TimerTask;公共类 Launch 扩展 TimerTask { Frameframe = new Frame(); public Launch() { // TODO 自动生成构造函数存根 } boolean crashWall(){ SnakeBody sb = frame.panel.snake.getFirst(); if((sb.x<0)||(sb.y<0)||(sb.x>=Panel.LINE)||(sb.y>=Panel.LINE)) 返回 true;否则返回 false; } voidinitial(){frame.panel.snake.add(newBody()); frame.panel.food = newBody(); } @Override public void run() { // TODO 自动生成的方法存根 if(frame.panel.snake.isEmpty()) initial(); if(frame.isAlive) if(!frame.isPause){ if(goStraight())frame.isAlive = false;框架.重绘(); if(crashWall())frame.isAlive = false; } SnakeBody newBody(){ SnakeBody sb = new SnakeBody();布尔重叠 = true; while(重叠){ 重叠 = false; sb.x = (int) (Math.random()*(Panel.LINE-2)+1); sb.y = (int) (Math.random()*(Panel.LINE-2)+1); if(!frame.panel.snake.isEmpty()) for(SnakeBody s :frame.panel.snake) if(sb.equals(s)) 重叠 =true; } 返回某人; } void eat(SnakeBody sb){frame.panel.snake.addFirst(sb); } 布尔 goStraight(){ 布尔结果 = false; SnakeBody sb =new SnakeBody(frame.panel.snake.getFirst()); frame.panel.snake.removeLast(); if(frame.direction=='w') sb.turnUp(); if(frame.direction=='s') sb.turnDown(); if(frame.direction=='a') sb.turnLeft(); if(frame.direction=='d') sb.turnRight(); for(SnakeBody s :frame.panel.snake){ if(sb.equals(s)) result = true; }frame.panel.snake.addFirst(sb); if(sb.equals(frame.panel.food)){ if(frame.direction=='w')frame.panel.food.turnUp(); if(frame.direction=='s')frame.panel.food.turnDown(); if(frame.direction=='a')frame.panel.food.turnLeft(); if(frame.direction=='d')frame.panel.food.turnRight();吃(框架.面板.食物); frame.panel.food = newBody();返回结果; } public static void main(String[] args){ // TODO 自动生成的方法存根 Launch timertask = new Launch();计时器计时器 = new Timer();计时器.schedule(timertask,0,500); } }面板.java
包蛇;导入java.awt.Color;导入java.awt.Graphics;导入java.util.LinkedList;导入javax.swing.JPanel;公共类面板扩展JPanel { / ** * * /私有静态最终长serialVersionUID = 1L; public LinkedList<SnakeBody> Snake = new LinkedList<SnakeBody>();静态最终 int LINE = 10; SnakeBody 食物 = new SnakeBody(-99,-99); public Panel() { // TODO 自动生成的构造函数存根 } public void reset(){ Snake.clear(); } 公共无效油漆(图形g){ g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); for(SnakeBody sb : Snake){ g.setColor(Color.black); g.drawRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); g.setColor(颜色.橙色); g.fillRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); g.setColor(Color.red); g.fillRect(food.x*getWidth()/LINE,food.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); }}SnakeBody.java
包蛇;类 SnakeBody { int x;整数y; public SnakeBody() { // TODO 自动生成的构造函数存根 x = 0; y = 0; } 公共 SnakeBody(int a,int b){ x = a; y=b; } 公共 SnakeBody(SnakeBody sb){ this(sb.x,sb.y); } 公共无效turnUp(){ y--; } 公共无效 TurnDown(){ y++; } 公共无效turnLeft(){ x--; } 公共无效turnRight(){x++; } boolean equals(SnakeBody s){ if((x==sx)&&(y==sy)) return true;否则返回 false; } }以上就是大家文章给大家分享的贪吃蛇的全部代码了,希望能够对掌握java有所帮助。