生活随笔
收集整理的這篇文章主要介紹了
贪吃蛇Java版
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
貪吃蛇小游戲
1. 簡介
??這是用Java的Swing工具實現(xiàn)的一個小程序。
??與傳統(tǒng)的貪吃蛇游戲一樣,通過“上、下、左、右”控制方向覓食,隨著吃的食物越多,身體會變得越長,移動速度也會變得越快。
??死亡條件:①頭碰到身體。②頭碰到墻壁。
關(guān)于這個程序的源代碼及打包資源,我上傳到資源下載和GitHub倉庫了,可以直接去下載:
資源下載地址:CSDN資源下載
GitHub地址:Gluttonous-Snake
2. 程序代碼部分
我這里的開發(fā)環(huán)境是:
2.1 目錄結(jié)構(gòu)
2.2 代碼實現(xiàn)
StartGames.java
package com
.jacks
.snake
;import javax
.swing
.*
;
public class StartGames {public static void main(String
[] args
) {JFrame frame
= new JFrame("貪吃蛇小游戲 作者:赤魂丶");frame
.setBounds(10,10,900,720); frame
.setResizable(false); frame
.setDefaultCloseOperation(JFrame
.EXIT_ON_CLOSE
); frame
.add(new GamePanel());frame
.setVisible(true);}
}
Data.java
package com
.jacks
.snake
;import javax
.swing
.*
;
import java
.net
.URL
;
class Data {private static URL headerUrl
= Data
.class.getResource("/statics/header.png");static ImageIcon header
= new ImageIcon(headerUrl
);private static URL upUrl
= Data
.class.getResource("/statics/up.png");private static URL downUrl
= Data
.class.getResource("/statics/down.png");private static URL leftUrl
= Data
.class.getResource("/statics/left.png");private static URL rightUrl
= Data
.class.getResource("/statics/right.png");static ImageIcon up
= new ImageIcon(upUrl
);static ImageIcon down
= new ImageIcon(downUrl
);static ImageIcon left
= new ImageIcon(leftUrl
);static ImageIcon right
= new ImageIcon(rightUrl
);private static URL bodyUrl
= Data
.class.getResource("/statics/body.png");static ImageIcon body
= new ImageIcon(bodyUrl
);private static URL foodUrl
= Data
.class.getResource("/statics/food.png");static ImageIcon food
= new ImageIcon(foodUrl
);
}
GamePanel.java
package com
.jacks
.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
{private int length
; private int[] snakeX
= new int[600]; private int[] snakeY
= new int[500]; private String fx
; private int foodX
;private int foodY
;private Random random
= new Random();private int speed
;private Timer timer
= new Timer(speed
, this);private boolean isStart
= false; private int isFail
= 0; private int score
; private int scoreM
= 0; private void init() {speed
= 100;timer
.setDelay(speed
);length
= 3;snakeX
[0] = 100;snakeY
[0] = 100;snakeX
[1] = 75;snakeY
[1] = 100;snakeX
[2] = 50;snakeY
[2] = 100;foodX
= 25 + 25 * random
.nextInt(34);foodY
= 75 + 25 * random
.nextInt(24);score
= 0;fx
= "R";}GamePanel() {init();this.setFocusable(true);this.addKeyListener(this);timer
.start();}@Overrideprotected void paintComponent(Graphics g
) {super.paintComponent(g
); this.setBackground(Color
.BLACK
); Data
.header
.paintIcon(this, g
, 25, 11);g
.fillRect(25, 75, 850, 600);switch (fx
) {case "R":Data
.right
.paintIcon(this, g
, snakeX
[0], snakeY
[0]);break;case "L":Data
.left
.paintIcon(this, g
, snakeX
[0], snakeY
[0]);break;case "U":Data
.up
.paintIcon(this, g
, snakeX
[0], snakeY
[0]);break;case "D":Data
.down
.paintIcon(this, g
, snakeX
[0], snakeY
[0]);break;}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
.WHITE
);g
.setFont(new Font("華文楷體", Font
.BOLD
, 18));g
.drawString("當(dāng)前長度:" + length
, 520, 35);g
.drawString("當(dāng)前分?jǐn)?shù):" + score
, 370, 35);if (score
>= scoreM
) scoreM
= score
;g
.drawString("歷史最高分:" + scoreM
, 370, 50);if (!isStart
) {g
.setColor(Color
.RED
);g
.setFont(new Font("華文楷體", Font
.BOLD
, 45));g
.drawString("按下空格開始游戲", 300, 300);}if (isFail
== 1) {g
.setColor(Color
.RED
);g
.setFont(new Font("華文楷體", Font
.BOLD
, 40));g
.drawString("游戲失敗,你啃到自己了,按空格重新開始!", 35, 300);} else if (isFail
== 2) {g
.setColor(Color
.RED
);g
.setFont(new Font("華文楷體", Font
.BOLD
, 40));g
.drawString("游戲失敗,您撞到墻了,按空格重新開始!", 35, 300);}}@Overridepublic void keyPressed(KeyEvent e
) {int keyCode
= e
.getKeyCode();if (keyCode
== KeyEvent
.VK_SPACE
) {