最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java編寫貪吃蛇小游戲

 更新時(shí)間:2015年03月30日 08:58:24   投稿:hebedich  
貪吃蛇是經(jīng)典手機(jī)游戲,既簡(jiǎn)單又耐玩。通過控制蛇頭方向吃蛋,使得蛇變長(zhǎng),從而獲得積分。今天我們就來(lái)用java來(lái)實(shí)現(xiàn)下貪吃蛇小游戲,有需要的小伙伴可以參考下

廢話不多說(shuō),直接奉上代碼:

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;
  }
 
}

以上所述就是本文給大家分享的貪吃蛇的全部代碼了,希望能夠?qū)Υ蠹沂炀氄莆誮ava有所幫助。

相關(guān)文章

  • Mybatis-Plus @TableField自動(dòng)填充時(shí)間為null的問題解決

    Mybatis-Plus @TableField自動(dòng)填充時(shí)間為null的問題解決

    本文主要介紹了Mybatis-Plus @TableField自動(dòng)填充時(shí)間為null的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Java中.divide()方法使用及注意事項(xiàng)詳解

    Java中.divide()方法使用及注意事項(xiàng)詳解

    divide方法就是bigdecimal類中的一個(gè)除法計(jì)算方法,由于該divide方法參數(shù)類型眾多并且不易理解容易出現(xiàn)錯(cuò)誤,這篇文章主要給大家介紹了關(guān)于Java中.divide()方法使用及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • 純java代碼實(shí)現(xiàn)抽獎(jiǎng)系統(tǒng)

    純java代碼實(shí)現(xiàn)抽獎(jiǎng)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了純java代碼實(shí)現(xiàn)抽獎(jiǎng)系統(tǒng),無(wú)連接數(shù)據(jù)庫(kù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Springboot中@scheduled注解解析

    Springboot中@scheduled注解解析

    這篇文章主要介紹了Springboot中@scheduled注解解析,定時(shí)任務(wù)就是在指定時(shí)間執(zhí)行程序,或周期性執(zhí)行計(jì)劃任務(wù),Java中實(shí)現(xiàn)定時(shí)任務(wù)的方法有很多,本文從從JDK自帶的一些方法來(lái)實(shí)現(xiàn)定時(shí)任務(wù)的需求,需要的朋友可以參考下
    2023-09-09
  • SpringSecurity微服務(wù)實(shí)戰(zhàn)之公共模塊詳解

    SpringSecurity微服務(wù)實(shí)戰(zhàn)之公共模塊詳解

    這篇文章主要為大家介紹了SpringSecurity微服務(wù)實(shí)戰(zhàn)之公共模塊詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java Stream 流的使用過程解析

    Java Stream 流的使用過程解析

    這篇文章主要介紹了Java Stream 流的使用過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Linux服務(wù)器如何部署java項(xiàng)目

    Linux服務(wù)器如何部署java項(xiàng)目

    這篇文章主要介紹了Linux服務(wù)器如何部署java項(xiàng)目問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java獲取視頻時(shí)長(zhǎng)、大小的示例

    Java獲取視頻時(shí)長(zhǎng)、大小的示例

    這篇文章主要介紹了Java獲取視頻時(shí)長(zhǎng)、大小的示例,幫助大家利用Java處理視頻,完成需求,感興趣的朋友可以了解下
    2020-11-11
  • 如何將Java枚舉名稱作為注解的屬性值實(shí)現(xiàn)詳解

    如何將Java枚舉名稱作為注解的屬性值實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了如何將Java枚舉名稱作為注解的屬性值實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • java數(shù)據(jù)隨機(jī)分頁(yè)實(shí)現(xiàn)方案

    java數(shù)據(jù)隨機(jī)分頁(yè)實(shí)現(xiàn)方案

    本文主要介紹了java數(shù)據(jù)隨機(jī)分頁(yè)實(shí)現(xiàn)方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評(píng)論

霞浦县| 潼关县| 青海省| 铜川市| 温州市| 监利县| 新竹县| 沁阳市| 青阳县| 孝感市| 汉寿县| 仙游县| 宁夏| 八宿县| 时尚| 黔南| 谷城县| 西盟| 新营市| 澜沧| 正镶白旗| 固镇县| 禄丰县| 潼南县| 莱州市| 井冈山市| 虎林市| 灵山县| 庆安县| 呼图壁县| 阿坝| 临沂市| 佛学| 金塔县| 建始县| 汝州市| 苗栗市| 汪清县| 临潭县| 阿拉尔市| 贵德县|