日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java實現簡單的貪吃蛇小游戲

瀏覽:127日期:2022-08-14 11:48:26

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

1. 程序結構

程序結構圖如圖:

Java實現簡單的貪吃蛇小游戲

2. 程序設計思路

2.1 Data類

作用:連接statics文件夾,將靜態資源包中的圖片轉化為圖標 方便在面板上繪制。

實現:使用class.getResource(String path)方法。

代碼如下:

package com.snake;import javax.swing.*;import java.net.URL;public class Data { //貪吃蛇頭部 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);}

2.2 StartGame類

作用:創建游戲窗口,在窗口中添加一個游戲面板。實現:使用JFrame類創建游戲窗口,利用其add()方法添加一個GamePanel類實例化對象。

代碼如下:

package com.snake;import javax.swing.*;import java.awt.*;public class StartGame { public static void main(String[] args){//建立游戲窗口JFrame frame = new JFrame('Java-貪吃蛇小游戲');//標題frame.setSize(900,720);//窗口大小frame.setLocationRelativeTo(null);//窗口顯示屏幕中間frame.setResizable(false);//固定窗口大小frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設置窗體關閉事件frame.add(new GamePanel());//添加游戲內容frame.setVisible(true);//設置窗體可見 }}

2.3 GamePanel類

作用:實現游戲的動態頁面。

實現:

(1)init()方法:初始化小蛇位置;(2)eat()方法:用隨機種子隨機食物的位置,并進行判定,食物位置不能和小蛇位置重合;(3)繼承JPanel類,重寫paintComponent(Graphics g)方法,在方法中繪制標題欄、小蛇的位置(根據direction小蛇頭部方向變量繪制小蛇頭部)、小蛇身體、積分欄、游戲提醒項與失敗判斷項;(4)實現KeyListener 接口中的keyPressed(KeyEvent e)方法,獲取鍵盤輸入,根據鍵盤輸入對游戲狀態或者小蛇頭部方向direction變量進行更改;(5)實現ActionListener接口中的actionPerformed(ActionEvent e)方法,根據游戲狀態和direction變量進行小蛇移動操作(注意禁用直接回頭操作),進行吃食物判定和死亡判定。使用Timer計時器讓游戲動態變化,用repaint()方法實時更新界面。

代碼如下:

package com.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[] snakeX = new int[500];//貪吃蛇橫坐標 int[] snakeY = new int[500];//貪吃蛇縱坐標 int foodX;//食物橫坐標 int foodY;//食物蛇縱坐標 int length;//貪吃蛇的長度 String direction;//貪吃蛇頭方向 int score;//積分 Random r = new Random(); Timer timer = new Timer(100,this); boolean isStart; boolean isFail; //構造函數 public GamePanel(){init();this.setFocusable(true);this.addKeyListener(this);timer.start(); } private void init(){length=3;snakeX[0]=100;snakeY[0]=100;snakeX[1]=75;snakeY[1]=100;snakeX[2]=50;snakeY[2]=100;direction = 'R';eat(foodX,foodY);isStart = false;isFail = false;score = 0; } private void eat(int x,int y){x= 25 + 25*r.nextInt(34);y= 75 + 25*r.nextInt(24);for (int i = 0; i < length; i++) { if(snakeX[i]==x&&snakeY[i]==y){x = 25 + 25*r.nextInt(34);y = 75 + 25*r.nextInt(24); }}foodX = x;foodY = y; } protected void paintComponent(Graphics g) {super.paintComponent(g);this.setBackground(Color.white);//設置背景板為白色//畫標題g.setColor(Color.GREEN);g.setFont(new Font('幼圓',Font.BOLD,50));g.drawString('貪吃蛇游戲',300,60);//繪制游戲區域g.setColor(Color.GRAY);g.fillRect(25,75,850,600);//畫貪吃蛇頭部if(direction=='R'){ Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);}else if(direction=='L'){ Data.left.paintIcon(this,g,snakeX[0],snakeY[0]);}if(direction=='U'){ Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);}else if(direction=='D'){ Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);}//畫身體for (int i = 1; i < length ; i++) { Data.body.paintIcon(this,g,snakeX[i],snakeY[i]);}//畫食物Data.food.paintIcon(this,g,foodX,foodY);//繪制積分欄g.setColor(Color.BLACK);g.setFont(new Font('幼圓',Font.BOLD,20));g.drawString('長度:'+length,730,30);g.drawString('得分:'+score,730,60);//游戲開始提醒if(isStart==false){ g.setColor(Color.BLACK); g.setFont(new Font('幼圓',Font.BOLD,40)); g.drawString('按空格鍵開始游戲',300,300);}//失敗判斷if(isFail){ g.setColor(Color.RED); g.setFont(new Font('幼圓',Font.BOLD,40)); g.drawString('游戲失敗,按空格鍵重新開始',300,300);} } @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&&direction!='R'){ direction = 'L';}else if(keyCode==KeyEvent.VK_RIGHT&&direction!='L'){ direction = 'R';}else if(keyCode==KeyEvent.VK_UP&&direction!='D'){ direction = 'U';}else if(keyCode==KeyEvent.VK_DOWN&&direction!='U'){ direction = 'D';} } @Override public void keyReleased(KeyEvent e) { } @Override public void keyTyped(KeyEvent e) { } @Override public void actionPerformed(ActionEvent e) {//判斷游戲狀態if(isStart&&!isFail){ //移動身體 for (int i = length-1; i > 0 ; i--) {snakeX[i] = snakeX[i-1];snakeY[i] = snakeY[i-1]; } //移動頭部 if(direction=='R'){snakeX[0] += 25;if(snakeX[0]>850){ snakeX[0] = 25;} } else if(direction=='L'){snakeX[0] -= 25;if(snakeX[0]<25){ snakeX[0] = 850;} } else if(direction=='U'){snakeY[0] -= 25;if(snakeY[0]<75){ snakeY[0] = 650;} } else if(direction=='D'){snakeY[0] += 25;if(snakeY[0]>650){ snakeY[0] = 75;} } //吃食物 if(snakeX[0]==foodX&&snakeY[0]==foodY){length++;score += 10;eat(foodX,foodY); } //死亡判定 for (int i = 1; i < length; i++) {if(snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){ isFail=true;} } repaint();}timer.start(); }}3. 游戲展示

Java實現簡單的貪吃蛇小游戲

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

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩av中文字幕一区二区| 日本久久成人网| 国产极品嫩模在线观看91精品| 欧美日中文字幕| 日韩精品看片| 久久精品网址| 91免费精品| av在线日韩| 国产精品7m凸凹视频分类| 欧美+日本+国产+在线a∨观看| 久久在线视频免费观看| 欧美日韩中文字幕一区二区三区| 欧美日韩国产在线观看网站| 午夜精品一区二区三区国产| 久久高清免费| 91超碰国产精品| 色狠狠一区二区三区| 国产精品成人3p一区二区三区| 国产精品一区二区av日韩在线| 国产成年精品| 激情欧美日韩一区| 一本一道久久a久久| 欧美1区2区3| 久久精品国产大片免费观看| 视频一区在线播放| 国产精品啊啊啊| 午夜精品网站| 国产乱人伦精品一区| 日韩欧美一区二区三区在线观看 | 免费黄色成人| 欧美亚洲福利| 久久视频国产| 国产精品久久久久久久久免费高清 | 在线一区二区三区视频| 国产精品成人**免费视频| 丰满少妇一区| 欧美精选一区二区三区| 国产精品巨作av| 中文亚洲欧美| 极品av在线| 国产欧美丝祙| 亚洲精品精选| 亚洲综合日本| 999久久久国产精品| 国产精品久久久久久模特| 欧美a级片一区| 国产成人精品三级高清久久91 | 日本激情一区| 国产乱码精品一区二区三区四区 | 日本免费久久| 国产精品18| 日韩av中文字幕一区二区三区| 激情久久五月| 久久高清精品| 激情综合自拍| 日本一区二区三区视频在线看 | 免费一级欧美片在线观看网站| 鲁大师影院一区二区三区| 成人在线视频中文字幕| 精品久久免费| 国产在线观看91一区二区三区| 色狠狠一区二区三区| 日韩一区二区三区在线看| 婷婷精品在线| 国产日韩精品视频一区二区三区| 亚洲精品大片| 亚洲人成毛片在线播放女女| 蜜臀a∨国产成人精品| 亚洲一区二区免费看| 三级欧美韩日大片在线看| 免费不卡中文字幕在线| 伊人久久婷婷| 亚洲精品字幕| 久久国产精品亚洲77777| 日韩亚洲在线| 视频一区中文字幕国产| 青青草国产精品亚洲专区无| 国产亚洲高清一区| 国产日韩欧美一区二区三区| 国产精品乱战久久久| 亚洲美女久久精品| 婷婷亚洲综合| 国产亚洲欧美日韩在线观看一区二区| 亚洲精品护士| 国产精品久av福利在线观看| 国产资源在线观看入口av| 亚洲午夜av| 天堂va欧美ⅴa亚洲va一国产| 四虎成人精品一区二区免费网站| 国产亚洲欧美日韩精品一区二区三区 | 免费观看亚洲天堂| 999久久久亚洲| 亚洲精品高潮| 久久久精品网| 国产日韩欧美三级| 亚洲激情婷婷| 麻豆国产精品| 婷婷成人在线| 88久久精品| 欧美va天堂| 成人在线丰满少妇av| 日韩区一区二| 成人看片网站| 久久av偷拍| 中文字幕中文字幕精品| 神马久久午夜| 国产日本精品| 爽好多水快深点欧美视频| 精品亚洲精品| 国产乱人伦丫前精品视频| 美女久久网站| 日韩精品网站| 国产精品白丝一区二区三区| 六月天综合网| 久久午夜精品| 五月综合激情| 亚洲性视频h| 日韩另类视频| 天堂√中文最新版在线| 国产亚洲一卡2卡3卡4卡新区| 好看的亚洲午夜视频在线| 国产a久久精品一区二区三区| 欧美日韩一区自拍| 日韩欧美中文字幕一区二区三区| 尹人成人综合网| 亚洲一区免费| 免费日韩一区二区| 亚洲视频二区| 99在线精品免费视频九九视| 国产中文一区| 激情久久中文字幕| 香蕉精品视频在线观看| 野花国产精品入口| 久久国产精品99国产| 亚洲久草在线| 欧美亚洲综合视频| 国产精品毛片久久久| 高清久久一区| 久久久久亚洲| 黑丝一区二区三区| 亚洲一区欧美激情| 日韩激情视频网站| 国产精品一区高清| 国产精品久久久久9999高清| 精品久久久中文字幕| 久久国产直播| 免费精品视频最新在线| 日韩欧美久久| 国产一区二区视频在线看| 成人看片网站| 亚洲精品在线国产| 美女视频黄 久久| 亚洲高清激情| 欧美综合精品| 日韩精品一区二区三区免费观影| 国产日韩综合| 欧美黄页在线免费观看| 亚洲激情久久| 男女性色大片免费观看一区二区| 日本不卡一区二区三区| 麻豆精品久久久| 亚洲少妇诱惑| 国产成人精品999在线观看| 在线亚洲观看| 麻豆极品一区二区三区| 中文在线免费视频| 日韩精品免费视频人成| 日韩三区免费| 久久不卡国产精品一区二区| 91成人精品| 国产一区二区精品久| 中文字幕日韩亚洲| 久久久久国产精品一区三寸 | 麻豆精品在线观看| 免费视频最近日韩| 99视频精品免费观看| 久久的色偷偷| 蜜臀91精品一区二区三区| 日本在线高清| 国产精品最新| 中文字幕av一区二区三区人| 91精品亚洲| 伊伊综合在线| 久久精品国产在热久久| 日本免费一区二区视频| 乱人伦精品视频在线观看| 国产精品igao视频网网址不卡日韩 | 神马午夜久久| 大香伊人久久精品一区二区 | 99免费精品| 日韩国产一区| 国产精品99一区二区三区| 国产精品观看| 里番精品3d一二三区| 国产福利一区二区精品秒拍 | 亚洲大片在线| 国产韩日影视精品| 国产亚洲精品自拍| 亚洲欧美日韩专区| 亚洲精品免费观看|