Java實現簡單的貪吃蛇游戲
本文實例為大家分享了Java實現簡單貪吃蛇游戲的具體代碼,供大家參考,具體內容如下
代碼
啟動類
package snake;import javax.swing.*;//游戲的主啟動類public class StartGame { public static void main(String[] args) {JFrame frame = new JFrame('貪吃蛇');frame.setBounds(10,10,900,720);frame.setResizable(false); //窗口不可調整frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//正常游戲界面都應該在面板上frame.add(new GamePanel());frame.setVisible(true); }}
游戲畫板
package snake;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Random;//游戲面板public class GamePanel extends JPanel implements KeyListener, ActionListener { int lenth; //蛇的長度 int [] snakeX = new int[600]; //定義蛇的坐標X int [] snakeY = new int[500]; //定義蛇的坐標Y String fx ;//定義方向R:右 L:左 U:上 D:下 boolean isStart = false; //游戲是否開始 Timer timer = new Timer(120,this);//定時器 //定義一個食物 int foodx; int foody; Random random = new Random(); //定義死亡判斷 boolean isFail = false;//默認不失敗 //積分系統(tǒng) int score; //構造器 public GamePanel(){init();//獲取鍵盤的監(jiān)聽事件this.setFocusable(true);this.addKeyListener(this);timer.start(); } //初始化 public void init(){lenth = 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; } //繪制面板,游戲中的所以東西都使用這個東西來畫 @Override protected void paintComponent(Graphics g) {super.paintComponent(g); //清屏作用//繪制靜態(tài)的面板this.setBackground(Color.white);Data.header.paintIcon(this,g,25,11);//放進頭部廣告g.fillRect(25,75,850,600);//默認游戲界面//畫一條靜態(tài)的小蛇if (fx.equals('R')){ Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);}else if (fx.equals('L')){ Data.left.paintIcon(this,g,snakeX[0],snakeY[0]);}else if (fx.equals('U')){ Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);}else if (fx.equals('D')){ Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);}//蛇的身體長度通過length來控制for (int i = 1;i < lenth;i++){ Data.body.paintIcon(this,g,snakeX[i],snakeY[i]);}//畫積分g.setColor(Color.white);g.setFont(new Font('微軟雅黑',Font.BOLD,20));g.drawString('長度'+lenth,700,45);g.drawString('分數'+score,780,45);//畫食物Data.food.paintIcon(this,g,foodx,foody);//游戲提示:是否開始if (isStart == false){ //畫一個文字String來提示開始 g.setColor(Color.white); //定義顏色 g.setFont(new Font('微軟雅黑',Font.BOLD,40)); //設置字體 g.drawString('按下空格開始游戲',300,300);}//失敗提醒if (isFail){ //畫一個文字String來提示失敗 g.setColor(Color.RED); //定義顏色 g.setFont(new Font('微軟雅黑',Font.BOLD,40)); //設置字體 g.drawString('游戲失敗,按下空格重新開始',200,300);} }//接收鍵盤的輸入:監(jiān)聽事件 @Override//鍵盤按下,未釋放 public void keyPressed(KeyEvent e) {//獲取按下鍵盤的信息int keyCode = e.getKeyCode();if(keyCode==KeyEvent.VK_SPACE){//如果按下空格鍵 if (isFail){//游戲失敗,重新開始isFail = false;init();//重新初始化游戲 }else {//暫停游戲isStart = !isStart; } repaint();//刷新界面,重置}//鍵盤控制走向if (keyCode==KeyEvent.VK_LEFT){ fx = 'L';}else if (keyCode==KeyEvent.VK_RIGHT){ fx = 'R';}else if (keyCode==KeyEvent.VK_UP) { fx = 'U';}else if (keyCode==KeyEvent.VK_DOWN) { fx = 'D';} } //定時器,監(jiān)聽時間,幀,執(zhí)行定時操作 @Override public void actionPerformed(ActionEvent e) {//如果游戲處于開始狀態(tài),并且游戲沒有失敗if (isStart && isFail == false){ //右移 for (int i = lenth-1 ;i > 0;i--){ //身體向前移動snakeX[i] = snakeX[i-1];snakeY[i] = snakeY[i-1]; } //通過控制方向讓頭部移動 if (fx.equals('R')){snakeX[0] = snakeX[0] + 25;//頭部移動if (snakeX[0]>850){ snakeX[0] = 25; }//右邊界判斷 }else if (fx.equals('L')){snakeX[0] =snakeX[0] - 25;//頭部移動if (snakeX[0]<25){ snakeX[0] = 850;}//左邊界判斷 }else if (fx.equals('U')){snakeY[0] =snakeY[0] - 25;//頭部移動if (snakeY[0]<75){ snakeY[0] = 650;}//上邊界判斷 }else if (fx.equals('D')){snakeY[0] =snakeY[0] + 25;//頭部移動if (snakeY[0]>650){ snakeY[0] = 75;}//下邊界判斷 } //如果食物和蛇頭坐標重合 if (snakeX[0]==foodx && snakeY[0]==foody){lenth ++;//蛇的身體長度加一score = score + 10;//重新生成食物foodx = 25 +25 * random.nextInt(34);foody = 75 +25 * random.nextInt(24); } //結束判斷 for (int i = 1; i<lenth;i++){if (snakeX[0]==snakeX[i] && snakeY[0]==snakeY[i]){ isFail = true;} } repaint();//刷新界面}timer.start();//讓時間動起來 } @Override//鍵盤按下,彈起 public void keyTyped(KeyEvent e) { } @Override//釋放某個鍵 public void keyReleased(KeyEvent e) { }}
游戲數據(存放圖片)
package snake;import javax.swing.*;import java.net.URL;//數據中心public class Data { //相對路徑 tx.jpg 絕對路徑 /相當于當前的項目 //頭部圖片 URL 定位圖片地址 public static URL headerURL = Data.class.getResource('/statics/header.png'); public static ImageIcon header = new ImageIcon(headerURL); //上下左右移動 public static URL upUrl = Data.class.getResource('/statics/up.png'); public static ImageIcon up = new ImageIcon(upUrl); public static URL downUrl = Data.class.getResource('/statics/down.png'); public static ImageIcon down = new ImageIcon(downUrl); public static URL leftUrl = Data.class.getResource('/statics/left.png'); public static ImageIcon left = new ImageIcon(leftUrl); public static URL rightUrl = Data.class.getResource('/statics/right.png'); public static ImageIcon right = new ImageIcon(rightUrl); //身體 public static URL bodyUrl = Data.class.getResource('/statics/body.png'); public static ImageIcon body = new ImageIcon(bodyUrl); //食物 public static URL foodUrl = Data.class.getResource('/statics/food.png'); public static ImageIcon food = new ImageIcon(foodUrl);}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章:
