java編寫貪吃蛇小遊戲_java

來源:互聯網
上載者:User

廢話不多說,直接奉上代碼:

Frame.java

package snake; import java.awt.Graphics;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener; import javax.swing.JFrame; public class Frame extends JFrame implements KeyListener {   /**   *    */     Boolean isAlive;  Boolean isPause;  Panel panel;  Character direction;  private static final long serialVersionUID = 1L;   public Frame(){    // TODO Auto-generated constructor stub    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    setSize(300,300);    addKeyListener(this);    panel = new Panel();    add(panel);    setVisible(true);    isAlive = true;    isPause = false;    direction = new Character('d');     MenuBar menuBar = new MenuBar();    Menu menu = new Menu("menu");    MenuItem reset = new MenuItem("newgame");    MenuItem pause= new MenuItem("pause");         pause.addActionListener(new ActionListener(){       @Override      public void actionPerformed(ActionEvent e) {        // TODO Auto-generated method stub        if(!isPause) isPause= true;        else     isPause= false;       }           });          reset.addActionListener(new ActionListener(){       @Override      public void actionPerformed(ActionEvent e) {        // TODO Auto-generated method stub        reset();      }           });         menu.add(reset);    menu.add(pause);    menuBar.add(menu);    setMenuBar(menuBar);            }     public void reset(){    panel.reset();    isAlive = true;  }   @Override  public void keyTyped(KeyEvent e) {    // TODO Auto-generated method stub       }   @Override  public void keyPressed(KeyEvent e) {    // TODO Auto-generated method stub    if(e.getKeyCode()==KeyEvent.VK_UP)  direction = 'w';    if(e.getKeyCode()==KeyEvent.VK_DOWN) direction = 's';    if(e.getKeyCode()==KeyEvent.VK_LEFT) direction = 'a';    if(e.getKeyCode()==KeyEvent.VK_RIGHT) direction = 'd';  }   @Override  public void keyReleased(KeyEvent e) {    // TODO Auto-generated method stub       }     public void paint(Graphics g){    panel.repaint();  } }

Launch.java

package snake; import java.util.Timer;import java.util.TimerTask; public class Launch extends TimerTask {   Frame frame = new Frame();  public Launch() {    // TODO Auto-generated constructor stub       }     boolean crashWall(){    SnakeBody sb = frame.panel.snake.getFirst();    if((sb.x<0)||(sb.y<0)||(sb.x>=Panel.LINE)||(sb.y>=Panel.LINE))      return true;    else      return false;  }  void initial(){    frame.panel.snake.add(newBody());    frame.panel.food = newBody();   }  @Override  public void run() {    // TODO Auto-generated method stub    if(frame.panel.snake.isEmpty())      initial();    if(frame.isAlive)      if(!frame.isPause){        if(goStraight())           frame.isAlive = false;        frame.repaint();      }    if(crashWall()) frame.isAlive = false;  }     SnakeBody newBody(){    SnakeBody sb = new SnakeBody();     boolean overlap = true;    while(overlap){      overlap =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))          overlap =true;    }         return sb;  }      void eat(SnakeBody sb){    frame.panel.snake.addFirst(sb);  }  boolean goStraight(){         boolean result = 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();      eat(frame.panel.food);      frame.panel.food = newBody();    }         return result;  }         public static void main(String[] args){    // TODO Auto-generated method stub     Launch timertask = new Launch();     Timer timer = new Timer();          timer.schedule(timertask,0,500);  } }

Panel.java

package snake; import java.awt.Color;import java.awt.Graphics;import java.util.LinkedList; import javax.swing.JPanel;  public class Panel extends JPanel {     /**   *    */  private static final long serialVersionUID = 1L;  public LinkedList<SnakeBody> snake = new LinkedList<SnakeBody>();  static final int LINE = 10;  SnakeBody food = new SnakeBody(-99,-99);      public Panel() {    // TODO Auto-generated constructor stub  }     public void reset(){    snake.clear();    }     public void paint(Graphics 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(Color.orange);      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

package snake;  class SnakeBody {     int x;  int y;     public SnakeBody() {    // TODO Auto-generated constructor stub    x = 0;    y = 0;  }     public SnakeBody(int a,int b){    x = a;    y = b;  }  public SnakeBody(SnakeBody sb){    this(sb.x,sb.y);  }     public void turnUp(){    y--;  }  public void turnDown(){    y++;  }  public void turnLeft(){    x--;  }  public void turnRight(){    x++;  }     boolean equals(SnakeBody s){    if((x==s.x)&&(y==s.y)) return true;    else          return false;  } }

以上所述就是本文給大家分享的貪吃蛇的全部代碼了,希望能夠對大家熟練掌握java有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.