本文目錄一覽:
- 1、Java 編寫貪吃蛇遊戲的大體思路是什麼?
- 2、貪吃蛇 java代碼
- 3、java貪吃蛇國內現狀怎麼樣
- 4、java貪吃蛇小遊戲為什麼運行不了
- 5、java貪吃蛇技術選型怎麼寫的?
- 6、貪吃蛇java代碼具有交互功能嗎
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代碼
自己寫著玩的,很簡單,你試一試哦…
主要用了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貪吃蛇國內現狀怎麼樣
java貪吃蛇國內現狀是熱度慢慢淡下去了。貪吃蛇大作戰就做到了,表現異常亮眼,曾經登上免費榜第一的位置。《貪吃蛇大作戰》的流行,以及《球球大作戰》的持續火爆,最核心的原因是,在手機上找到了一種適合實時多人對戰的玩法,也和大環境下新生代玩家越來越注重遊戲本身的樂趣有關。在PC端上我們可以玩LOL、DotA、穿越火線這樣的實時對戰遊戲,我們享受與人斗的樂趣,將我們的榮譽融入其中。而在手機上能夠給予相似感受的遊戲一直並沒有出現,而恰恰這種類型的遊戲填補了這方面的空白。
java貪吃蛇小遊戲為什麼運行不了
手機配置低。java貪吃蛇小遊戲運行不了是手機配置低導致的。貪吃蛇遊戲是一款休閑益智類遊戲,有PC和手機等多平台版本。既簡單又耐玩。該遊戲通過控制蛇頭方向吃蛋,從而使得蛇變得越來越長。
java貪吃蛇技術選型怎麼寫的?
Java貪吃蛇技術選型一般需要考慮以下幾點:
開發平台:需要選擇適用於Java語言的開發平台,如Eclipse、IntelliJ IDEA等。
編程語言:需要選擇Java語言來開發貪吃蛇遊戲。
框架和庫:可以使用Java中的Swing框架和AWT庫來開發圖形界面,並使用Java多線程編程技術來實現遊戲的實時動態效果。
演算法和數據結構:可以使用隊列或鏈表等數據結構來存儲貪吃蛇的身體,並使用類似貪心演算法的思想來決定貪吃蛇的下一步移動方向。
編碼風格和規範:需要遵循Java的編碼風格和規範,確保代碼的可讀性和可維護性。
希望以上內容能夠幫助您了解Java貪吃蛇技術選型。如果您有其他問題,歡迎隨時告訴我,我會儘力為您解答。
貪吃蛇java代碼具有交互功能嗎
有。貪吃蛇自行編輯java代碼使其具有交互功能是可以的。實現貪吃蛇遊戲基本功能,屏幕上隨機出現一個「食物」,稱為豆子。玩家能利用上下左右鍵控制「蛇」的移動,「蛇」吃到「豆子」後「蛇」身體加長一節,得分增加,「蛇」碰到邊界或蛇頭與蛇身相撞,「蛇」死亡,遊戲結束。
原創文章,作者:KQTW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147937.html