<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Java究竟怎么玩?

      天地程序已定棋,人間大數(shù)待變局

        博客園  :: 首頁  :: 新隨筆  :: 聯(lián)系 :: 訂閱 訂閱  :: 管理

          “本鵬”上接前文,繼續(xù)來進行Java RPG開發(fā)講座,上次我們談到了JFrameJPanel合作進行界面開發(fā),這次我們再結合實例繼續(xù)講解。

       

           在談完Java中窗體和面板的使用后,接下來就要進入正題了。

       

          Java RPG游戲開發(fā)中地圖的初步構建

         

      文件: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);

       

             // 執(zhí)行并構建窗體設定

             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;

       

          //設定背景方格默認行數(shù)

          private static final int ROW = 15;

          //設定背景方格默認列數(shù)

          private static final int COL = 15;

         

          //單個圖像大小,我默認采用32x32圖形,可根據(jù)需要調(diào)整比例。

          //當時,始終應和窗體大小比例協(xié)調(diào);比如32x32的圖片,如何

          //一行設置15個,那么就是480,也就是本例子默認的窗體大小,

          //當然,我們也可以根據(jù)ROW*CS,COl*CS在初始化時自動調(diào)整

          //窗體大小,以后的例子中會用到類似情況。總之一句話,編程

          //[為目的而存在的],所有的方法,大家都可任意嘗試和使用。

          private static final int CS = 32;

       

          //設定地圖,通常在rpg類型游戲開發(fā)中,以[二維數(shù)組]對象為

          //基礎進行地圖處理,用以描繪出X坐標和Y坐標。實際上,即令

          //再華麗的RPG類游戲,都是從這些簡單的X,Y坐標開始的。

          //PS:所謂[數(shù)組],大家可以簡單的理解為即數(shù)據(jù)的集合,一維數(shù)組

          //僅包含X軸,而二維是由X,Y兩個軸組成的,XY的交織點,即為

          //一條數(shù)據(jù)。

          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或任何游戲開發(fā)中,算法都是最重要的一步,本例盡使用

          //簡單的雙層for循環(huán)進行地圖描繪,

              for (int x = 0; x < ROW; x++) {

                  for (int j = 0; j < COL; j++) {

                   

                      // switch作為java中的轉換器,用于執(zhí)行和()中數(shù)值相等

                    // case操作。請注意,在case操作中如果不以break退出

                    // 執(zhí)行;switch函數(shù)將持續(xù)運算到最后一個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;

                           //我們可以依次類推出無數(shù)的背景組合,如定義椅子為2、寶座為3

                           //很容易即可勾勒出一張背景地圖。  

                   

                          default: //當所有case值皆不匹配時,將執(zhí)行此操作。

                             break;

                      }

                  }

              }

          }

      }

       

       

       

      運行效果如下:

       

      怎么樣?大家可以清晰地看到,用Java進行游戲地圖搭建是一件很寫意的事情,不需要我們過多地做什么,兩三下便有一張2D地圖成形了。

       

      怎么?空蕩蕩的地圖上沒有人氣?呵呵,是不是忘了“本鵬”上次的例子了?不要緊,我變~

      我們略微調(diào)整一下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;

       

          //設定背景方格默認行數(shù)

          private static final int ROW = 15;

          //設定背景方格默認列數(shù)

          private static final int COL = 15;

         

          //單個圖像大小,我默認采用32x32圖形,可根據(jù)需要調(diào)整比例。

          //當時,始終應和窗體大小比例協(xié)調(diào);比如32x32的圖片,如何

          //一行設置15個,那么就是480,也就是本例子默認的窗體大小,

          //當然,我們也可以根據(jù)ROW*CS,COl*CS在初始化時自動調(diào)整

          //窗體大小,以后的例子中會用到類似情況。總之一句話,編程

          //[為目的而存在的],所有的方法,大家都可任意嘗試和使用。

          private static final int CS = 32;

       

          //設定地圖,通常在rpg類型游戲開發(fā)中,以[二維數(shù)組]對象為

          //基礎進行地圖處理,用以描繪出X坐標和Y坐標。實際上,即令

          //再華麗的RPG類游戲,都是從這些簡單的X,Y坐標開始的。

          //PS:所謂[數(shù)組],大家可以簡單的理解為即數(shù)據(jù)的集合,一維數(shù)組

          //僅包含X軸,而二維是由X,Y兩個軸組成的,XY的交織點,即為

          //一條數(shù)據(jù)。

          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;

          //新增了一個角色

          private Image roleImage;

          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();

               //導入個[英雄]來當主角吧~

              icon = new ImageIcon(getClass().getResource("image/hero.gif"));

              roleImage = icon.getImage();

          }

         

          private void drawMap(Graphics g) {

          //Java或任何游戲開發(fā)中,算法都是最重要的一步,本例盡使用

          //簡單的雙層for循環(huán)進行地圖描繪。

              for (int x = 0; x < ROW; x++) {

                  for (int j = 0; j < COL; j++) {

                   

                      // switch作為java中的轉換器,用于執(zhí)行和()中數(shù)值相等

                    // case操作。請注意,在case操作中如果不以break退出

                    // 執(zhí)行;switch函數(shù)將持續(xù)運算到最后一個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;

                           //我們可以依次類推出無數(shù)的背景組合,如定義椅子為2、寶座為3

                           //很容易即可勾勒出一張背景地圖。  

                   

                          default: //當所有case值皆不匹配時,將執(zhí)行此操作。

                             break;

                      }

                  }

              }

              //我加上這么一句,設置上[英雄]角色的位置;請注意,這個位置原來有塊[地板]的。

              g.drawImage(roleImage, 240, 240, this);

          }

      }

       

       

       

       

       

       

       

      效果如下圖:

       

       

      看到了嗎?Java不但加載了我們的角色圖像,[覆蓋]在我們指定的位置上,并且地板還在,沒有被覆蓋掉,Java自動拼合了兩張圖片。

      哎,[英雄]出現(xiàn),僅[浪費]我們一行代碼而已,難怪 [英雄]不值錢了……

       

      看吧,Java開發(fā)游戲很難嗎?我認為比Delphi甚至RMXP還要簡單呢~ ^_^ 。好了,今天就到這里,“本鵬”繼續(xù)上班工作(|||……似乎有經(jīng)理在身后的不詳預感……),下次,我會讓[英雄]動起來哦~

       
      posted on 2007-06-22 15:49  cping  閱讀(682)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧美丰满熟妇性xxxx| 色婷婷综合久久久久中文一区二区| 国产va免费精品观看精品| 妇女性内射冈站hdwww000| 美女内射福利大全在线看| 广南县| 国产成人高清精品亚洲一区 | 人妻无码久久久久久久久久久| 婷婷国产成人精品视频| 少妇尿尿一区二区在线免费| 国产成人无码免费视频在线| 国99久9在线 | 免费| 国产精品亚洲二区亚瑟| 国产男女黄视频在线观看| 欧美啪啪网| 色橹橹欧美在线观看视频高清 | 国产一区二区三区色噜噜| 精品一区二区三区在线播放视频 | 免费观看全黄做爰大片| 日韩精品亚洲专在线电影| 亚洲免费观看视频| 精品人妻午夜一区二区三区四区| 国产av不卡一区二区| 男女猛烈激情xx00免费视频| 伊人成人在线视频免费| 欧美和黑人xxxx猛交视频| 天堂网av一区二区三区| 国产精品人成视频免费国产| 久热这里只有精品12| 最新国产精品拍自在线观看| 国产乱子影视频上线免费观看| 亚洲精品色一区二区三区| 久久婷婷综合色丁香五月| 激情综合网激情国产av| 午夜天堂精品久久久久| 人妻另类 专区 欧美 制服| 亚洲综合在线日韩av| 无码国产精品一区二区av| 亚洲国产成人综合自在线| 色哟哟网站在线观看| 国产精品免费无遮挡无码永久视频|