人生如夢遊戲間,RPG遊戲開源開發講座 JAVA篇 1 ——風雲初現
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
“本鵬”上接前文,繼續來進行Java RPG開發講座,上次我們談到了JFrame和JPanel合作進行介面開發,這次我們再結合例項繼續講解。
在談完Java中窗體和麵板的使用後,接下來就要進入正題了。
Java RPG遊戲開發中地圖的初步構建
檔案:Example1.Java
package org.loon.chair.example1;
import java.awt.Container;
import javax.swing.JFrame;
/**
* Example1中窗體,用於顯示地圖。
*
* @author chenpeng
*
* Loon Framework in Game
*
*/
public class Example1 extends JFrame {
public Example1() {
// 預設的窗體名稱
setTitle(
// 獲得我們自定義面板[地圖面板]的例項
MyPanel panel = new MyPanel();
Container contentPane = getContentPane();
contentPane.add(panel);
// 執行並構建窗體設定
pack();
}
public static void main(String[] args) {
Example1 e1 = new Example1();
// 設定允許窗體關閉操作
e1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 顯示窗體
e1.setVisible(true);
}
}
檔案:MyPanel.Java
package org.loon.chair.example1;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
/**
* Example1中自定義面板,用於描繪底層地圖。
*
* @author chenpeng
*
* Loon Framework in Game
*
*/
public class MyPanel extends JPanel{
//窗體的寬與高
private static final int WIDTH = 480;
private static final int HEIGHT = 480;
//設定背景方格預設行數
private static final int ROW = 15;
//設定背景方格預設列數
private static final int COL = 15;
//單個影象大小,我預設採用32x32圖形,可根據需要調整比例。
//當時,始終應和窗體大小比例協調;比如32x32的圖片,如何
//一行設定15個,那麼就是480,也就是本例子預設的窗體大小,
//當然,我們也可以根據ROW*CS,COl*CS在初始化時自動調整
//窗體大小,以後的例子中會用到類似情況。總之一句話,程式設計
//是[為目的而存在的],所有的方法,大家都可任意嘗試和使用。
private static final int CS = 32;
//設定地圖,通常在rpg型別遊戲開發中,以[二維陣列]物件為
//基礎進行地圖處理,用以描繪出X座標和Y座標。實際上,即令
//再華麗的RPG類遊戲,都是從這些簡單的X,Y座標開始的。
//PS:所謂[陣列],大家可以簡單的理解為即資料的集合,一維陣列
//僅包含X軸,而二維是由X,Y兩個軸組成的,X與Y的交織點,即為
//一條資料。
private int[][] map = {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,1,1,1,1,1,0,0,0,0,1},
{1,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
{1,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
{1,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
{1,0,0,0,0,1,1,0,1,1,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
//設定顯示影象物件
private Image floorImage;
private Image wallImage;
public MyPanel() {
//設定初始構造時面板大小
setPreferredSize(new Dimension(WIDTH, HEIGHT));
//於初始化時載入圖形
loadImage();
}
//描繪窗體,此處在預設JPanel基礎上構建底層地圖.
public void paintComponent(Graphics g) {
super.paintComponent(g);
//畫出地圖
drawMap(g);
}
/**
* 載入影象
*
*/
private void loadImage() {
//獲得當前類對應的相對位置image資料夾下的地板影象[以下影象可用任意素材代替]
ImageIcon icon = new ImageIcon(getClass().getResource("image/floor.gif"));
//將地板影象例項付與floorImage
floorImage = icon.getImage();
//獲得當前類對應的相對位置image資料夾下的牆體影象
icon = new ImageIcon(getClass().getResource("image/wall.gif"));
//將牆體影象例項付與wallImage
wallImage = icon.getImage();
}
private void drawMap(Graphics g) {
//在Java或任何遊戲開發中,演算法都是最重要的一步,本例盡使用
//簡單的雙層for迴圈進行地圖描繪,
for (int x = 0; x < ROW; x++) {
for (int j = 0; j < COL; j++) {
// switch作為java中的轉換器,用於執行和()中數值相等
// 的case操作。請注意,在case操作中如果不以break退出
// 執行;switch函式將持續運算到最後一個case為止。
switch (map[x][j]) {
case 0 : //map的標記為0時畫出地板
//在指定位置[描繪]出我們所載入的圖形,以下同
g.drawImage(floorImage, j * CS, x * CS, this);
break;
case 1 : //map的標記為1時畫出城牆
g.drawImage(wallImage, j * CS, x * CS, this);
break;
//我們可以依次類推出無數的背景組合,如定義椅子為2、寶座為3等
//很容易即可勾勒出一張背景地圖。
default: //當所有case值皆不匹配時,將執行此操作。
break;
}
}
}
}
}
執行效果如下:
怎麼樣?大家可以清晰地看到,用Java進行遊戲地圖搭建是一件很寫意的事情,不需要我們過多地做什麼,兩三下便有一張2D地圖成形了。
怎麼?空蕩蕩的地圖上沒有人氣?呵呵,是不是忘了“本鵬”上次的例子了?不要緊,我變~
我們略微調整一下MyPanel.Java檔案,新的程式碼如下:
package org.loon.chair.example1;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
/**
* Example1中自定義面板,用於描繪底層地圖。
*
* @author chenpeng
*
* Loon Framework in Game