欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用GUI實現java版貪吃蛇小游戲

 更新時間:2021年09月13日 15:55:01   作者:Shimmernight  
這篇文章主要為大家詳細介紹了用GUI實現java版貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java版貪吃蛇小游戲的具體代碼,供大家參考,具體內容如下

項目結構

新建一個JFrame窗口,作為程序入口

public class GameStart{
 public static void main(String[] args) {
  JFrame jFrame = new JFrame();
  jFrame.setBounds(100,100,900,720);
  jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  jFrame.setResizable(false);
  jFrame.add(new GameJPanel());
  jFrame.setVisible(true);
 }
}

創(chuàng)建一個面板類

//面板
public class GameJPanel extends JPanel implements ActionListener {

 int length;//蛇的長度
 int[] snakeX = new int[600];//蛇的X的最大長度
 int[] snakeY = new int[500];//蛇的Y的最大長度
 String fx = "R";
 boolean isStart = false;//默認不開始
 //定時器
 Timer timer = new Timer(100, this);//100毫秒=1秒
 int foodX;
 int foodY;
 Random random = new Random();//隨機數
 boolean isFail = false;//失敗條件
 int score;

 public GameJPanel() {
  init();
  this.setFocusable(true);//獲取焦點事件
  addKeyListener(new GameKeyListener(this));
  //開啟定時器
  timer.start();
 }
 //初始化
 void init() {
  length = 3;
  snakeX[0] = 100;
  snakeY[0] = 100;//第一個身體
  snakeX[1] = 75;
  snakeY[1] = 100;//第二個身體
  snakeX[2] = 50;
  snakeY[2] = 100;//第三個身體
  fx = "R";
  //食物隨機分布
  foodX = 25 + 25 * random.nextInt(34);
  foodY = 75 + 25 * random.nextInt(24);
  score = 0;
 }
 //繪制面板,所有東西都是通過graphics這個畫筆繪制
 @Override
 protected void paintComponent(Graphics graphics) {
  super.paintComponent(graphics);//清屏
  //添加靜態(tài)布局
  GameData.header.paintIcon(this, graphics, 25, 11);
  graphics.fillRect(25, 75, 850, 600);
  //積分板
  graphics.setColor(Color.white);
  graphics.setFont(new Font("微軟雅黑", Font.BOLD, 18));
  graphics.drawString("長度:"+length,750,35);
  graphics.drawString("得分:"+score,750,55);
  //先畫食物,防止吃掉有延遲
  GameData.food.paintIcon(this, graphics, foodX, foodY);
  //畫小蛇
  switch (fx) {
   case "R":
    GameData.right.paintIcon(this, graphics, snakeX[0], snakeY[0]);
    break;
   case "L":
    GameData.left.paintIcon(this, graphics, snakeX[0], snakeY[0]);
    break;
   case "U":
    GameData.up.paintIcon(this, graphics, snakeX[0], snakeY[0]);
    break;
   case "D":
    GameData.down.paintIcon(this, graphics, snakeX[0], snakeY[0]);
    break;
  }
  //身體
  for (int i = 1; i < length; i++) {
   GameData.body.paintIcon(this, graphics, snakeX[i], snakeY[i]);
  }
  //游戲狀態(tài)
  if (!isStart) {
   graphics.setColor(Color.white);
   graphics.setFont(new Font("微軟雅黑", Font.BOLD, 40));//設置字體
   graphics.drawString("按下空格,開始游戲", 300, 300);
  }
  //游戲失敗
  if (isFail) {
   graphics.setColor(Color.red);
   graphics.setFont(new Font("微軟雅黑", Font.BOLD, 40));
   graphics.drawString("游戲失敗,請按空格繼續(xù)", 300, 300);
  }
 }
 //事件監(jiān)聽--固定事件刷新一次,1s=100ms
 @Override
 public void actionPerformed(ActionEvent actionEvent) {
  if (isStart && !isFail) {
   //吃食物
   if (snakeX[0] == foodX && snakeY[0] == foodY) {
    //長度+1
    length++;
    score+=10;
    //重新隨機繪制食物
    foodX = 25 + 25 * random.nextInt(34);
    foodY = 75 + 25 * random.nextInt(24);
   }
   //后一節(jié)移動到前一節(jié),從而由頭帶動身體移動
   for (int i = length - 1; i > 0; i--) {
    snakeX[i] = snakeX[i - 1];
    snakeY[i] = snakeY[i - 1];
   }
   switch (fx) {
    case "R":
     snakeX[0] += 25;//頭部移動
     // 邊界判斷
     if (snakeX[0] > 850) { snakeX[0] = 25; }
     break;
    case "L":
     snakeX[0] -= 25;//頭部移動
     if (snakeX[0] < 25) { snakeX[0] = 850; }
     break;
    case "U":
     snakeY[0] -= 25;//頭部移動
     if (snakeY[0] < 75) { snakeY[0] = 650; }
     break;
    case "D":
     snakeY[0] += 25;//頭部移動
     if (snakeY[0] > 650) { snakeY[0] = 75; }
     break;
   }
   //失敗判定
   for (int i = 1; i < length; i++) {
    if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) {
     isFail = true;
     break;
    }
   }
   repaint();//重繪
  }
  //開啟定時器
  timer.start();
 }
}

所有組件添加流程基本一致,即先定義數據,然后在畫筆paintComponent方法中繪制,最后添加到監(jiān)聽事件。

完整代碼請參考:GitHub完整貪吃蛇小游戲鏈接

更多有趣的經典小游戲實現專題,分享給大家:

C++經典小游戲匯總

python經典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經典游戲 玩不停

java經典小游戲匯總

javascript經典小游戲匯總

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java編程實現遍歷兩個MAC地址之間所有MAC的方法

    Java編程實現遍歷兩個MAC地址之間所有MAC的方法

    這篇文章主要介紹了Java編程實現遍歷兩個MAC地址之間所有MAC的方法,涉及Java針對MAC的遍歷獲取與字符串轉換相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • jax-ws handler 的詳解及簡單實例

    jax-ws handler 的詳解及簡單實例

    這篇文章主要介紹了 jax-ws handler 的詳解及簡單實例的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • SpringBoot整合JWT Token的完整步驟

    SpringBoot整合JWT Token的完整步驟

    JSON Web Token是目前最流行的跨域認證解決方案,適合前后端分離項目通過Restful API進行數據交互時進行身份認證,這篇文章主要給大家介紹了關于SpringBoot整合JWT Token的相關資料,需要的朋友可以參考下
    2021-09-09
  • Java:不支持發(fā)行版本5的超詳細簡單解決方案

    Java:不支持發(fā)行版本5的超詳細簡單解決方案

    發(fā)行版本5是Java5,已經是十多年前的版本了,現在已經不再被支持,如果您使用的是舊版的Java開發(fā)工具,可能會出現這樣的錯誤,這篇文章主要給大家介紹了關于Java:不支持發(fā)行版本5的超詳細簡單解決方案,需要的朋友可以參考下
    2024-01-01
  • 項目總結之HttpURLConnection的disconnect的問題

    項目總結之HttpURLConnection的disconnect的問題

    這篇文章主要介紹了項目總結之HttpURLConnection的disconnect的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java實現給出分數數組得到對應名次數組的方法

    java實現給出分數數組得到對應名次數組的方法

    這篇文章主要介紹了java實現給出分數數組得到對應名次數組的方法,涉及java針對數組的遍歷、排序及運算的相關技巧,需要的朋友可以參考下
    2015-07-07
  • Java?處理樹形結構數據的過程

    Java?處理樹形結構數據的過程

    這篇文章主要介紹了Java?處理樹形結構數據的過程,本文給大家分析具體實現過程,結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • SpringSecurity?Web權限方案實現全過程

    SpringSecurity?Web權限方案實現全過程

    Spring Security是一個功能強大且高度可定制的身份驗證和授權框架,專門用于保護Java應用程序的Web集成,下面這篇文章主要給大家介紹了關于SpringSecurity?Web權限方案實現的相關資料,需要的朋友可以參考下
    2024-01-01
  • Jenkins的安裝配置詳解

    Jenkins的安裝配置詳解

    這篇文章主要介紹了Jenkins的安裝配置詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Shiro整合Springboot和redis,jwt過程中的錯誤shiroFilterChainDefinition問題

    Shiro整合Springboot和redis,jwt過程中的錯誤shiroFilterChainDefinition問

    這篇文章主要介紹了Shiro整合Springboot和redis,jwt過程中的錯誤shiroFilterChainDefinition問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論