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

Java swing框架實現(xiàn)的貪吃蛇游戲完整示例

 更新時間:2017年12月13日 10:08:23   作者:101tx  
這篇文章主要介紹了Java swing框架實現(xiàn)的貪吃蛇游戲,結(jié)合完整實例形式分析了java使用swing框架結(jié)合awt圖形繪制實現(xiàn)貪吃蛇游戲的具體步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了Java swing框架實現(xiàn)的貪吃蛇游戲。分享給大家供大家參考,具體如下:

java是門高級語言,做游戲時適合做后臺,但是用它也可以做游戲。閑來無事做的時候可以用來寫點小游戲,練習練習預防早衰哈哈!

閑話不說了

下面是以前練習的作品,不怕大家笑話,那個時候用了一個禮拜才做出來的。

源碼如下供大家學習。

使用的是java的 swing  Jframe Jpanel JButton   當然你也可以使用awt

先來看看運行效果:

具體代碼:

package Tcs;
/**
 *
 *
 *
 * @author tx
 */
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Snack extends JPanel implements KeyListener {
  public JButton bt = new JButton("重新開始");
  public ArrayList<Treasure> bw = new ArrayList<Treasure>();
  public body[] b = new body[5];
  public String state = "";
  public ArrayList<point> p = new ArrayList<point>();
  public static int score;
  public Snack() {
    this.addKeyListener(this);
    shengc();
  }
  public void shengc() {
    for (int i = 0; i < b.length; i++) {
      b[i] = new body();
      b[i].x = 10 - i * 10;
      b[i].y = 150;
    }
  }
  public int x = 0, y = 0;
  public void paint(Graphics g) {
    super.paint(g);
    g.setColor(new Color(165,41,10));//RGB定義顏色的方法
    g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20));
    for (int i = 0; i < b.length; i++) {
      body z1 = b[i];
      g.drawString("O", b[i].x, b[i].y);
    }
    g.setColor(Color.BLUE);
    g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20));
    g.drawString("SCORE:" + score, 30, 30);
    paintjs(g);
    paintbw(g);
  }
  public void paintjs(Graphics g) {
    g.setColor(Color.BLACK);
    if (state.length() > 1) {
      g.drawString(state, 140, 200);
    }
  }
  public void paintbw(Graphics g) {
    g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 25));
    g.setColor(Color.RED);
    for (int i = 0; i < bw.size(); i++) {
      g.drawString("o", bw.get(i).x, bw.get(i).y);
    }
  }
  public boolean yj() {
    if ((b[0].x < 400 && b[0].x > 0) && (b[0].y < 400 && b[0].y > 0)) {
      return false;
    } else {
      state = "GAME OVER";
      return true;
    }
  }
  public void stmove() {
    if (pzjc() == false && (yj() == false)) {
      b[0].speed = 8;//此處可提升速度增加難度
      b[0].move();
      p.add(new point(b[0].x, b[0].y, b[0].fx));
      if (p.size() > b.length) {
        p.remove(p.get(0));
        // System.out.println(p.size());
      }
    }
  }
  public int jl(body a, Treasure b) {
    int jl = 0;
    jl = (int) Math.sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y)
        * (a.y - b.y));
    return jl;
  }// 暫時無用
  public void ssmove() {
    if (p.size() >= b.length) {
      for (int i = 0; i < b.length - 1; i++) {
        b[i + 1].fx = p.get(i).fx;
        b[i + 1].x = p.get(i).x;
        b[i + 1].y = p.get(i).y;
      }
    }
  }
  Random r = new Random();
  public void bzbw() {
    if (bw.size() < 1) {
      Treasure s = new Treasure();
      s.x = r.nextInt(300) + 50;
      s.y = r.nextInt(300) + 50;
      bw.add(s);
    }
  }
  public void bwxs() {
    Timer t = new Timer();
    t.schedule(new TimerTask() {
      public void run() {
      }
    }, 0, 8000);
  }
  public boolean pzjc() {
    for (int i = 1; i < p.size(); i++) {
      if (p.get(0).equals(p.get(i))) {
        state = "GAME OVER";
        return true;
      }
    }
    return false;
  }
  public void crush() {
    if (bw.size() > 0) {
      if (jl(b[0], bw.get(0)) < 8) {
        bw.remove(0);
        b = Arrays.copyOf(b, b.length + 1);
        b[b.length - 1] = new body();
        score += 10;
      }
    }
  }
  public void gameover() {
    MouseListener k = new MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        super.mouseClicked(e);
        state = "";
        b = Arrays.copyOf(b, 5);
        p.clear();
        shengc();
        score = 0;
        bt.setVisible(false);
      }
    };
    if (state.length() > 1) {
      this.add(bt);
      bt.setVisible(true);
      bt.setBounds(150, 150, 100, 30);
      bt.addMouseListener(k);
    }
      if(bt.isVisible()==false){this.remove(bt);}
    this.requestFocus();
  }
  public void zmAction() {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
      public void run() {
        bzbw();// 生成寶物
        stmove();// 蛇頭運動
        ssmove();// 蛇身運動
        crush();// 碰撞檢測
        gameover();
        repaint();
      }
    }, 10, 83);
  }
  public static void main(String[] args) {
    JFrame jf = new JFrame("腳本之家 - 貪吃蛇游戲測試");
    jf.setBounds(0, 0, 400, 400);
    jf.setVisible(true);
    jf.setLayout(null);
    Container c = new Container();
    c = jf.getContentPane();
    c.setBackground(Color.WHITE);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Snack s = new Snack();
    s.setVisible(true);
    s.setBounds(0, 0, 600, 600);
    s.setLocation(0, 0);
    s.setBackground(Color.ORANGE);
    jf.add(s);
    s.zmAction();
    s.requestFocus();
  }
  public void keyTyped(KeyEvent e) {
  }
  public void keyPressed(KeyEvent e) {
    int k = e.getKeyCode();
    switch (k) {
    case KeyEvent.VK_UP:
      if (b[0].fx != "sz" && b[0].fx != "xz") {
        b[0].fx = "sz";
      }
      break;
    case KeyEvent.VK_DOWN:
      if (b[0].fx != "sz" && b[0].fx != "xz") {
        b[0].fx = "xz";
      }
      break;
    case KeyEvent.VK_LEFT:
      if (b[0].fx != "zz" && b[0].fx != "yz") {
        b[0].fx = "zz";
      }
      break;
    case KeyEvent.VK_RIGHT:
      if (b[0].fx != "zz" && b[0].fx != "yz") {
        b[0].fx = "yz";
      }
      break;
    }
    repaint();
  }
  public void keyReleased(KeyEvent e) {
  }
}

body類

package Tcs;
public class body {
public int x=0;
public int y=0;
public int speed;
private String str;
public String fx;
public body(){
  fx="yz";
}
public int getX() {
  return x;
}
public void setX(int x) {
  this.x = x;
}
public int getY() {
  return y;
}
public void setY(int y) {
  this.y = y;
}
public String getStr() {
  return str;
}
public void setStr(String str) {
  this.str = str;
}
public void sz(){
  this.y+=-speed;
}
public void xz(){
  this.y+=speed;
}
public void zz(){
  this.x+=-speed;
}
public void yz(){
  this.x+=speed;
}
public void move(){
  if(fx=="xz"){
    xz();
  }
  if(fx=="sz"){
    sz();
  }
  if(fx=="zz"){
    zz();
  }
  if(fx=="yz"){
    yz();
  }
}
}

寶物類

package Tcs;
public class Treasure {
public int x;
public int y;
public String str;
}

point類

package Tcs;
public class point {
public int x;
public int y;
public String fx;
public point(int x,int y,String fx){
  this.x=x;
  this.y=y;
  this.fx=fx;
}
public boolean equals(Object o){
  if(o instanceof point){
    point p=(point)o;
    if(p.x==this.x&&p.y==this.y){
      return true;
    }
  }
  if(o==this){return true;}
  if(o==null){return false;}
  return false;}
}

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • Eclipse代碼格式化設(shè)置簡單介紹

    Eclipse代碼格式化設(shè)置簡單介紹

    這篇文章主要介紹了Eclipse代碼格式化設(shè)置簡單介紹,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • java集合求和最大值最小值示例分享

    java集合求和最大值最小值示例分享

    這篇文章主要介紹了java集合求和最大值最小值示例
    2014-01-01
  • Java反射機制的實現(xiàn)詳解

    Java反射機制的實現(xiàn)詳解

    反射主要解決動態(tài)編程,即使用反射時,所有的對象生成是動態(tài)的,因此調(diào)用的方法也是動態(tài)的.反射可以簡化開發(fā),但是代碼的可讀性很低
    2013-05-05
  • Java字符編碼原理(動力節(jié)點Java學院整理)

    Java字符編碼原理(動力節(jié)點Java學院整理)

    Java開發(fā)中,常常會遇到亂碼的問題,一旦遇到這種問題,常常比較煩惱,大家都不想承認是自己的代碼問題,其實搞明白編碼的本質(zhì)過程就簡單多了,接下來小編給大家?guī)韏ava字符編碼原理,要求看看吧
    2017-04-04
  • SpringBoot 2 快速整合 Filter過程解析

    SpringBoot 2 快速整合 Filter過程解析

    這篇文章主要介紹了SpringBoot 2 快速整合 Filter過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Netty分布式Server啟動流程服務(wù)端初始化源碼分析

    Netty分布式Server啟動流程服務(wù)端初始化源碼分析

    本章主要講解server啟動的關(guān)鍵步驟,?讀者只需要了解server啟動的大概邏輯,?知道關(guān)鍵的步驟在哪個類執(zhí)行即可,?并不需要了解每一步的運作機制,?之后會對每個模塊進行深度分析
    2022-03-03
  • 使用 Java8 實現(xiàn)觀察者模式的方法(下)

    使用 Java8 實現(xiàn)觀察者模式的方法(下)

    這篇文章主要介紹了使用 Java8 實現(xiàn)觀察者模式的方法(下)的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • IDEA安裝Leetcode插件的教程

    IDEA安裝Leetcode插件的教程

    這篇文章主要介紹了IDEA安裝Leetcode插件的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java中圖片的常用操作代碼總結(jié)

    Java中圖片的常用操作代碼總結(jié)

    這篇文章主要為大家詳細介紹了Java中對圖片進行常用操作處理的代碼,例如生成自定義圖片、獲取圖片格式、圖片的裁剪與壓縮等,感興趣的小伙伴可以了解一下
    2022-11-11
  • JAVA線上常見問題排查手段(小結(jié))

    JAVA線上常見問題排查手段(小結(jié))

    這篇文章主要介紹了JAVA線上常見問題排查手段(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-07-07

最新評論

南部县| 蚌埠市| 通江县| 特克斯县| 行唐县| 普兰店市| 娄烦县| 青龙| 旺苍县| 安化县| 沈丘县| 西宁市| 陆川县| 封丘县| 万山特区| 宁德市| 松潘县| 吉隆县| 神木县| 平舆县| 马龙县| 博湖县| 天长市| 扎赉特旗| 如皋市| 瓦房店市| 交城县| 油尖旺区| 开江县| 龙里县| 聊城市| 额尔古纳市| 通榆县| 手游| 黔西县| 茌平县| 保德县| 柳州市| 西贡区| 兴山县| 镇宁|