❶ 新手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自帶的圖形界面框架
Awt 適合內存較小, 配置較低的嵌入式系統等,組件較少, 性能好,資源消耗低.
Swing 適合PC等, 組件較豐富, 內存佔用較大, 但是跨平台性優越
JavaFX 這個是比較強大的框架了,組件比Swing更豐富,比如添加了 日期選擇組件, WebView組件, 還支持3D和 動畫. 並且多多媒體支持良好. 但是相關資料比Swing等少
既然學過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 集合和 Java IO 內部的 API。你需要熟悉這些 API 提供的各種類和介面,並利用它們來創建程序。需要注意的是,你應該查找已經存在的 API 和方法來實現功能,而不是自己實現這些邏輯。你的任務是熟悉這些 API,因此你只能夠在這些已有的 API 中尋求解決方案。
通過這一步的學習,面對任何 Java 面試你都能夠信心滿滿,當你討論 Java 相關的話題時也能夠充滿自信。你需要至少編寫一個 Java 桌面或者 GUI 應用程序,比如計算器,然後再編寫一個 Web 應用程序,比如醫院管理程序。在前面的學習中,你已經掌握了最基本的 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月你定牛逼,這時再把教材拿出來仔細看每一句話,掌握原理。
希望你早日學成,有苦惱一起討論一下。