桌面程序?還是在手機上?
B. 求java小游戲源代碼
[最佳答案] 連連看java源代碼 import javax.swing.*; import java.awt.*; import java.awt.event.*; pu... int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戲按鈕的位...
C. java小游戲編程
/**
* File: ControlPanel.java
* User:相思無償
* Date: 2004.12.3
* Describe: 俄羅斯方塊的 Java 實現
*/
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import java.awt.event.*;
/**
* 控制面板類,繼承自JPanel.
* 上邊安放預顯窗口、等級、得分、控制按鈕
* 主要用來控制游戲進程。
*/
class ControlPanel extends JPanel {
private JTextField
tfLevel = new JTextField("" + ErsBlocksGame.DEFAULT_LEVEL),
tfScore = new JTextField("0");
private JButton
btPlay = new JButton("Play"),
btPause = new JButton("Pause"),
btStop = new JButton("Stop"),
btTurnLevelUp = new JButton("Turn hard"),
btTurnLevelDown = new JButton("Turn easy");
private JPanel plTip = new JPanel(new BorderLayout());
private TipPanel plTipBlock = new TipPanel();
private JPanel plInfo = new JPanel(new GridLayout(4, 1));
private JPanel plButton = new JPanel(new GridLayout(5, 1));
private Timer timer;
private ErsBlocksGame game;
private Border border = new EtchedBorder(
EtchedBorder.RAISED, Color.white, new Color(148, 145, 140));
/**
* 控制面板類的構造函數
* @param game ErsBlocksGame, ErsBoxesGame類的一個實例引用,
* 方便直接控制ErsBoxesGame類的行為。
*/
public ControlPanel(final ErsBlocksGame game) {
setLayout(new GridLayout(3, 1, 0, 4));
this.game = game;
plTip.add(new JLabel("Next block"), BorderLayout.NORTH);
plTip.add(plTipBlock);
plTip.setBorder(border);
plInfo.add(new JLabel("Level"));
plInfo.add(tfLevel);
plInfo.add(new JLabel("Score"));
plInfo.add(tfScore);
plInfo.setBorder(border);
tfLevel.setEditable(false);
tfScore.setEditable(false);
plButton.add(btPlay);
plButton.add(btPause);
plButton.add(btStop);
plButton.add(btTurnLevelUp);
plButton.add(btTurnLevelDown);
plButton.setBorder(border);
add(plTip);
add(plInfo);
add(plButton);
addKeyListener(new ControlKeyListener());
btPlay.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
game.playGame();
}
});
btPause.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (btPause.getText().equals(new String("Pause"))) {
game.pauseGame();
} else {
game.resumeGame();
}
}
});
btStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
game.stopGame();
}
});
btTurnLevelUp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
try {
int level = Integer.parseInt(tfLevel.getText());
if (level < ErsBlocksGame.MAX_LEVEL)
tfLevel.setText("" + (level + 1));
} catch (NumberFormatException e) {
}
requestFocus();
}
});
btTurnLevelDown.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
try {
int level = Integer.parseInt(tfLevel.getText());
if (level > 1)
tfLevel.setText("" + (level - 1));
} catch (NumberFormatException e) {
}
requestFocus();
}
});
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent ce) {
plTipBlock.fanning();
}
});
timer = new Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent ae) {
tfScore.setText("" + game.getScore());
int scoreForLevelUpdate =
game.getScoreForLevelUpdate();
if (scoreForLevelUpdate >= ErsBlocksGame.PER_LEVEL_SCORE
&& scoreForLevelUpdate > 0)
game.levelUpdate();
}
});
timer.start();
}
/**
* 設置預顯窗口的樣式,
* @param style int,對應ErsBlock類的STYLES中的28個值
*/
public void setTipStyle(int style) {
plTipBlock.setStyle(style);
}
/**
* 取得用戶設置的游戲等級。
* @return int, 難度等級,1 - ErsBlocksGame.MAX_LEVEL
*/
public int getLevel() {
int level = 0;
try {
level = Integer.parseInt(tfLevel.getText());
} catch (NumberFormatException e) {
}
return level;
}
/**
* 讓用戶修改游戲難度等級。
* @param level 修改後的游戲難度等級
*/
public void setLevel(int level) {
if (level > 0 && level < 11) tfLevel.setText("" + level);
}
/**
* 設置"開始"按鈕的狀態。
*/
public void setPlayButtonEnable(boolean enable) {
btPlay.setEnabled(enable);
}
public void setPauseButtonLabel(boolean pause) {
btPause.setText(pause ? "Pause" : "Continue");
}
/**
* 重置控制面板
*/
public void reset() {
tfScore.setText("0");
plTipBlock.setStyle(0);
}
/**
* 重新計算TipPanel里的boxes[][]里的小框的大小
*/
public void fanning() {
plTipBlock.fanning();
}
/**
* 預顯窗口的實現細節類
*/
private class TipPanel extends JPanel {
private Color backColor = Color.darkGray, frontColor = Color.lightGray;
private ErsBox[][] boxes =
new ErsBox[ErsBlock.BOXES_ROWS][ErsBlock.BOXES_COLS];
private int style, boxWidth, boxHeight;
private boolean isTiled = false;
/**
* 預顯窗口類構造函數
*/
public TipPanel() {
for (int i = 0; i < boxes.length; i++) {
for (int j = 0; j < boxes[i].length; j++)
boxes[i][j] = new ErsBox(false);
}
}
/**
* 預顯窗口類構造函數
* @param backColor Color, 窗口的背景色
* @param frontColor Color, 窗口的前景色
*/
public TipPanel(Color backColor, Color frontColor) {
this();
this.backColor = backColor;
this.frontColor = frontColor;
}
/**
* 設置預顯窗口的方塊樣式
* @param style int,對應ErsBlock類的STYLES中的28個值
*/
public void setStyle(int style) {
this.style = style;
repaint();
}
/**
* 覆蓋JComponent類的函數,畫組件。
* @param g 圖形設備環境
*/
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (!isTiled) fanning();
int key = 0x8000;
for (int i = 0; i < boxes.length; i++) {
for (int j = 0; j < boxes[i].length; j++) {
Color color = (((key & style) != 0) ? frontColor : backColor);
g.setColor(color);
g.fill3DRect(j * boxWidth, i * boxHeight,
boxWidth, boxHeight, true);
key >>= 1;
}
}
}
/**
* 根據窗口的大小,自動調整方格的尺寸
*/
public void fanning() {
boxWidth = getSize().width / ErsBlock.BOXES_COLS;
boxHeight = getSize().height / ErsBlock.BOXES_ROWS;
isTiled = true;
}
}
private class ControlKeyListener extends KeyAdapter {
public void keyPressed(KeyEvent ke) {
if (!game.isPlaying()) return;
ErsBlock block = game.getCurBlock();
switch (ke.getKeyCode()) {
case KeyEvent.VK_DOWN:
block.moveDown();
break;
case KeyEvent.VK_LEFT:
block.moveLeft();
break;
case KeyEvent.VK_RIGHT:
block.moveRight();
break;
case KeyEvent.VK_UP:
block.turnNext();
break;
default:
break;
}
}
}
}
D. 怎樣運行java小游戲,我只有源代碼可是不知道怎麼運行
分情況看:
(1)如果你沒用非官方集成的開發環境的話,首先在你電腦上裝個JDK,然後設置下電腦環境變數,裡面有PATH和CLASSPATH這兩個參數,具體怎麼設置呢?就是把安裝目錄的地址拷貝到裡面就好了,略有不同這兩個參數的設置.安裝完成後,把源代碼文件的目錄記下,源代碼拷貝到記事本上,把後綴名改成".java";打開CMD窗口,先執行"javac 文件名.java"命令,在目錄下會生成一個".class"的文件,那是編譯生成的文件,如果順利通過編譯,說明源代碼沒錯誤,OK,你再執行"java 文件名.class"就執行程序了.
(2)如果你用的是Eclipse或者Jbuilder這類的集成開發環境的話,那太簡單了,導入源代碼的文件,點工具欄上的快捷圖標,是個平放著的三角形,就可以執行了
總之,你只要把JDK裝上,調試成功了,剩餘的就小意思,如果實在搞不定,把你代碼發過來,我給你生成".jar"文件好了,就像".exe"的可執行文件.呵呵,說了這么多,自己要多摸索下啊,我是學java的,歡迎交流,希望你能順利解決,編程要自己多摸索
E. 誰有Java 游戲編程開發教程這本書二人麻將游戲源代碼或這本書的電子版
基礎的要看java學習筆記,台灣陳信良寫的,他是sun的官方出題官,很好,特別適合初學的人看,有的基礎之後再看thinkinjava,那個沒有基礎看的糊塗
F. Java是什麼Java到底能幹嘛
Java是什麼?
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程 。
Java到底能幹什麼?
1、Java可以用來編寫網站
對於學生來說,最關心的是Java能做什麼,市場上招什麼工作跟Java有關。現在很多大型網站都用jsp寫的,JSP全名為JavaServerPages。
它是一種動態網頁技術,比如我們熟悉的163,一些政府網站都是採用JSP編寫的。所以學習Java的同學可以找編寫網站方面的工作,而且現在找這方面的崗位比較多。
2、Java可以做Android
Android是一種基於Linux的自由及開放源代碼的操作系統,其源代碼是Java。所以市場上見到的手機系統例如MIUI,阿狸雲,樂蛙等,都是修改源代碼再發行的。
Java做安卓不單單是指系統,還有APP.對於更多的開發人員來說,他們更多的時間是花在開發APP上面。
3、Java可以做游戲
或者你不知道,在以前諾基亞還很流行的時候,你玩的手機游戲有90%以上都是Java開發的。當然現在已經很少人再去開發了,都轉到安卓上去了。電腦上也有Java開發的游戲,最經典的是:《我的世界》(minecraft,簡稱MC)。
4、Java可以做軟體
一般編程語言都可以做軟體的,Java也不例外,例如Eclipse,MyEclipse等知名Java開發工具。有關開發軟體組件,可以了解JavaSwing編程或者awt相關知識。
5、其他
除了以上所提的Java語言應用范圍之外,家裡的洗衣機、微波爐等家電都有可能是通過Java語言程序控制的呢。最重要的是要找到自己的一個興趣所在,專攻一個領域,堅持下去才會做出成績。
希望以上的回答能幫到大家!
G. java小游戲源代碼
介紹這個給你把...我空間還有很多..
http://hi..com/282919088
importjava.applet.Applet;
importjava.applet.AudioClip;
importjava.awt.Dimension;
importjava.awt.Font;
importjava.awt.Toolkit;
importjavax.sound.sampled.AudioFileFormat;
importjavax.sound.sampled.AudioSystem;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjava.awt.Rectangle;
importjavax.swing.BorderFactory;
importjavax.swing.JButton;
importjavax.swing.JOptionPane;
importjavax.swing.JSlider;
importjavax.swing.JLabel;
importjavax.swing.SwingUtilities;
importjavax.swing.UIManager;
importjavax.swing.event.ChangeEvent;
importjavax.swing.event.ChangeListener;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.KeyAdapter;
importjava.awt.event.KeyEvent;
importjava.io.File;
importjava.util.Vector;
{
JPanelcontentPane;
JPaneljPanel1=newJPanel();
JButtonjButton1=newJButton();
JSliderjSlider1=newJSlider();
JLabeljLabel1=newJLabel();
JButtonjButton2=newJButton();
JLabeljLabel2=newJLabel();
intcount=1,rapidity=80;//count當前進行的個數,rapidity游標的位置
intzhengque=0,cuowu=0;
intrush[]={10,20,30};//游戲每關的個數可以自由添加.列{10,20,30,40,50}
intrush_count=0;//記錄關數
charlist[]={'A','B','C','D','E','F','G','H','I','J','K','L',
'M','N','O','P','Q','R','S','T','U','V','W','X','Y',
'Z','1','2','3','4','5','6','7','8','9'};//隨機出現的數字可以自由添加
Vectornumber=newVector();
Stringpaian="true";
AudioClipMusci_anjian,Music_shi,Music_chenggong;
publicFrame(){
try{
setDefaultCloseOperation(EXIT_ON_CLOSE);
//-----------------聲音文件---------------------
Musci_anjian=Applet.newAudioClip(newFile("sounds//anjian.wav")
.toURL());
Music_shi=Applet.newAudioClip(newFile("sounds//shi.wav")
.toURL());
Music_chenggong=Applet.newAudioClip(newFile(
"sounds//chenggong.wav").toURL());
//---------------------------------------
jbInit();
}catch(Exceptionexception){
exception.printStackTrace();
}
}
/**
*Componentinitialization.
*
*@throwsjava.lang.Exception
*/
privatevoidjbInit()throwsException{
contentPane=(JPanel)getContentPane();
contentPane.setLayout(null);
setSize(newDimension(588,530));
setTitle("FrameTitle");
jPanel1.setBorder(BorderFactory.createEtchedBorder());
jPanel1.setBounds(newRectangle(4,4,573,419));
jPanel1.setLayout(null);
jButton1.setBounds(newRectangle(277,442,89,31));
jButton1.setText("開始");
jButton1.addActionListener(newFrame1_jButton1_actionAdapter(this));
jSlider1.setBounds(newRectangle(83,448,164,21));
jSlider1.setMaximum(100);
jSlider1.setMinimum(1);
jSlider1.setValue(50);
jLabel1.setText("速度");
jLabel1.setBounds(newRectangle(35,451,39,18));
jButton2.setBounds(newRectangle(408,442,89,31));
jButton2.setText("結束");
jButton2.addActionListener(newFrame1_jButton2_actionAdapter(this));
jLabel2.setText("第一關:100個");
jLabel2.setBounds(newRectangle(414,473,171,21));
contentPane.add(jPanel1);
contentPane.add(jButton2);
contentPane.add(jButton1);
contentPane.add(jSlider1);
contentPane.add(jLabel1);
contentPane.add(jLabel2);
this.addKeyListener(newMyListener());
jButton1.addKeyListener(newMyListener());
jSlider1.addKeyListener(newMyListener());
jSlider1.addChangeListener(newChangeListener(){
publicvoidstateChanged(ChangeEvente){
rapidity=jSlider1.getValue();
}
});
}
publicvoidrun(){
number.clear();
zhengque=0;
cuowu=0;
paian="true";
while(count<=rush[rush_count]){
try{
Threadt=newThread(newTthread());
t.start();
count+=1;
Thread.sleep(1000+(int)(Math.random()*2000));//生產下組停頓時間
//最快1快.最慢2秒
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
while(true){//等待最後一個字元消失
if(number.size()==0){
break;
}
}
if(zhengque==0){//為了以後相除..如果全部正確或者錯誤就會出現錯誤.所以..
zhengque=1;
}
if(cuowu==0){
cuowu=1;
}
if(paian.equals("true")){//判斷是否是自然結束
if(zhengque/cuowu>=2){
JOptionPane.showMessageDialog(null,"恭喜你過關了");
rush_count+=1;//自動加1關
if(rush_count<rush.length){
if(rapidity>10){//當速度大於10的時候在-5提加速度.怕速度太快
rapidity-=5;//速度自動減10毫秒
jSlider1.setValue(rapidity);//選擇位置
}
Threadt=newThread(this);
t.start();
}else{
JOptionPane.showMessageDialog(null,"牛B...你通關了..");
rush_count=0;
count=0;
}
}else{
JOptionPane.showMessageDialog(null,"請再接再勵");
rush_count=0;
count=0;
}
}else{
rush_count=0;
count=0;
}
}
publicvoidjButton1_actionPerformed(ActionEvente){
Threadt=newThread(this);
t.start();
}
publicvoidjButton2_actionPerformed(ActionEvente){
count=rush[rush_count]+1;
paian="flase";
}
{
publicvoidrun(){
booleanfo=true;
intY=0,X=0;
JLabelshow=newJLabel();
show.setFont(newjava.awt.Font("宋體",Font.PLAIN,33));
jPanel1.add(show);
X=10+(int)(Math.random()*400);
Stringparameter=list[(int)(Math.random()*list.length)]+"";
Beanbean=newBean();
bean.setParameter(parameter);
bean.setShow(show);
number.add(bean);
show.setText(parameter);
while(fo){
//---------------------數字下移--------------------
show.setBounds(newRectangle(X,Y+=2,33,33));
try{
Thread.sleep(rapidity);
}catch(InterruptedExceptione){
e.printStackTrace();
}
if(Y>=419){
fo=false;
for(inti=number.size()-1;i>=0;i--){
Beanbn=((Bean)number.get(i));
if(parameter.equalsIgnoreCase(bn.getParameter())){
cuowu+=1;
jLabel2.setText("正確:"+zhengque+"個,錯誤:"+cuowu
+"個");
number.removeElementAt(i);
Music_shi.play();
break;
}
}
}
}
}
}
{
publicvoidkeyPressed(KeyEvente){
Stringuu=e.getKeyChar()+"";
for(inti=0;i<number.size();i++){
Beanbean=((Bean)number.get(i));
if(uu.equalsIgnoreCase(bean.getParameter())){
zhengque+=1;
number.removeElementAt(i);
bean.getShow().setVisible(false);
jLabel2.setText("正確:"+zhengque+"個,錯誤:"+cuowu+"個");
Music_chenggong.play();
break;
}
}
Musci_anjian.play();
}
}
publicstaticvoidmain(String[]args){
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exceptionexception){
exception.printStackTrace();
}
Frameframe=newFrame();
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionframeSize=frame.getSize();
if(frameSize.height>screenSize.height){
frameSize.height=screenSize.height;
}
if(frameSize.width>screenSize.width){
frameSize.width=screenSize.width;
}
frame.setLocation((screenSize.width-frameSize.width)/2,
(screenSize.height-frameSize.height)/2);
frame.setVisible(true);
}
}
classFrame1_jButton2_{
privateFrameadaptee;
Frame1_jButton2_actionAdapter(Frameadaptee){
this.adaptee=adaptee;
}
publicvoidactionPerformed(ActionEvente){
adaptee.jButton2_actionPerformed(e);
}
}
classFrame1_jButton1_{
privateFrameadaptee;
Frame1_jButton1_actionAdapter(Frameadaptee){
this.adaptee=adaptee;
}
publicvoidactionPerformed(ActionEvente){
adaptee.jButton1_actionPerformed(e);
}
}
classBean{
Stringparameter=null;
JLabelshow=null;
publicJLabelgetShow(){
returnshow;
}
publicvoidsetShow(JLabelshow){
this.show=show;
}
publicStringgetParameter(){
returnparameter;
}
publicvoidsetParameter(Stringparameter){
this.parameter=parameter;
}
}
H. 求一個簡單又有趣的JAVA小游戲代碼
具體如下:
連連看的小源碼
package Lianliankan;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{
JFrame mainFrame; //主面板
Container thisContainer;
JPanel centerPanel,southPanel,northPanel; //子面板
JButton diamondsButton[][] = new JButton[6][5];//游戲按鈕數組
JButton exitButton,resetButton,newlyButton; //退出,重列,重新開始按鈕
JLabel fractionLable=new JLabel("0"); //分數標簽
JButton firstButton,secondButton; //
分別記錄兩次被選中的按鈕
int grid[][] = new int[8][7];//儲存游戲按鈕位置
static boolean pressInformation=false; //判斷是否有按鈕被選中
int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戲按鈕的位置坐標
int i,j,k,n;//消除方法控制
代碼(code)是程序員用開發工具所支持的語言寫出來的源文件,是一組由字元、符號或信號碼元以離散形式表示信息的明確的規則體系。
對於字元和Unicode數據的位模式的定義,此模式代表特定字母、數字或符號(例如 0x20 代表一個空格,而 0x74 代表字元「t」)。一些數據類型每個字元使用一個位元組;每個位元組可以具有 256 個不同的位模式中的一個模式。
在計算機中,字元由不同的位模式(ON 或 OFF)表示。每個位元組有 8 位,這 8 位可以有 256 種不同的 ON 和 OFF 組合模式。對於使用 1 個位元組存儲每個字元的程序,通過給每個位模式指派字元可表示最多 256 個不同的字元。2 個位元組有 16 位,這 16 位可以有 65,536 種唯一的 ON 和 OFF 組合模式。使用 2 個位元組表示每個字元的程序可表示最多 65,536 個字元。
單位元組代碼頁是字元定義,這些字元映射到每個位元組可能有的 256 種位模式中的每一種。代碼頁定義大小寫字元、數字、符號以及 !、@、#、% 等特殊字元的位模式。每種歐洲語言(如德語和西班牙語)都有各自的單位元組代碼頁。
雖然用於表示 A 到 Z 拉丁字母表字元的位模式在所有的代碼頁中都相同,但用於表示重音字元(如"é"和"á")的位模式在不同的代碼頁中卻不同。如果在運行不同代碼頁的計算機間交換數據,必須將所有字元數據由發送計算機的代碼頁轉換為接收計算機的代碼頁。如果源數據中的擴展字元在接收計算機的代碼頁中未定義,那麼數據將丟失。
如果某個資料庫為來自許多不同國家的客戶端提供服務,則很難為該資料庫選擇這樣一種代碼頁,使其包括所有客戶端計算機所需的全部擴展字元。而且,在代碼頁間不停地轉換需要花費大量的處理時間。
I. java製作馬里奧小游戲源代碼
先說明編程語言,我是用QB做「超級瑪麗」游戲,VB做的地圖編輯器。確定游戲...試試下面這個小程序,是不是個拋物線? SCREEN 12 dim x,y,ty,zl as ...
J. Java游戲高級編程的內容簡介
在第1章「配置開發環境」中,我向讀者介紹了將要在整本書中使用的代碼庫。描述了這個庫的設計,並給出了編譯示例游戲的說明。可能會在游戲開發環境中使用的一些附加代碼、圖形和音頻文件,也在本章確定了下來,還介紹了軟體開發的一些流行工具。以模板的形式給出了一個演示Java游戲編程基礎知識的游戲示例。
在第2章「部署框架」中,我們關注的重點是在可以安裝在多種不同類型的平台上的一個框架中部署游戲。在動畫線程管理技術的相關內容中,介紹了一個被廣泛使用的框架介面以及applet生命周期。在對適合於游戲的不同發布而進行不同部署的選項進行了一個簡要的回顧以後,給出了允許游戲部署在不同開發環境中而不需要任何修改的一個抽象層的源代碼示例。
在第3章「Swing動畫」中,介紹了一個基於Swing的動畫庫,這個動畫庫會在整本書中使用。這一章主要考慮的問題是動畫的性能和靈活性。在介紹核心動畫引擎類的源代碼時簡單介紹了優化權衡。
在第4章「動畫庫」中,介紹了通用動畫任務的一個類集合。這些類提供了很多功能,例如場景管理和Sprite實現。它們也用來介紹怎樣開發與核心動畫引擎類互操作的游戲特定代碼。
在第5章「高級圖形技術」中,介紹了高級圖形技術,包括硬體加速圖形、多緩沖和全屏獨占模式。給出了使這些技術的使用變得更加方便的可重用類和使用這些可重用類的示例游戲。對其中的每一個技術,都介紹了關於它們使用方法的一些限制。
在第6章「持久數據」中,對在各種部署框架中載入和保存游戲數據的機制進行了對比。在這個過程中還介紹了可以用於大多數游戲編程的可重用數據持久性的類庫。對更加高級的持久性需求的其他選擇也進行了考慮。
在第7章「游戲體系結構」中,介紹了適合於Java游戲開發的面向對象的軟體體系結構的優點。使用這種體系結構的一個示例游戲是作為新游戲開發模板進行介紹的。本章還簡單介紹了一下數據驅動的設計。
在第8章「A*演算法」中,介紹了現在在游戲行業中最流行和最常用的一個人工智慧(AI)演算法的實現。本章還介紹了使用A*演算法繞過障礙物尋找路徑的示例。
在第9章「HTTP隧道技術」中,介紹一個可以在大部分Java游戲部署環境里常見的安全限制以內進行操作的一個聯網庫。本章還給出了一個示例,在這個示例中,數據在伺服器和客戶機之間進行傳遞。
在第10章「HTTP輪詢機制」中,將聯網庫擴展以支持在線多玩家游戲。使用輪詢來同步客戶機和伺服器上的游戲狀態。在由單玩家游戲向多玩家聯網游戲的轉換中,介紹了我所推薦的軟體體系結構的靈活性。
在第11章「HTTP Pulling機制」中,事件驅動的消息是作為輪詢的另一個選擇而推薦使用的。使用在前面兩章中介紹的這些類,演示了這是怎樣在無符號applet的安全限制以內實現的。使用這些技術進行進一步開發的一些建議已經超出了本書的范圍,這里只進行簡單的介紹。
本書合作站點
本書應該保持其「高級性」。為此,我專門為這本書建立了一個Web站點。從這個站點上,您能夠訂閱與本書相關的電子郵件列表,包括補充的指南和勘誤表。您將能夠測試和運行本書所介紹的示例游戲,並下載開放源代碼庫和用來創建這些游戲的公共領域的多媒體文件。針對老師,我已經在Creative Commons Attribution License下發布了我在講授游戲開發課程中使用的課程提綱、幻燈片和布置給學生的作業。我也提供了我的聯系方式,這樣您可以將您的建議和意見反饋給我,以便我以後進行更正。
在開始閱讀第1章以前,請先訪問網站,並訂閱Advanced Java Game Programming通知郵件列表。
IV
Java游戲高級編程