導航:首頁 > 編程語言 > java游戲編程開發教程

java游戲編程開發教程

發布時間:2023-06-02 07:24:33

❶ 新手java應該怎麼學

新手想學好Java,需要一份完整的Java學習路線圖。下面分享一份Java全套的的學習路線,僅供參考


如果想入行Java開發行業,卻苦於自己沒有基礎,擔心自己學不會,可以選擇專業的學習,一般學習費用在2W左右,也有線上的相關學習。Java學習可以從基礎開始,零基礎學習並不可怕,一般4-6個左右的時間,只要你肯努力,一切都不是事。

❷ 誰有Java 游戲編程開發教程這本書二人麻將游戲源代碼或這本書的電子版

基礎的要看java學習筆記,台灣陳信良寫的,他是sun的官方出題官,很好,特別適合初學的人看,有的基礎之後再看thinkinjava,那個沒有基礎看的糊塗

❸ 如何用JAVA開發游戲伺服器

首先,我得說明的是,目前市場上新人很難去做pc游戲開發,要麼是做頁游要麼是手游。

頁游不清楚我就不說了,手游裡面,客戶端主要就是c2d和u3d。

如果昌困搜你尺並想做客戶端,那麼你可以轉學u3d,因為它使用的語言是csharp,這個語言和java相似。網上unity的教程也很多,你隨便找一下就有了。

再說說手游伺服器,其實我入行伺服器還是挺巧合的,當初本來是打算做客戶端的,都入職了,因為招不到伺服器,就讓我轉伺服器了。。

伺服器的教程,我至今也沒找到,而且也找不到系統的教程。

開源的伺服器框架也只熟悉kbengine和scut。其中一個是cpp做底層python做開發的,一個是csharp做開發。而且scut已經兩年沒有更新了,應該是死掉了。

所以,想要學伺服器開發,耐歷得碰點運氣。

java伺服器目前主流框架技術有網路層netty或mina,數據協議protobuf,資料庫mysql,緩存資料庫redis,jdbc一般是myts或者jpa,項目管理maven,設計層面spring

然後還需要熟悉多線程,linux的基本操作,git或者svn。

差不多了,這些都有個大致的了解,會用,應該就能找到工作了。

後面再深入需要學習的也挺多的,到時候你再根據業務需求自己琢磨著學吧。

❹ java做一些小游戲需要學什麼

Java做這些小游戲, 可以使用下面幾種Java自帶的圖形界面框架

  1. Awt 適合內存較小, 配置較低的嵌入式系統等,組件較少, 性能好,資源消耗低.

  2. Swing 適合PC等, 組件較豐富, 內存佔用較大, 但是跨平台性優越

  3. JavaFX 這個是比較強大的框架了,組件比Swing更豐富,比如添加了 日期選擇組件, WebView組件, 還支持3D和 動畫. 並且多多媒體支持良好. 但是相關資料比Swing等少

  4. 既然學過Java Web 那麼對網頁編程還是有了解吧, HTML+CSS+JS 也可以開發出小游戲,瀏覽器可以顯示, 放入JavaFX的WebView組件也可以顯示出來

推薦使用JavaFX 或者 Web ,因為這兩者都很好做到了分離. JavaFX也可以分離出FXML文件,CSS文件,Java文件. 當然也可以採用最穩妥的Swing來開發,畢竟Swing的圖書教程很多.

推薦書籍

<Java 2D游戲編程入門> <Java游戲編程原理與實踐教程>

<JavaFX 游戲程式設計 第三版>

其實游戲演算法都一樣, 在Swing上好了弄透徹了, 也可以輕松移植到JavaFX或者網頁上

❺ java初學者怎麼入門

學習JAVA應該從哪一部開始很多人都很迷茫,下面是我整理的學習路線和方向一共四點。希望對你有幫助!

①【學習語言基礎】

很顯然,掌握語言基礎是第一步。如果你不了解基礎知識,那麼你就不知道自己是否做錯了或者接下來該怎麼做。當然,這並不是要求你把所有的基礎知識都記住,比如所有的 Java關鍵字、核心概念或者基本編碼技術等。

②【開始編寫一些小程序】

如果你確信自己對大多數的基礎知識和概念足夠熟悉,並且能夠以某種方式將它們聯系起來,那麼你就可以進行下一步了,你可以開始嘗試編寫一些非常基本的 Java 程序,比如列印 hello world、實現簡單的加減法,等等。

③【 使用 Java API 編寫高級程序】

當你完成了大部分的基礎程序編寫,並且掌握了基本的編程技巧之後,就可以進行下一步了。我會建議你努力學習 Java 集合和 Java IO 內部的 API。你需要熟悉這些 API 提供的各種類和介面,並利用它們來創建程序。需要注意的是,你應該查找已經存在的 API 和方法來實現功能,而不是自己實現這些邏輯。你的任務是熟悉這些 API,因此你只能夠在這些已有的 API 中尋求解決方案。

④【編寫桌面程序和 Web 應用】

通過這一步的學習,面對任何 Java 面試你都能夠信心滿滿,當你討論 Java 相關的話題時也能夠充滿自信。你需要至少編寫一個 Java 桌面或者 GUI 應用程序,比如計算器,然後再編寫一個 Web 應用程序,比如醫院管理程序。在前面的學習中,你已經掌握了最基本的 Java 知識,現在你需要去探索,然後編寫出這兩個應用程序。

重要的是,它可以幫助你養成不惜一切代價完成一項任務的好習慣。這種持之以恆的態度對你職業生涯的長遠發展是非常重要的。

最後,也是最關鍵的一點,就是要多看視頻教程,這一類的資料很多,可以自己搜索看一下,B站上面很多有關java的學習資料,我冒昧的推薦一個可以參考一下:網頁鏈接

❻ java 面向對象設計 運用GUI技術的開發 進行小游戲程序的開發

/*原始圖片分為16塊第一塊為空白

*我是這樣想的:

*因為無法將圖片分成15份而放到16塊的區域中(至少是很難實現)

*因此將原世散始圖片中一部分處理成白色,這樣就好處理了

*/

importjava.awt.Graphics;

importjava.awt.GridLayout;

importjava.awt.Image;

importjava.awt.MediaTracker;

importjava.awt.event.MouseEvent;

importjava.awt.event.MouseListener;

importjava.awt.image.BufferedImage;

importjava.util.HashSet;

importjava.util.Iterator;

importjava.util.Random;

importjava.util.Set;

importjavax.print.attribute.standard.Media;

importjavax.swing.AbstractButton;

importjavax.swing.Icon;

importjavax.swing.ImageIcon;

importjavax.swing.JButton;

importjavax.swing.JFrame;

{

intcurrx,curry,cx,cy;

Imageimg,whiteimg;

Iconimg1;

IconcurrIcon;

BufferedImagebimg,white;

BufferedImage[][]subimg;

intwidth,height;

JButton[][]jb;

publicPintu(){

this.setLayout(newGridLayout(4,4));

img=this.getToolkit().getImage("吵瞎E:\1.jpg");

whiteimg=this.getToolkit().getImage("E:\2.jpg");

MediaTrackerme=newMediaTracker(this);

me.addImage(img,0);

try{

me.waitForAll(0);

}catch(InterruptedExceptione){

//TODO自動生成catch塊

e.printStackTrace();

}

width=img.getWidth(this);

height=img.getHeight(this);

bimg=newBufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);

Graphicsbg=bimg.getGraphics();

bg.drawImage(img,0,0,this);

subimg=newBufferedImage[4][4];

inta[]=newint[4];

for(inti=0;i<a.length;i++){

a[i]=(int)(Math.random()*4);

for(intk=0;k<i;k++){

if(a[i]==a[k]){

i--;

continue;

}

}

}

for(intx=0;x<4;x++){

for(inty=0;y<4;y++)

subimg[a[x]][a[y]]=bimg.getSubimage(width*x/4,height*y/4,width/4,height/4);

}

currx=a[0];curry=a[0];

white=subimg[currx][curry];

jb=newJButton[4][4];

for(inti=0;i<4;i++){

for(intj=0;j<4;j++){

jb[i][j]=newJButton();

jb[i][j].addMouseListener((MouseListener)升返空this);

this.add(jb[i][j]);

jb[i][j].setIcon(newImageIcon(subimg[i][j]));

}

}

setSize(img.getWidth(this),img.getHeight(this));

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);

}

/*publicvoidpaint(Graphicsg){

g.drawImage(subimg[0],0,0,this);

}*/

publicstaticvoidmain(String[]args){

newPintu();

}

publicvoidmouseClicked(MouseEvente){

for(inti=0;i<4;i++)

for(intj=0;j<4;j++)

if(((AbstractButton)e.getSource())==jb[i][j]){cx=i;cy=j;}

if(((cx==currx)&&(((cy-curry)==1)||((curry-cy)==1)))||((cy==curry)&&(((cx-currx)==1)||((currx-cx)==1))))

{

System.out.println(""+cx+""+cy);

currIcon=jb[cx][cy].getIcon();

jb[cx][cy].setIcon(newImageIcon(white));

jb[currx][curry].setIcon(currIcon);

currx=cx;curry=cy;

}

}

@Override

publicvoidmouseEntered(MouseEvente){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidmouseExited(MouseEvente){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidmousePressed(MouseEvente){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidmouseReleased(MouseEvente){

//TODOAuto-generatedmethodstub

}

}

就是照著你說的那個改的。。。。效果圖如下:

❼ 用JAVA編一個小游戲或者其他程序

貪吃蛇程序:
GreedSnake.java (也是程序入口):

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Iterator;
import java.util.LinkedList;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GreedSnake implements KeyListener {
JFrame mainFrame;

Canvas paintCanvas;

JLabel labelScore;// 計分牌

SnakeModel snakeModel = null;// 蛇

public static final int canvasWidth = 200;

public static final int canvasHeight = 300;

public static final int nodeWidth = 10;

public static final int nodeHeight = 10;

// ----------------------------------------------------------------------
// GreedSnake():初始化游戲界面
// ----------------------------------------------------------------------
public GreedSnake() {
// 設置界面元素
mainFrame = new JFrame("GreedSnake");
Container cp = mainFrame.getContentPane();
labelScore = new JLabel("Score:");
cp.add(labelScore, BorderLayout.NORTH);
paintCanvas = new Canvas();
paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);
paintCanvas.addKeyListener(this);
cp.add(paintCanvas, BorderLayout.CENTER);
JPanel panelButtom = new JPanel();
panelButtom.setLayout(new BorderLayout());
JLabel labelHelp;// 幫助信息
labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.NORTH);
labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.CENTER);
labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.SOUTH);
cp.add(panelButtom, BorderLayout.SOUTH);
mainFrame.addKeyListener(this);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
begin();
}

// ----------------------------------------------------------------------
// keyPressed():按鍵檢測
// ----------------------------------------------------------------------
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (snakeModel.running)
switch (keyCode) {
case KeyEvent.VK_UP:
snakeModel.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
snakeModel.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
snakeModel.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
snakeModel.changeDirection(SnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
snakeModel.speedUp();// 加速
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
snakeModel.speedDown();// 減速
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
snakeModel.changePauseState();// 暫停或繼續
break;
default:
}
// 重新開始
if (keyCode == KeyEvent.VK_R || keyCode == KeyEvent.VK_S
|| keyCode == KeyEvent.VK_ENTER) {
snakeModel.running = false;
begin();
}
}

// ----------------------------------------------------------------------
// keyReleased():空函數
// ----------------------------------------------------------------------
public void keyReleased(KeyEvent e) {
}

// ----------------------------------------------------------------------
// keyTyped():空函數
// ----------------------------------------------------------------------
public void keyTyped(KeyEvent e) {
}

// ----------------------------------------------------------------------
// repaint():繪制游戲界面(包括蛇和食物)
// ----------------------------------------------------------------------
void repaint() {
Graphics g = paintCanvas.getGraphics();
// draw background
g.setColor(Color.WHITE);
g.fillRect(0, 0, canvasWidth, canvasHeight);
// draw the snake
g.setColor(Color.BLACK);
LinkedList na = snakeModel.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 = snakeModel.food;
drawNode(g, n);
updateScore();
}

// ----------------------------------------------------------------------
// drawNode():繪畫某一結點(蛇身或食物)
// ----------------------------------------------------------------------
private void drawNode(Graphics g, Node n) {
g.fillRect(n.x * nodeWidth, n.y * nodeHeight, nodeWidth - 1,
nodeHeight - 1);
}

// ----------------------------------------------------------------------
// updateScore():改變計分牌
// ----------------------------------------------------------------------
public void updateScore() {
String s = "Score: " + snakeModel.score;
labelScore.setText(s);
}

// ----------------------------------------------------------------------
// begin():游戲開始,放置貪吃蛇
// ----------------------------------------------------------------------
void begin() {
if (snakeModel == null || !snakeModel.running) {
snakeModel = new SnakeModel(this, canvasWidth / nodeWidth,
this.canvasHeight / nodeHeight);
(new Thread(snakeModel)).start();
}
}

// ----------------------------------------------------------------------
// main():主函數
// ----------------------------------------------------------------------
public static void main(String[] args) {
GreedSnake gs = new GreedSnake();
}
}

Node.java:

public class Node {

int x;

int y;

Node(int x, int y) {
this.x = x;
this.y = y;
}

}

SnakeModel.java:

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Random;

import javax.swing.JOptionPane;

public class SnakeModel implements Runnable {
GreedSnake gs;

boolean[][] matrix;// 界面數據保存在數組里

LinkedList nodeArray = new LinkedList();

Node food;

int maxX;// 最大寬度

int maxY;// 最大長度

int direction = 2;// 方向

boolean running = false;

int timeInterval = 200;// 間隔時間(速度)

double speedChangeRate = 0.75;// 速度改變程度

boolean paused = false;// 游戲狀態

int score = 0;

int countMove = 0;

// UP和DOWN是偶數,RIGHT和LEFT是奇數
public static final int UP = 2;

public static final int DOWN = 4;

public static final int LEFT = 1;

public static final int RIGHT = 3;

// ----------------------------------------------------------------------
// GreedModel():初始化界面
// ----------------------------------------------------------------------
public SnakeModel(GreedSnake gs, int maxX, int maxY) {
this.gs = gs;
this.maxX = maxX;
this.maxY = maxY;
matrix = new boolean[maxX][];
for (int i = 0; i < maxX; ++i) {
matrix[i] = new boolean[maxY];
Arrays.fill(matrix[i], false);// 沒有蛇和食物的地區置false
}
// 初始化貪吃蛇
int initArrayLength = maxX > 20 ? 10 : maxX / 2;
for (int i = 0; i < initArrayLength; ++i) {
int x = maxX / 2 + i;
int y = maxY / 2;
nodeArray.addLast(new Node(x, y));
matrix[x][y] = true;// 蛇身處置true
}
food = createFood();
matrix[food.x][food.y] = true;// 食物處置true
}

// ----------------------------------------------------------------------
// changeDirection():改變運動方向
// ----------------------------------------------------------------------
public void changeDirection(int newDirection) {
if (direction % 2 != newDirection % 2)// 避免沖突
{
direction = newDirection;
}
}

// ----------------------------------------------------------------------
// moveOn():貪吃蛇運動函數
// ----------------------------------------------------------------------
public boolean moveOn() {
Node n = (Node) nodeArray.getFirst();
int x = n.x;
int y = n.y;
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);// 在頭部加上一結點
// 計分規則與移動長度和速度有關
int scoreGet = (10000 - 200 * countMove) / timeInterval;
score += scoreGet > 0 ? scoreGet : 10;
countMove = 0;
food = createFood();
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.removeLast();// 去掉尾部
matrix[n.x][n.y] = false;
countMove++;
return true;
}
}
return false;// 越界(撞到牆壁)
}

// ----------------------------------------------------------------------
// run():貪吃蛇運動線程
// ----------------------------------------------------------------------
public void run() {
running = true;
while (running) {
try {
Thread.sleep(timeInterval);
} catch (Exception e) {
break;
}
if (!paused) {
if (moveOn())// 未結束
{
gs.repaint();
} else// 游戲結束
{
JOptionPane.showMessageDialog(null, "GAME OVER",
"Game Over", JOptionPane.INFORMATION_MESSAGE);
break;
}
}
}
running = false;
}

// ----------------------------------------------------------------------
// createFood():生成食物及放置地點
// ----------------------------------------------------------------------
private Node createFood() {
int x = 0;
int y = 0;
do {
Random r = new Random();
x = r.nextInt(maxX);
y = r.nextInt(maxY);
} while (matrix[x][y]);
return new Node(x, y);
}

// ----------------------------------------------------------------------
// speedUp():加快蛇運動速度
// ----------------------------------------------------------------------
public void speedUp() {
timeInterval *= speedChangeRate;
}

// ----------------------------------------------------------------------
// speedDown():放慢蛇運動速度
// ----------------------------------------------------------------------
public void speedDown() {
timeInterval /= speedChangeRate;
}

// ----------------------------------------------------------------------
// changePauseState(): 改變游戲狀態(暫停或繼續)
// ----------------------------------------------------------------------
public void changePauseState() {
paused = !paused;
}
}

❽ java該怎麼自學

在學java一定要問問自己喜歡嗎?只要喜歡一切沒問題,這是我的建議:多敲代碼,多敲代碼,多敲代碼,重要的事情說三遍
學習Java決不能聽完敲一遍就過,一定要多敲幾遍,第一遍可以跟著老師的思路,後面一定要有自己的思路,慢慢培養自己的編程思想和實現功能的邏輯。甚至可以自己給自己出題,完全靠自己實現一些有意思的小功能,對提升自己的能力和代碼熟練度都有不小的幫助。

多看視頻,多練習,主要是練習一些演算法的運用,建議下載一些編程練習題,一道一道弄通弄懂。經常做筆記,用記事本把一些經典問題保存下來,以備復習。
如果是零基礎的話,就看視頻,b站上高旗老師講得不錯,每看到視頻出現一段代碼就馬上在電腦上給他跑出來,不要直接拿源碼光碟來復制,不要把視頻看完半段了才開始敲代碼。這樣幾天後你會找到一些感覺,然後沒事就想些代碼來寫寫,比如想下怎樣把名字轉換成亂碼,然後再用另一個方法轉換回來,模擬步話機發送幾條消息什麼的。這樣下去不出3月你定牛逼,這時再把教材拿出來仔細看每一句話,掌握原理。
希望你早日學成,有苦惱一起討論一下。

閱讀全文

與java游戲編程開發教程相關的資料

熱點內容
linuxio阻塞 瀏覽:971
8腳單片機pic 瀏覽:819
如何看彩色塗鴉遮住的字安卓 瀏覽:686
擺渡機器人編程 瀏覽:652
軟程序員著裝 瀏覽:137
寶雞雲存儲伺服器 瀏覽:666
推薦超解壓游戲無廣告 瀏覽:632
大華伺服器怎麼添加門禁 瀏覽:782
戰地伺服器60hz什麼意思 瀏覽:758
成高級程序員學什麼 瀏覽:499
阿里雲接入備案後退掉伺服器 瀏覽:926
ne40e命令 瀏覽:83
安卓輸入法使用什麼編碼 瀏覽:182
手機如何開淘寶店步驟安卓手機 瀏覽:591
創業伺服器不屬於自己怎麼辦 瀏覽:537
mc小游戲手機版伺服器地址 瀏覽:420
土力學李廣信pdf 瀏覽:144
天融信防火牆命令行 瀏覽:214
qq安卓在線怎麼改 瀏覽:688
加密鑽台維修技巧 瀏覽:465