Java GUI 贪吃蛇项目教程,详细教程,思路解析,+图片素材。
生活随笔
收集整理的這篇文章主要介紹了
Java GUI 贪吃蛇项目教程,详细教程,思路解析,+图片素材。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、實現效果
1.空格暫停,
2.上下左右控制方向
3.長度會隨著食物的吃下而增加
4.定時刷新
5.累計長度和分數等等。
具體視頻演示效果和教程點擊跳轉
二、實現思路:
1.定義所一個功能的數據
2.繪制這個功能的需要的圖形
3.添加監聽這個功能需要的事件(幀率事件)
鍵盤,鼠標,
三、實現代碼
1.Data 初始化需要的圖片
2.StartGame 主要實現窗口的加載,和添加GamePanel面板到窗口。
3.GamePanel 最重要的實現部分,包括:
3.1 定義需要的數據
3.2 繪制圖像
3.3 實現事件監聽
Data.java (加載圖片使用)
package GUI.Swing.貪吃蛇;import javax.swing.*;//數據中心,圖片 public class Data {//此處用來初始話圖片public static String headerUrl = "D:/Program Files/JetBrains/test1/Lab/static/貪吃蛇/header.png";public static String bodyUrl = "D:/Program Files/JetBrains/test1/Lab/static/貪吃蛇/body.png";public static String downUrl = "D:/Program Files/JetBrains/test1/Lab/static/貪吃蛇/down.png";public static String foodUrl = "D:/Program Files/JetBrains/test1/Lab/static/貪吃蛇/food.png";public static String leftUrl = "D:/Program Files/JetBrains/test1/Lab/static/貪吃蛇/left.png";public static String rightUrl = "D:/Program Files/JetBrains/test1/Lab/static/貪吃蛇/right.png";public static String upUrl = "D:/Program Files/JetBrains/test1/Lab/static/貪吃蛇/up.png";public static ImageIcon up = new ImageIcon(upUrl);public static ImageIcon down = new ImageIcon(downUrl);public static ImageIcon left = new ImageIcon(leftUrl);public static ImageIcon right = new ImageIcon(rightUrl);public static ImageIcon header = new ImageIcon(headerUrl);public static ImageIcon body = new ImageIcon(bodyUrl);public static ImageIcon food = new ImageIcon(foodUrl);}StartGame.java (加載窗口和添加游戲面板)
package GUI.Swing.貪吃蛇;import javax.swing.*;/*** 游戲的主要啟動類:*/ public class StartGame {public StartGame() {//simple FrameJFrame frame = new JFrame("開始界面");frame.setBounds(100, 100, 900, 720);frame.setResizable(false);//窗口大小不能改變,不然游戲變形frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setVisible(true);//一般的游戲都會放到面板上,frame.add(new GamePanel());}public static void main(String[] args) {new StartGame();} }GamePanel.java (主要的實現類,數據,畫圖,事件幀)
package GUI.Swing.貪吃蛇;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Random;/*** 游戲的面板* //繪制面板,游戲中所有的東西都可用這個東西來畫*/ public class GamePanel extends JPanel implements ActionListener {/*** 一、定義數據:*/int length;int[] snakeX = new int[600];//定義snake的x坐標int[] snakeY = new int[600];//定義蛇的Y坐標String direction;//方向boolean isStart;//暫停效果//定時器 100msTimer timmer = new Timer(100, this);//食物的坐標int foodX;int foodY;/*問題:有2個 ,random 使用 util 包下的Random*/Random random = new Random();boolean isFail = false; //判斷死亡int score;//累計分數/*** 構造方法.* 三、事件監聽和鍵盤監聽* 的鍵盤監聽.*/public GamePanel() {init();//構造器里面調用init()方法。//給Panel添加鍵盤監聽=====================問題,添加失敗,試試 設置是否獲取焦點this.setFocusable(true);this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {System.out.println(e.getKeyChar());if (e.getKeyCode() == KeyEvent.VK_SPACE) {isStart = !isStart;//暫停效果,取反if (isFail) {isFail = false;}repaint();//刷新}//小蛇頭的圖片的轉化if (e.getKeyCode() == KeyEvent.VK_UP) {direction = "up";} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {direction = "down";} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {direction = "left";} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {direction = "right";}}});//給panel 添加定時器,/*新建一個線程,然后讓他在while里循環,通過Thread.sleep(100)的方法來休眠線程。*/timmer.start();//游戲一開始定時器就啟動}//初始化數據public void init() {length = 3;snakeX[0] = 100;snakeY[0] = 100;//第一個頭header的坐標snakeX[1] = 75;snakeY[1] = 100;//第2 body的坐標snakeX[2] = 50;snakeY[2] = 100;//第3 body的坐標direction = "right";isStart = false;foodX = 25 + random.nextInt(34) * 25;foodY = 75 + random.nextInt(24) * 25;}/*** 二、繪制圖形** @param g*/@Overridepublic void paint(Graphics g) {Data.header.paintIcon(this, g, 25, 11);//廣告欄g.fillRect(25, 75, 850, 600);//矩形面板。this.setVisible(true);this.setBackground(new Color(139, 168, 20));//小蛇的頭圖片轉化if (direction == "right") {Data.right.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (direction == "left") {Data.left.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (direction == "up") {Data.up.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (direction == "down") {Data.down.paintIcon(this, g, snakeX[0], snakeY[0]);}//把小蛇body畫上去,使用的組件,畫筆,x,y 位置。for (int i = 1; i < length; i++) {Data.body.paintIcon(this, g, snakeX[i], snakeY[i]);}if (isStart == false) {g.setColor(new Color(255, 255, 255));g.setFont(new Font("微軟雅黑", Font.BOLD, 40));g.drawString("按下空格開始游戲", 300, 300);}//把食物畫上去Data.food.paintIcon(this, g, foodX, foodY);//把 isFail的面板畫上去,并得出分數if (isFail) {g.setColor(new Color(195, 68, 106));g.setFont(new Font("微軟雅黑", Font.BOLD, 80));g.drawString("GAME OVER ", 200, 180);g.setFont(new Font("微軟雅黑", Font.BOLD, 40));g.drawString("YOUR SCORE IS: " + score, 260, 400);}//把積分畫上去g.setColor(new Color(255, 255, 255));g.setFont(new Font("微軟雅黑", Font.CENTER_BASELINE, 18));g.drawString("SCORE:" + score, 750, 35);g.drawString("LENGTH:" + length, 750, 50);}/*** 三、添加事件監聽或者鍵盤監聽:** @param e*/@Overridepublic void actionPerformed(ActionEvent e) {if (isStart) {//小蛇body移動到靠頭的一個body//小蛇右移動--2,3重疊為什么? // for (int i = 1; i <= length; i++) { // middle = snakeX[i - 1]; // snakeX[i] = middle; // }//身體跟進for (int i = length - 1; i > 0; i--) {snakeX[i] = snakeX[i - 1];snakeY[i] = snakeY[i - 1];}//頭的移動if (direction == "right") {snakeX[0] += 25;snakeY[0] += 0;if (snakeX[0] > 850) {snakeX[0] = 25;}} else if (direction == "left") {snakeX[0] -= 25;snakeY[0] += 0;if (snakeX[0] <= 25) {snakeX[0] = 850;}} else if (direction == "up") {snakeX[0] += 0;snakeY[0] -= 25;if (snakeY[0] <= 50) {snakeY[0] = 650;}} else if (direction == "down") {snakeX[0] += 0;snakeY[0] += 25;if (snakeY[0] >= 650) {snakeY[0] = 50;}}//吃食物if (snakeX[0] == foodX && snakeY[0] == foodY) {length++;//長度+1score = length * 10 - 30;//分數改變//初始化 食物坐標foodX = 25 + random.nextInt(34) * 25;foodY = 75 + random.nextInt(24) * 25;}//判斷是否isFail死亡for (int i = 1; i < length; i++) {if (snakeX[i] == snakeX[0] && snakeY[i] == snakeY[0]) {isFail = true;isStart = false;}}repaint();//repaint()}//定時器開始timmer.start();} }四、圖片素材:自行復制
1.食物 – food.png
2.右 right.png
3.下 – down.png
4.左–left.png
5.身體-- budy.png
6.上 – up.png
7.廣告頭-- header.png
總結
以上是生活随笔為你收集整理的Java GUI 贪吃蛇项目教程,详细教程,思路解析,+图片素材。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssh 执行远程命令卡住问题解决
- 下一篇: 真的能月入过万,长期稳定操作-steam