java貪吃蛇,java貪吃蛇遊戲需要的圖片

本文目錄一覽:

java貪吃蛇國內現狀怎麼樣

java貪吃蛇國內現狀是熱度慢慢淡下去了。貪吃蛇大作戰就做到了,表現異常亮眼,曾經登上免費榜第一的位置。《貪吃蛇大作戰》的流行,以及《球球大作戰》的持續火爆,最核心的原因是,在手機上找到了一種適合實時多人對戰的玩法,也和大環境下新生代玩家越來越注重遊戲本身的樂趣有關。在PC端上我們可以玩LOL、DotA、穿越火線這樣的實時對戰遊戲,我們享受與人斗的樂趣,將我們的榮譽融入其中。而在手機上能夠給予相似感受的遊戲一直並沒有出現,而恰恰這種類型的遊戲填補了這方面的空白。

用java開發的大型遊戲有哪些

Java開發的大型遊戲有:俄羅斯方塊、超級泡泡龍、貪吃蛇、鑽石情迷、祖瑪等。學習Java開發推薦千鋒教育,教育培訓業務分為大學生技能培訓和職後技能培訓;高校服務業務主要提供校企合作全解決方案與定製服務;企業服務業務主要為企業提供專業化綜合服務,值得信賴。

用java開發的大型遊戲有以下幾個:

1、俄羅斯方塊(Tetris)

經典的益智遊戲,幾乎是世界上最有影響力的益智遊戲之一,遊戲本身也很簡單,只要不斷消減掉落的方塊就可以了。這個遊戲被模仿了很多個版本,我這裡的是EA出的瘋狂俄羅斯方塊(Tetris Mania)。

2、超級泡泡龍(Super Bubble Bobble)

Taito公司開發的遊戲,主角是兩隻綠色和藍色的小恐龍,通過吐出泡泡來消減屏幕上的綵球,遊戲本身簡單易學、妙趣橫生,女孩子玩起來會上癮的。

3、貪吃蛇(Retro Snaker)

諾基亞手機上的一個元老級遊戲,這個遊戲短小精悍,很具可玩性,特別適合在手機上玩。據稱,已經有超過十億人玩過這個遊戲。

4、鑽石情迷(Bejeweled)

一個很好玩的益智遊戲,有點像「對對碰」,遊戲規則很簡單,移動相鄰的兩個鑽石,使任一排產生有三個或以上的相同鑽石,即消去,上面的鑽石靠重力落下。

5、祖瑪(Zuma)

一款休閑益智遊戲,玩法很像QQ龍珠,將中間吐出來的珠子向著周圍連環滾出的同色珠子射打,夠三個就能炸裂消除,簡單有趣。

想要了解更多有關Java開發的相關信息,推薦諮詢千鋒教育。千鋒教育總部位於北京,目前已在20個城市成立分公司,現有教研講師團隊300餘人。公司目前已與國內20000餘家IT相關企業建立人才輸送合作關係,每年培養泛IT人才近2萬人,十年間累計培養超10餘萬泛IT人才,累計向互聯網輸出免費教學視頻950餘套,累積播放量超9800萬餘次,實力強大,值得選擇。

貪吃蛇 java代碼

自己寫著玩的,很簡單,你試一試哦…

主要用了javax.swing.Timer這個類:

import java.awt.*;

import javax.swing.*;

@SuppressWarnings(“serial”)

public class MainClass extends JFrame {

ControlSnake control;

Toolkit kit;

Dimension dimen;

public static void main(String[] args) {

new MainClass(“my snake”);

}

public MainClass(String s) {

super(s);

control = new ControlSnake();

control.setFocusable(true);

kit = Toolkit.getDefaultToolkit();

dimen = kit.getScreenSize();

add(control);

setLayout(new BorderLayout());

setLocation(dimen.width / 3, dimen.height / 3);// dimen.width/3,dimen.height/3

setSize(FWIDTH, FHEIGHT);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setResizable(false);

setVisible(true);

}

public static final int FWIDTH = 315;

public static final int FHEIGHT = 380;

}

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.Timer;

import java.util.Random;

@SuppressWarnings(“serial”)

public class ControlSnake extends JPanel implements ActionListener {

Random rand;

ArrayListPoint list, listBody;

String str, str1;

static boolean key;

int x, y, dx, dy, fx, fy, flag;

int snakeBody;

int speed;

public ControlSnake() {

snakeBody = 1;

str = “上下左右方向鍵控制 P鍵暫停…”;

str1 = “現在的長度為:” + snakeBody;

key = true;

flag = 1;

speed = 700;

rand = new Random();

list = new ArrayListPoint();

listBody = new ArrayListPoint();

x = 5;

y = 5;

list.add(new Point(x, y));

listBody.add(list.get(0));

dx = 10;

dy = 0;

fx = rand.nextInt(30) * 10 + 5;// 2

fy = rand.nextInt(30) * 10 + 5;// 2

setBackground(Color.WHITE);

setSize(new Dimension(318, 380));

final Timer time = new Timer(speed, this);

time.start();

addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == 37) {

dx = -10;

dy = 0;

} else if (e.getKeyCode() == 38) {

dx = 0;

dy = -10;

} else if (e.getKeyCode() == 39) {

dx = 10;

dy = 0;

} else if (e.getKeyCode() == 40) {

dx = 0;

dy = 10;

} else if (e.getKeyCode() == 80) {

if (flag % 2 == 1) {

time.stop();

}

if (flag % 2 == 0) {

time.start();

}

flag++;

}

}

});

}

public void paint(Graphics g) {

g.setColor(Color.WHITE);

g.fillRect(0, 0, 400, 400);

g.setColor(Color.DARK_GRAY);

g.drawLine(3, 3, 305, 3);

g.drawLine(3, 3, 3, 305);

g.drawLine(305, 3, 305, 305);

g.drawLine(3, 305, 305, 305);

g.setColor(Color.PINK);

for (int i = 0; i listBody.size(); i++) {

g.fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9);

}

g.fillRect(x, y, 9, 9);

g.setColor(Color.ORANGE);

g.fillRect(fx, fy, 9, 9);

g.setColor(Color.DARK_GRAY);

str1 = “現在的長度為:” + snakeBody;

g.drawString(str, 10, 320);

g.drawString(str1, 10, 335);

}

public void actionPerformed(ActionEvent e) {

x += dx;

y += dy;

if (makeOut() == false) {

JOptionPane.showMessageDialog(null, “重新開始……”);

speed = 700;

snakeBody = 1;

x = 5;

y = 5;

list.clear();

list.add(new Point(x, y));

listBody.clear();

listBody.add(list.get(0));

dx = 10;

dy = 0;

}

addPoint(x, y);

if (x == fx y == fy) {

speed = (int) (speed * 0.8);//速度增加參數

if (speed 200) {

speed = 100;

}

fx = rand.nextInt(30) * 10 + 5;// 2

fy = rand.nextInt(30) * 10 + 5;// 2

snakeBody++;// 2

} // 2

repaint();

}

public void addPoint(int xx, int yy) {

// 動態的記錄最新發生的50步以內的移動過的坐標

// 並畫出最新的snakeBody

if (list.size() 100) {//蛇身長度最長為100

list.add(new Point(xx, yy));

} else {

list.remove(0);

list.add(new Point(xx, yy));

}

if (snakeBody == 1) {

listBody.remove(0);

listBody.add(0, list.get(list.size() – 1));

} else {

listBody.clear();

if (list.size() snakeBody) {

for (int i = list.size() – 1; i 0; i–) {

listBody.add(list.get(i));

}

} else {

for (int i = list.size() – 1; listBody.size() snakeBody; i–) {

listBody.add(list.get(i));

}

}

}

}

public boolean makeOut() {

if ((x 3 || y 3) || (x 305 || y 305)) {

return false;

}

for (int i = 0; i listBody.size() – 1; i++) {

for (int j = i + 1; j listBody.size(); j++) {

if (listBody.get(i).equals(listBody.get(j))) {

return false;

}

}

}

return true;

}

}

Java 編寫貪吃蛇遊戲的大體思路是什麼?

樓主沒有看到蛇移動的本質,蛇雖然是分成很多塊,但他們還是一個整體,每一塊的移動都和上一塊有關,所以不需要對每一塊都進行判斷。\x0d\x0a原理:\x0d\x0a把蛇身體的每一塊看成一個對象(對象存儲該塊的坐標和相關信息),作為節點存儲在線性鏈表中,再設置一個變數標誌蛇的方向(通過按鍵可以改變)。一般人都是讓每一個節點等於他指向的下一個節點,並讓頭節點改變位置來實現轉彎和移動,這個演算法複雜度太高(O(n)),實際上只要做兩步操作,插入一個頭節點,刪除一個尾節點就可以了,新插入的頭節點位置根據蛇當前的方向決定 用一個數組將蛇頭的行徑記錄下來,然後第二段的下一個方格設置為蛇頭走過的方格,這樣子蛇走過的路徑都是前一段走過的,最後將跟著蛇頭走了,比如\x0d\x0a蛇身的路徑\x0d\x0a for(int i=snakeLength-1;i0;i–){\x0d\x0arows[i]=rows[i-1];//依次將蛇前面一段走過行的路段賦值給蛇的下一段\x0d\x0acols[i]=cols[i-1];//依次將蛇前面一段走過列的路段賦值給蛇的下一段\x0d\x0a}\x0d\x0afor(int i=1;i

java貪吃蛇代碼注釋求解

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Rectangle;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.image.BufferedImage;

import java.util.ArrayList;

import java.util.List;

import javax.swing.JFrame;

public class InterFace extends JFrame {

/**

* WIDTH:寬

* HEIGHT:高

* SLEEPTIME:可以看作蛇運動的速度

* L = 1,R = 2, U = 3, D = 4 左右上下代碼

*/

public static final int WIDTH = 800, HEIGHT = 600, SLEEPTIME = 200, L = 1,R = 2, U = 3, D = 4;

BufferedImage offersetImage= new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_3BYTE_BGR);;

Rectangle rect = new Rectangle(20, 40, 15 * 50, 15 * 35);

Snake snake;

Node node;

public InterFace() {

//創建”蛇”對象

snake = new Snake(this);

//創建”食物”對象

createNode();

this.setBounds(100, 100, WIDTH, HEIGHT);

//添加鍵盤監聽器

this.addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent arg0) {

System.out.println(arg0.getKeyCode());

switch (arg0.getKeyCode()) {

//映射上下左右4個鍵位

case KeyEvent.VK_LEFT:

snake.dir = L;

break;

case KeyEvent.VK_RIGHT:

snake.dir = R;

break;

case KeyEvent.VK_UP:

snake.dir = U;

break;

case KeyEvent.VK_DOWN:

snake.dir = D;

}

}

});

this.setTitle(“貪吃蛇 0.1 By : Easy”);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setVisible(true);

//啟動線程,開始執行

new Thread(new ThreadUpadte()).start();

}

public void paint(Graphics g) {

Graphics2D g2d = (Graphics2D) offersetImage.getGraphics();

g2d.setColor(Color.white);

g2d.fillRect(0, 0, WIDTH, HEIGHT);

g2d.setColor(Color.black);

g2d.drawRect(rect.x, rect.y, rect.width, rect.height);

//如果蛇碰撞(吃)到食物,則創建新食物

if (snake.hit(node)) {

createNode();

}

snake.draw(g2d);

node.draw(g2d);

g.drawImage(offersetImage, 0, 0, null);

}

class ThreadUpadte implements Runnable {

public void run() {

//無限重繪畫面

while (true) {

try {

Thread.sleep(SLEEPTIME);

repaint(); //

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

/**

* 創建食物

*/

public void createNode() {

//隨機食物的出現位置

int x = (int) (Math.random() * 650) + 50,y = (int) (Math.random() * 500) + 50;

Color color = Color.blue;

node = new Node(x, y, color);

}

public static void main(String args[]) {

new InterFace();

}

}

/**

* 節點類(包括食物和蛇的身軀組成節點)

*/

class Node {

int x, y, width = 15, height = 15;

Color color;

public Node(int x, int y, Color color) {

this(x, y);

this.color = color;

}

public Node(int x, int y) {

this.x = x;

this.y = y;

this.color = color.black;

}

public void draw(Graphics2D g2d) {

g2d.setColor(color);

g2d.drawRect(x, y, width, height);

}

public Rectangle getRect() {

return new Rectangle(x, y, width, height);

}

}

/**

* 蛇

*/

class Snake {

public ListNode nodes = new ArrayListNode();

InterFace interFace;

int dir=InterFace.R;

public Snake(InterFace interFace) {

this.interFace = interFace;

nodes.add(new Node(20 + 150, 40 + 150));

addNode();

}

/**

* 是否碰撞到食物

* @return true 是 false 否

*/

public boolean hit(Node node) {

//遍歷整個蛇體是否與食物碰撞

for (int i = 0; i nodes.size(); i++) {

if (nodes.get(i).getRect().intersects(node.getRect())) {

addNode();

return true;

}

}

return false;

}

public void draw(Graphics2D g2d) {

for (int i = 0; i nodes.size(); i++) {

nodes.get(i).draw(g2d);

}

move();

}

public void move() {

nodes.remove((nodes.size() – 1));

addNode();

}

public synchronized void addNode() {

Node nodeTempNode = nodes.get(0);

//如果方向

switch (dir) {

case InterFace.L:

//判斷是否會撞牆

if (nodeTempNode.x = 20) {

nodeTempNode = new Node(20 + 15 * 50, nodeTempNode.y);

}

nodes.add(0, new Node(nodeTempNode.x – nodeTempNode.width,

nodeTempNode.y));

break;

case InterFace.R:

//判斷是否會撞牆

if (nodeTempNode.x = 20 + 15 * 50 – nodeTempNode.width) {

nodeTempNode = new Node(20 – nodeTempNode.width, nodeTempNode.y);

}

nodes.add(0, new Node(nodeTempNode.x + nodeTempNode.width,

nodeTempNode.y));

break;

case InterFace.U:

//判斷是否會撞牆

if (nodeTempNode.y = 40) {

nodeTempNode = new Node(nodeTempNode.x, 40 + 15 * 35);

}

nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y – nodeTempNode.height));

break;

case InterFace.D:

//判斷是否會撞牆

if (nodeTempNode.y = 40 + 15 * 35 – nodeTempNode.height) {

nodeTempNode = new Node(nodeTempNode.x,40 – nodeTempNode.height);

}

nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y + nodeTempNode.height));

break;

}

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/184063.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-25 05:51
下一篇 2024-11-25 05:51

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • 為什麼不用Python開發遊戲

    Python是一種高級編程語言,擁有簡單易學、代碼簡潔等優點。同時,Python也是一種多用途的語言,可以用於Web開發、數據分析以及機器學習等領域。然而,對於遊戲開發領域,Pyt…

    編程 2025-04-29
  • 用Python繪製酷炫圖片

    在本篇文章中,我們將展示如何使用Python繪製酷炫的圖片。 一、安裝Python繪圖庫 在使用Python繪製圖片之前,我們需要先安裝Python繪圖庫。Python有很多繪圖庫…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論