java貪吃蛇代碼思路,java貪吃蛇源碼

java 貪吃蛇思想

我不懂JAVA,但是我可以告訴你我用C++寫過的貪吃蛇的思想;我定義一個2維數組里面存了一些點,即屏幕的坐標點,比如你要繪制一個正方形,你可以保存它的兩個頂點坐標到數組里面,然后把你的窗口的坐標都保存起來,再定義一個2維數組,先全0,為1表示有方塊,移動的時候就對這個數組里的數據進行操作,然后繪制到桌面上判斷第二個數組的數值,是1的話到第一個數組相同的索引里面取出坐標然后繪制,這樣可以少了很多復雜的問題,至于如何判斷你得自己動動腦子了!

專注于為中小企業提供做網站、網站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業煙臺免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了上千企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。

多思考才能收獲。

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;

}

}

}

高手幫忙解釋一下JAVA 貪食蛇游戲中蛇的代碼

public

class

Snake

implements

Data//蛇類實現了data接口

{

public

Snake()

{

array.add(new

Point(10,

10));//

array.add(new

Point(10,

11));//

array.add(new

Point(10,

12));//

array.add(new

Point(10,

13));//

array.add(new

Point(10,

14));//這五句話是構造一個蛇,這條蛇由五個坐標點連成

currentFlag

=UPFLAG

;//當前的運動方向設為向上

lifeFlag

=

true;//當前蛇的生命設為活著

}

public

void

move()//蛇的運動函數

{

tair

=

(Point)array.get(array.size()

-

1);//得到蛇的尾巴

int

len

=

array.size()

-

2;

for(int

i

=

len;

i

=

0;

i--)//這個for循環把蛇的每一個點都坐標偏移即運動了

{

Point

leftPoint

=

(Point)array.get(i);

Point

rightPoint

=

(Point)array.get(i

+

1);

rightPoint.x

=

leftPoint.x;

rightPoint.y

=

leftPoint.y;//每一個右邊的點等于其左邊的點,像蛇那樣的一縮一張的運動

}

}

public

void

moveHeadLeft()//把蛇的頭部轉向左邊

{

if(currentFlag

==

RIGHTFLAG

||

currentFlag

==

LEFTFLAG)//如果運動方向設為向左或向右則不執行

{

return;

}

move();

Point

point

=

(Point)(array.get(0));

//得到蛇頭部

point.x

=

point.x

-

1;//蛇頭部橫坐標減一,縱坐標不變

point.y

=

point.y;

if(point.x

LEFT)//如果蛇頭部不能再左,就不執行

{

lifeFlag

=

false;

}

currentFlag

=

LEFTFLAG;//將蛇運動方向改為左

}

怎么包裝貪吃蛇項目

思路:

首先你要有一條貪吃蛇,哎,就是玩兒。

1.先用Java敲一個貪吃蛇小游戲的程序。

2.把Java程序打包成jar文件包,把jar包打包成exe應用程序

知道思路以后,接下來按照我的詳細步驟走,能少踩坑,別問我怎么知道的!!!

一、Java“敲一個”貪吃蛇小游戲

廢話不多說,本篇主要講從java項目到exe應用程序,Java項目的代碼在我上傳的資源當中——代碼-greedy snack.zip

二、將項目打成jar包

如何打包成jar包?

1.手動打可直接執行的jar包(本次不使用)2. 使用intellij idea工具打可直接執行的jar包

1) 打開項目

2)點擊 File — 選擇 Project Structure,找到“Artifacts” 點擊 “+” 選擇“JAR” —“Empty”。

3) Name欄可以填入自定義的名字,Output ditectory選擇jar包生成目標目錄,Available Elements里雙擊需要添加到jar包的文件,即可添加到左邊的jar包目錄,如圖:

4)點擊Create Manifest,選擇放置MANIFEST.MF的文件路徑,直接默認項目根目錄就行,點擊OK。

5) 點擊Main Class后面選擇按鈕, 彈出框中選擇需要運行程序入口main函數,點擊OK,點擊OK。

6) 點擊菜單中“Build” - "Build Artifacts", 雙擊彈出框中待生成jar包下面的build即可,如下圖

7)至此使用Intellij idea生成可直接執行jar包就完成了。

8)查看生成的jar包,并運行jar包。命令行運行jar包

java -jar xxx.jar

復制代碼

三、打包成為exe應用程序

這里首先你要有:

上面生成的jar包 greedy snack.jar

工具:exe4j,一個將jar轉換成exe的工具 鏈接:… 提取碼:ijdv

1)安裝exe4j,打開安裝好的exe4j,進行注冊

注冊碼:L-g782dn2d-1f1yqxx1rv1sqd

2) 點擊 Next, 選擇JAVA轉EXE

3) Next,填入自定義的名字和生成目標文件目錄

4) 繼續Next,選擇啟動模式、設置程序名稱和程序圖標

5) 下方有個選項,需要設置打包后的程序兼容32和64位系統。

勾選,然后Next。

6)然后Next,直到出現如下界面,開始選擇jar包以及配置

在VM參數配置的地方加上:-Dfile.encoding=utf-8

添加jar包

設置啟動類

Next 配置JRE

Next 選擇 Client VM

7)Next 直到如下圖界面

桌面多了一個貪吃蛇小游戲3.0.exe文件,至此我們就成功的做出了一個Java貪吃蛇小游戲的exe應用程序

本文題目:java貪吃蛇代碼思路,java貪吃蛇源碼
本文來源:http://m.kartarina.com/article40/heigho.html

成都網站建設公司_創新互聯,為您提供搜索引擎優化云服務器靜態網站響應式網站品牌網站建設虛擬主機

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設
主站蜘蛛池模板: 无码人妻精品中文字幕免费东京热| 伊人久久大香线蕉无码麻豆| 久青草无码视频在线观看| 亚洲精品一级无码鲁丝片| 国产亚洲3p无码一区二区| 精品三级AV无码一区| 内射人妻少妇无码一本一道| 日韩精品少妇无码受不了| 免费看无码特级毛片| 色综合AV综合无码综合网站| 成人免费无码大片a毛片软件| 久久精品无码精品免费专区| 无码的免费不卡毛片视频| 精品亚洲成A人无码成A在线观看| 精品无码国产污污污免费| 色AV永久无码影院AV| AV无码小缝喷白浆在线观看| 日韩av无码成人无码免费| 亚洲AV永久无码精品一百度影院| 天堂无码在线观看| 免费无码又爽又刺激聊天APP | 中文字幕无码成人免费视频| 亚洲午夜无码久久久久小说| 精品欧洲AV无码一区二区男男| 久久水蜜桃亚洲av无码精品麻豆 | 十八禁无码免费网站| 亚洲综合无码一区二区三区| 特级做A爰片毛片免费看无码| 丰满少妇被猛烈进入无码| 亚洲精品无码专区在线| 亚洲中文字幕无码av在线| 日韩av无码久久精品免费| 亚洲日韩av无码| 中文字幕在线无码一区 | 午夜不卡久久精品无码免费| 内射人妻少妇无码一本一道 | 中文字幕乱偷无码av先锋蜜桃| 亚洲人成网亚洲欧洲无码久久| 国产成人麻豆亚洲综合无码精品| 国产网红主播无码精品| 亚洲无码精品浪潮|