1. 程式人生 > >人生如夢遊戲間,RPG遊戲開源開發講座 JAVA篇 1 ——風雲初現

人生如夢遊戲間,RPG遊戲開源開發講座 JAVA篇 1 ——風雲初現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

    “本鵬”上接前文,繼續來進行Java RPG開發講座,上次我們談到了JFrameJPanel合作進行介面開發,這次我們再結合例項繼續講解。

 

     在談完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(

"Example1[Java遊戲中地圖的描繪]");

 

       // 獲得我們自定義面板[地圖面板]的例項

       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兩個軸組成的,XY的交織點,即為

    //一條資料。

    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

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述