114培訓網(wǎng)歡迎您來到游戲設計交流中心!

400-850-8622

全國統(tǒng)一學習專線 9:00-21:00

java貪吃蛇技術選型怎么寫的?

Java貪吃蛇技術選型一般需要考慮以下幾點:

開發(fā)平臺:需要選擇適用于Java語言的開發(fā)平臺,如Eclipse、IntelliJ IDEA等。

編程語言:需要選擇Java語言來開發(fā)貪吃蛇游戲。

框架和庫:可以使用Java中的Swing框架和AWT庫來開發(fā)圖形界面,并使用Java多線程編程技術來實現(xiàn)游戲的實時動態(tài)效果。

算法和數(shù)據(jù)結構:可以使用隊列或鏈表等數(shù)據(jù)結構來存儲貪吃蛇的身體,并使用類似貪心算法的思想來決定貪吃蛇的下一步移動方向。

編碼風格和規(guī)范:需要遵循Java的編碼風格和規(guī)范,確保代碼的可讀性和可維護性。

希望以上內容能夠幫助您了解Java貪吃蛇技術選型。如果您有其他問題,歡迎隨時告訴我,我會盡力為您解答。

用JAVA設計游戲:貪吃蛇游戲

用MVC方式實現(xiàn)的貪吃蛇游戲,共有4個類。運行運行即可。主要是觀察者模式的使用,我已經添加了很多注釋了。
1、
/*
* 程序名稱:貪食蛇
* 原作者:BigF
* 修改者:algo
* 說明:我以前也用C寫過這個程序,現(xiàn)在看到BigF用Java寫的這個,發(fā)現(xiàn)雖然作者自稱是Java的初學者,
* 但是明顯編寫程序的素養(yǎng)不錯,程序結構寫得很清晰,有些細微得地方也寫得很簡潔,一時興起之
* 下,我認真解讀了這個程序,發(fā)現(xiàn)數(shù)據(jù)和表現(xiàn)分開得很好,而我近日正在學習MVC設計模式,
* 因此嘗試把程序得結構改了一下,用MVC模式來實現(xiàn),對源程序得改動不多。
* 我同時也為程序增加了一些自己理解得注釋,希望對大家閱讀有幫助。
*/
package mvcTest;
/**
* @author WangYu
* @version 1.0
* :
* </pre>
* Create on :Date :2005-6-13 Time:15:57:16
* :
* History:
*/
public class {
public static void main(String[] args) {
model = new (20,30);
control = new (model);
SnakeView view = new SnakeView(model,control);
//添加一個觀察者,讓view成為model的觀察者
model.(view);

(new Thread(model)).start();
}
}
-------------------------------------------------------------
2、
package mvcTest;
//.java
import java.awt.event.KeyEvent;
import java.awt.event.;
/**
* MVC中的Controler,負責接收用戶的操作,并把用戶操作通知Model
*/
public class {
model;
public ( model){
this.model = model;
}
public void (KeyEvent e) {
int keyCode = e.();
if (model.running){ // 運行狀態(tài)下,處理的按鍵
switch (keyCode) {
case KeyEvent.VK_UP:
model.(.UP);
break;
case KeyEvent.VK_DOWN:
model.(.DOWN);
break;
case KeyEvent.VK_LEFT:
model.(.LEFT);
break;
case KeyEvent.VK_RIGHT:
model.(.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
model.speedUp();
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
model.speedDown();
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
model.();
break;
default:
}
}
// 任何情況下處理的按鍵,按鍵導致重新啟動游戲
if (keyCode == KeyEvent.VK_R ||
keyCode == KeyEvent.VK_S ||
keyCode == KeyEvent.VK_ENTER) {
model.reset();
}
}
public void (KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
}
-------------------------------------------------------------
3、
/*
*
*/
package mvcTest;
/**
* 游戲的Model類,負責所有游戲相關數(shù)據(jù)及運行
* @author WangYu
* @version 1.0
* :
* </pre>
* Create on :Date :2005-6-13 Time:15:58:33
* :
* History:
*/
//.java
import javax.swing.*;
import java.util.Arrays;
import java.util.;
import java.util.;
import java.util.Random;
/**
* 游戲的Model類,負責所有游戲相關數(shù)據(jù)及運行
*/
class extends Runnable {
boolean[][] matrix; // 指示位置上有沒蛇體或食物
nodeArray = new (); // 蛇體
Node food;
int maxX;
int maxY;
int direction = 2; // 蛇運行的方向
boolean running = false; // 運行狀態(tài)
int = 200; // 時間間隔,毫秒
double = 0.75; // 每次得速度變化率
boolean paused = false; // 暫停標志
int score = 0; // 得分
int countMove = 0; // 吃到食物前移動的次數(shù)
// UP and DOWN should be even
// RIGHT and LEFT should be odd
public static final int UP = 2;
public static final int DOWN = 4;
public static final int LEFT = 1;
public static final int RIGHT = 3;
public ( int maxX, int maxY) {
this.maxX = maxX;
this.maxY = maxY;
reset();
}
public void reset(){
direction = .UP; // 蛇運行的方向
= 200; // 時間間隔,毫秒
paused = false; // 暫停標志
score = 0; // 得分
countMove = 0; // 吃到食物前移動的次數(shù)
// initial matirx, 全部清0
matrix = new boolean[maxX][];
for (int i = 0; i < maxX; ++i) {
matrix[i] = new boolean[maxY];
Arrays.fill(matrix[i], false);
}
// initial the snake
// 初始化蛇體,如果橫向位置超過20個,長度為10,否則為橫向位置的一半
int = maxX > 20 ? 10 : maxX / 2;
nodeArray.clear();
for (int i = 0; i < ; ++i) {
int x = maxX / 2 + i;//maxX被初始化為20
int y = maxY / 2; //maxY被初始化為30
//nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]
//默認的運行方向向上,所以游戲一開始nodeArray就變?yōu)椋?br> // [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]
nodeArray.addLast(new Node(x, y));
matrix[x][y] = true;
}
// 創(chuàng)建食物
food = ();
matrix[food.x][food.y] = true;
}
public void (int ) {
// 改變的方向不能與原來方向同向或反向
if (direction % 2 != % 2) {
direction = ;
}
}
/**
* 運行一次
* @return
*/
public boolean moveOn() {
Node n = (Node) nodeArray.getFirst();
int x = n.x;
int y = n.y;
// 根據(jù)方向增減坐標值
switch (direction) {
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
// 如果新坐標落在有效范圍內,則進行處理
if ((0 <= x && x < maxX) && (0 <= y && y < maxY)) {

if (matrix[x][y]) { // 如果新坐標的點上有東西(蛇體或者食物)
if (x == food.x && y == food.y) { // 吃到食物,成功
nodeArray.addFirst(food); // 從蛇頭贈長
// 分數(shù)規(guī)則,與移動改變方向的次數(shù)和速度兩個元素有關
int scoreGet = (10000 - 200 * countMove) / ;
score += scoreGet > 0 ? scoreGet : 10;
countMove = 0;
food = (); // 創(chuàng)建新的食物
matrix[food.x][food.y] = true; // 設置食物所在位置
return true;
} else // 吃到蛇體自身,失敗
return false;

} else { // 如果新坐標的點上沒有東西(蛇體),移動蛇體
nodeArray.addFirst(new Node(x, y));
matrix[x][y] = true;
n = (Node) nodeArray.();
matrix[n.x][n.y] = false;
countMove++;
return true;
}
}
return false; // 觸到邊線,失敗
}
public void run() {
running = true;
while (running) {
try {
Thread.sleep();
} catch (Exception e) {
break;
}
if (!paused) {
if (moveOn()) {
(); // Model通知View數(shù)據(jù)已經更新
();
} else {
.(null,
"you failed",
"Game Over",
._MESSAGE);
break;
}
}
}
running = false;
}
private Node () {
int x = 0;
int y = 0;
// 隨機獲取一個有效區(qū)域內的與蛇體和食物不重疊的位置
do {
Random r = new Random();
x = r.nextInt(maxX);
y = r.nextInt(maxY);
} while (matrix[x][y]);
return new Node(x, y);
}
public void speedUp() {
*= ;
}
public void speedDown() {
/= ;
}
public void () {
paused = !paused;
}
public String toString() {
String result = "";
for (int i = 0; i < nodeArray.size(); ++i) {
Node n = (Node) nodeArray.get(i);
result += "[" + n.x + "," + n.y + "]";
}
return result;
}
}
class Node {
int x;
int y;
Node(int x, int y) {
this.x = x;
this.y = y;
}
}
------------------------------------------------------------
4、
package mvcTest;
//SnakeView.java
import javax.swing.*;
import java.awt.*;
import java.util.Iterator;
import java.util.;
import java.util.;
import java.util.Observer;
/**
* MVC模式中得Viewer,只負責對數(shù)據(jù)的顯示,而不用理會游戲的控制邏輯
*/
public class SnakeView Observer {
control = null;
model = null;
JFrame mainFrame;
Canvas ;
JLabel ;
public static final int = 200;
public static final int = 300;
public static final int nodeWidth = 10;
public static final int = 10;
public SnakeView( model, control) {
this.model = model;
this.control = control;
mainFrame = new JFrame("");
Container cp = mainFrame.();
// 創(chuàng)建頂部的分數(shù)顯示
= new JLabel("Score:");
cp.add(, .NORTH);
// 創(chuàng)建中間的游戲顯示區(qū)域
= new Canvas();
.setSize( + 1, + 1);
.(control);
cp.add(, .CENTER);
// 創(chuàng)建底下的幫助欄
JPanel = new JPanel();
.setLayout(new ());
JLabel labelHelp;
labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);
.add(labelHelp, .NORTH);
labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);
.add(labelHelp, .CENTER);
labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);
.add(labelHelp, .SOUTH);
cp.add(, .SOUTH);
mainFrame.(control);
mainFrame.pack();
mainFrame.(false);
mainFrame.(JFrame.EXIT_ON_CLOSE);
mainFrame.(true);
}
void repaint() {
Graphics g = .();
//draw
g.setColor(Color.WHITE);
g.fillRect(0, 0, , );
// draw the snake
g.setColor(Color.BLACK);
na = model.nodeArray;
Iterator it = na.iterator();
while (it.hasNext()) {
Node n = (Node) it.next();
drawNode(g, n);
}
// draw the food
g.setColor(Color.RED);
Node n = model.food;
drawNode(g, n);
();
}
private void drawNode(Graphics g, Node n) {
g.fillRect(n.x * nodeWidth,
n.y * ,
nodeWidth - 1,
- 1);
}
public void () {
String s = "Score: " + model.score;
.setText(s);
}
public void update( o, Object arg) {
repaint();
}
}
-------------------------------------------------------------

怎么用java做游戲?

主要是用Java分支中的J2ME來寫,但是J2ME中需要Java的基礎知識。

現(xiàn)在有大部分人,都是從零開始學J2ME的,學習J2ME的時候,總是從Java基礎開始學習,而且現(xiàn)在講Java基礎的書籍中都是以J2SE來講基礎,這就給學習造成了一些不必要的麻煩,下面將J2ME中用到的和不需要的Java基礎知識做一個簡單的說明。

J2ME中使用到的Java基礎知識:

1、Java語法基礎:包括基本數(shù)據(jù)類型、關鍵字、運算符等等

2、面向對象的思想:類和對象的概念,繼承和多態(tài)等等。

3、異常處理

4、多線程

J2ME中沒有用到的Java基礎知識:

1、JDK中javac和java命令的使用

2、Java基礎中的很多類在J2ME中沒有,或者類中的方法做了大量的精簡。所以建議在J2ME中熟悉類庫。

3、Applet、AWT、Swing這些知識在J2ME中根本使用不到。

簡單說這么多,希望學J2ME的朋友們能少走一些彎路,不足之處希望大家積極指正和補充

1

相關問題全部

.,,,,..

我來了。

1.設計游戲,首先就要設計界面。首先看一下我設計的一個界面。界面分為左邊的游戲區(qū)與右邊的控制區(qū)。游戲區(qū)包含“得分信息”和貪吃蛇的游戲區(qū),右邊控制區(qū)有“開始”“暫?!薄巴V埂卑粹o,等級選擇單選框以及游戲排行榜。

2.所以我們需要定義swing組件,并在類初始化時初始化這些組件,添加組件。因為后面設計游戲的時候,我們要確切知道游戲區(qū)的大小,所以這里設置游戲區(qū)固定大小值。本來想用布局來更好的管理,但作者對布局也掌握不夠,所以就先設置固定大小吧。

3.定義我們的游戲。貪吃蛇游戲其實就是包含很多細小網(wǎng)格,然后蛇在網(wǎng)格中移動。蛇由一連串的網(wǎng)格組成,為了視覺效果,蛇身用藍色標記,食物用紅色標記,背景白色。如*張圖片所示。所以,我們需要定義二維數(shù)組,保存網(wǎng)格信息,保存蛇身和食物的位置信息等。初始化時,還需要添加鍵盤事件控制上下左右移動。

4.豆豆的位置信息是二維的,所以我簡單定義了一個類用來保存二維信息。

5.接著就是實現(xiàn)游戲的功能了。開始,暫停,停止按鈕添加事件控制游戲開始。等級按鈕定義游戲難度等。

6.開始游戲后,我們定義一個定時器。蛇身按照指定的方向移動,方向是通過初始化時添加的鍵盤事件,鍵盤的上下左右按鈕來控制。蛇身是連續(xù)的位置信息,保存到隊列中,所以蛇身的移動就是隊首增加一個位置,隊尾減少位置,然后重新繪畫游戲區(qū)就可以了。

在蛇身移動時進一步做吃掉食物、撞墻、撞到自己的處理。這是游戲的主要邏輯。

7.*,游戲結束我們彈出一個對話框提示是否保存游戲得分。我們制作了排行榜信息,只保留名的游戲得分。首先定義了一個實現(xiàn)接口的游戲得分類,按得分高,時間最早來排序。

8.游戲結束時保存得分信息,看是否進入到排行榜中。而之前在初始化排行榜組件時就會加載游戲排行榜信息。

通過保存和讀取排行榜信息,我們也熟悉一下文件讀取操作,還有集合、排序算法的功能。

9.我是傳播愛與正義的小蕪同學,我的回答結束。


啊,不止一次的被問過這個問題。

作為世界上最強大的開源語言之一,Java能做任何事,寫個框架?寫個程序?或者說——做個游戲?

但首先你得會使用引擎——unity、虛幻,哪怕是寒霜都成,但你得會一個。

然后是最難的部分之一——模型,和貼圖。一般來說,3DSMAX較多的用作游戲開發(fā),但如果是虛幻,MAYA更方便一些。建好模型,再繪制貼圖,把它扔到引擎里,*步就算完成了。

然后,繪制場景——這需要你擁有高超的關卡設計能力,這步通常需要很長時間的學習。

然后你就可以進行程序開發(fā)了,使用Java,制作主程序,再在主程序的基礎上,制作條件、精靈,和任務等等。

*,再用你那高超的UI設計能力,做一個UI,除錯后打包,你的游戲就算是完成了!

題主加油,等著你的游戲。

Java可以做3D游戲,可以做非常酷炫的3D游戲,性能并不比那些C++的引擎差!而開發(fā)效率又要高處好幾個數(shù)量級!

為什么呢?因為游戲底層的圖形渲染實質上都是OpenGL或者Direct3D,現(xiàn)代游戲引擎不大可能讓你手動去做圖形運算,復雜的東西都是交給底層的dll/so靜態(tài)庫文件以及GPU執(zhí)行的,上層代碼主要做好場景管理和邏輯控制。這也是為什么Unity3D這個引擎居然可以使用C#和作為它的游戲腳本,而從來沒有人說Unity3D引擎的游戲性能差。

另外,游戲的畫面,不管3D還是2D游戲,影響畫面效果的主要因素是游戲素材,而不是編程語言。3D游戲又有獨特的著色器語言專門負責圖形特效。什么HDR、PBR、SSAO、動態(tài)模糊、次世代法線貼圖,通通都是靠Shader搞定的,跟你用什么語言來寫游戲邏輯沒有半毛錢關系。

反觀Java本身的性能,現(xiàn)代編程語言除了C/C++,真沒有哪個敢在Java面前夸自己性能的。而且Java有眾多的開源類庫,憑什么我們不能用Java來做游戲呢?

誠然,Unity3D、CryEngine、Unreal這樣的商業(yè)引擎不僅僅是個游戲引擎,它們還有很多成熟的配套工具和資源工廠,這是Java游戲引擎所不具備的。

貪吃蛇游戲設計的目的及內容

主要內容就是設計蛇的形狀和方向,以及食物的產生與位置,先創(chuàng)建一個Point對象point,由多個point 組合成蛇身,當蛇吃到食物時,則增加一個point在蛇身上,使蛇身不斷加長,同時利用隨機函數(shù)在游戲面板上產生一個新的Food對象代替原來被“吃掉”的food,其次,玩家使用方向鍵來控制蛇的行進,當蛇吃到 food 就給玩家加分作為獎勵,*就可以得出用戶的分數(shù)。
設計的目的在于學習Java程序設計基本技術,學習用MyEclipse開發(fā)Java程序的相關技術,以及熟悉項目開發(fā)的完整過程。學會怎樣進行一個項目的需求分析、概要設計、詳細設計等軟件開發(fā)過程,熟練地掌握Java程序設計的基本技術和方法,以及熟練地掌握MyEclipse開發(fā)環(huán)境的使用方法,培養(yǎng)初步的項目分析能力和程序設計能力。
游戲實現(xiàn)的具體任務如下:
1) 游戲的開始,停止,暫停,繼續(xù)。 根據(jù)用戶單擊的按鈕(開始,停止,暫停,繼續(xù)),游戲實現(xiàn)具體相應的功能。
2) 游戲難度的調整。 用戶可以通過選擇相應難度地形來設置游戲的難度級別,級別越高,游戲難度也越大。
3) 游戲幫助。單擊游戲幫助按鈕彈出一個消息框提供相應的游戲介紹。另外在游戲中提供了網(wǎng)格對每一塊小方塊進行包裹,玩家可以選擇是否顯示網(wǎng)格,可以幫助剛入門的玩家比對蛇頭與食物的位置。
4) 蛇身和背景顏色的設置??梢酝ㄟ^單擊相應的設置按鈕讓蛇身或背景的顏色以用戶喜歡的顏色輸出。另外如果玩家選擇顯示網(wǎng)格,也可以單擊相應按鈕設置網(wǎng)格線的顏色。
5) 游戲獎勵。當蛇吃到一顆食物時則得到10分作為獎勵,同時如果吃到
特殊的食物則會得到普通食物三倍的獎勵。但特殊的食物會在一定時間內自動消失。

用Java語言寫一個約1500行代碼的貪吃蛇游戲

Runnable
}
if (i.util.Date.start();args) {
Thread new Thread(new Thread1());0;one = new Thread(new Thread2()).();
public
if (i %
one.start();
two;class Thread2
Thread class Thread1 {
while(true){
i++;
System.out.println(new i = run() {
while (true) {
two = Date().());
} catch try {
Thread.sleep(10000);Runnable {
break;
}
}
}
}
import java;Client {
public static void main(String[] );
public void run()
}
}
}
}<pre t="code" l="java">public class 4 == 0) {
System.out.println(;*******<pre t="code" l="java">public {
private int ( e) {
e;{
public void 100)nbsp

溫馨提示:為不影響您的學業(yè),來校區(qū)前請先電話咨詢,方便我校安排相關的專業(yè)老師為您解答
相關資料
姓名不能為空
手機號格式錯誤