最全的java遊戲網站「java貪吃蛇代碼」

年末啦,小編首先祝各位程序員新年快樂!真的是應了那句話:過了12歲之後,那歲數可就是不按規律的蹭蹭的往上漲啊,就在今年2018年,最後一批90後也步入了18歲的成人禮。正式宣布90後退出青年市場,00後統治世界~我們也即將是老去的一代。

純java開發貪吃蛇小遊戲(附代碼),回憶童年玩過的經典小遊戲!

小編偶然想到童年玩過的那些經典遊戲,在當下吃雞,擼啊擼風靡的時代,那些小遊戲漸漸被人遺忘,現在回想起來,當時那些遊戲還是很好玩的呢,各位看官覺得呢?所以小編自己動手寫出了貪吃蛇遊戲的java代碼,又重溫了一下,彷彿又回到了童年時代。下面給大家介紹一下代碼的邏輯和具體的代碼是什麼:

1.邏輯判斷

要點分析:

1)數據結構:matrix[][]用來存儲地圖上面的信息,如果什麼也沒有設置為false,

如果有食物或蛇,設置為true;nodeArray,一個LinkedList,用來保存蛇的每

一節;food用來保存食物的位置;而Node類是保存每個位置的信息。

2)重要函數:

changeDirection(int newDirection) ,用來改變蛇前進的方向,而且只是

保存頭部的前進方向,因為其他的前進方向已經用位置來指明了。 其中newDirection

必須和原來的direction不是相反方向,所以相反方向的值用了同樣的奇偶性。在測試

的時候使用了direction%2!=newDirection%2 進行判斷。

moveOn(),用來更新蛇的位置,對於當前方向,把頭部位置進行相應改變。如果越界,

結束;否則,檢測是否遇到食物(加頭部)或身體(結束);如果什麼都沒有,加上頭部,

去掉尾部。由於用了LinkedList數據結構,省去了相當多的麻煩。

純java開發貪吃蛇小遊戲(附代碼),回憶童年玩過的經典小遊戲!

2.具體代碼

public class SnakePanel extends JPanel implements KeyListener,ActionListener {

ImageIcon up = new ImageIcon(“up.png”);

ImageIcon down = new ImageIcon(“down.png”);

ImageIcon right = new ImageIcon(“right.png”);

ImageIcon left = new ImageIcon(“left.png”);

ImageIcon title = new ImageIcon(“title.jpg”);

ImageIcon food = new ImageIcon(“food.png”);

ImageIcon body = new ImageIcon(“body.png”);

/*

* 定義數組記錄蛇頭和蛇身體的坐標,變量len表示蛇的長度

* 變量方向表示蛇移動的方向

*/

int[] snakex = new int[750];

int[] snakey = new int[750];

Random rand = new Random();

int foodx = rand.nextInt(34)*25+25;

int foody = rand.nextInt(24)*25+75;

int len = 3;

int score = 0;

String fangxiang = “R”;//R右、L左、U上、D下

boolean isStarted = false;//判斷遊戲是否開始

boolean isFailed = false;//判斷是否死亡

//計時器:1.時間 2.時間到了去找的對象

Timer timer = new Timer(300, this);

public SnakePanel(){

this.setFocusable(true);//取得焦點

this.addKeyListener(this);

setup();

timer.start();

}

/*

* Graphics圖像

* public void paint(Graphics g) 以繪製組件。

* 應用程序不應直接調用 paint,而是應該使用 repaint 方法來安排重繪組件。

* 參數:g (相當於畫筆)- 在其中進行繪製的 Graphics 上下文

*/

public void paint(Graphics g){

// super.paint(g);

// this.setBackground(Color.WHITE);

this.getRootPane().setBackground(Color.WHITE);

/*

* public void paintIcon(Component c,Graphics g,int x,int y)

* 繪製圖標。

* 圖標的左上角在圖形上下文 g 的坐標空間中的點 (x, y) 處繪製。

* 如果此圖標沒有圖像觀察者,則此方法使用 c 組件作為觀察者。

* 參數:c(畫布) – 用作觀察者的組件,如果此圖標沒有圖像觀察者

g (畫筆)- 圖形上下文

x – 圖標左上角的 X 坐標

y – 圖標左上角的 Y 坐標

*/

title.paintIcon(this, g, 25, 11);

/*

* void java.awt.Graphics.fillRect(int x, int y, int width, int height)

* 填充指定的矩形。

* 該矩形左邊和右邊位於 x 和 x + width – 1。

* 頂邊和底邊位於 y 和 y + height – 1。

* 得到的矩形覆蓋的區域寬度為 width 像素,高度為 height 像素。

* 使用圖形上下文的當前顏色填充該矩形。

* 參數:x – 要填充矩形的 x 坐標。

y – 要填充矩形的 y 坐標。

width – 要填充矩形的寬度。

height – 要填充矩形的高度。

*/

g.fillRect(25, 75, 850, 600);

//畫蛇頭,先判斷蛇頭的方向

if(fangxiang.equals(“R”)){

right.paintIcon(this, g, snakex[0], snakey[0]);

}else if(fangxiang.equals(“L”)){

left.paintIcon(this, g, snakex[0], snakey[0]);

}else if(fangxiang.equals(“U”)){

up.paintIcon(this, g, snakex[0], snakey[0]);

}else if(fangxiang.equals(“D”)){

down.paintIcon(this, g, snakex[0], snakey[0]);

}

//畫蛇的身體

for (int i = 1; i < len; i++) {

body.paintIcon(this, g, snakex[i], snakey[i]);

}

//遊戲沒有開始時,顯示提示語(!isStarted)

if(isStarted == false){

g.setColor(Color.WHITE);

g.setFont(new Font(“微軟雅黑”,Font.BOLD,35));

g.drawString(“Press Space to Start/Pause”, 250, 350);

}

if(isFailed){

g.setColor(Color.WHITE);

g.setFont(new Font(“微軟雅黑”,Font.BOLD,35));

g.drawString(“Game Over! Press Space to ReStart”, 200, 350);

}

food.paintIcon(this, g, foodx, foody);

//添加分數

g.setColor(Color.WHITE);

g.drawString(“Score : “+score, 600, 45);

}

public void setup(){

isStarted = false;

isFailed = false;

len = 3;

snakex[0] = 100;

snakey[0] = 100;

snakex[1] = 75;

snakey[1] = 100;

snakex[2] = 50;

snakey[2] = 100;

}

@Override

public void keyPressed(KeyEvent e) {

// TODO Auto-generated method stub

int keyCode = e.getKeyCode();

//實現轉向,不能實現反轉

if(keyCode == KeyEvent.VK_SPACE){

if (isFailed) {

// isStarted = false;

// isFailed = false;

setup();

}else {

// isStarted = true;

isStarted = !isStarted;//改變當前狀態

// repaint();

}

}else if(keyCode == KeyEvent.VK_UP && fangxiang != “D”){

fangxiang = “U”;

}else if(keyCode == KeyEvent.VK_DOWN && fangxiang != “U”){

fangxiang = “D”;

}else if(keyCode == KeyEvent.VK_RIGHT && fangxiang != “L”){

fangxiang = “R”;

}else if(keyCode == KeyEvent.VK_LEFT && fangxiang != “R”){

fangxiang = “L”;

}

}

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

//1.再定義個鬧鐘

timer.start();

//2.移動數據

if (isStarted && !isFailed) {

//移動身體

for (int i = len; i >0; i–) {

snakex[i] = snakex[i-1];

snakey[i] = snakey[i-1];

}

//移動頭

if(fangxiang.equals(“R”)){

snakex[0] = snakex[0] + 25;

if(snakex[0] > 850)

snakex[0] = 25;

}else if(fangxiang.equals(“L”)){

snakex[0] = snakex[0] – 25;

if(snakex[0] < 25) snakex[0] = 850;

}else if(fangxiang.equals(“U”)){

snakey[0] = snakey[0] – 25;

if(snakey[0] < 75) snakey[0] = 650;

}else if(fangxiang.equals(“D”)){

snakey[0] = snakey[0] + 25;

if(snakey[0] > 650) snakey[0] = 75;

}

}

//吃食物

if(snakex[0] == foodx && snakey[0] == foody){

len ++;

score ++;

foodx = rand.nextInt(34)*25+25;

foody = rand.nextInt(24)*25+75;

}

//判斷身體相碰,遊戲結束

for (int i = 1; i < len; i++) {

if (snakex[0] == snakex[i] && snakey[0] == snakey[i]) {

isFailed = true;

}

}

//3.repaint()

repaint();

}

@Override

public void keyReleased(KeyEvent e) {

// TODO Auto-generated method stub

}

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

}

}

package 貪吃蛇;

import java.applet.Applet;

import java.io.File;

import java.net.MalformedURLException;

import javax.swing.JFrame;

public class Snake {

public static void main(String[] args) {

// TODO Auto-generated method stub

JFrame frame = new JFrame();

frame.setBounds(10, 10, 900, 720);

frame.setResizable(false);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

SnakePanel panel = new SnakePanel();

frame.add(panel);

frame.setVisible(true);

}

}

代碼量有點大,小夥伴們可以複製到eclipse中運行就可以了。

在最後呢,祝各位小夥伴永遠18歲,新年快樂~謝謝觀看~

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/252353.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-14 02:15
下一篇 2024-12-14 02:15

相關推薦

發表回復

登錄後才能評論