?? gamemap.java
字號:
package org.loon.chair.example5;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
/**
*
* @author chenpeng
* @email ceponline@yahoo.com.cn
*
* Loon Framework in Game
*
*/
public class GameMap implements Common{
//設(shè)定背景方格默認行數(shù)
private static final int ROW = 15;
//設(shè)定背景方格默認列數(shù)
private static final int COL = 15;
//設(shè)定地圖,通常在rpg類型游戲開發(fā)中,以[二維數(shù)組]對象為
//基礎(chǔ)進行地圖處理,用以描繪出X坐標(biāo)和Y坐標(biāo)。實際上,即令
//再華麗的RPG類游戲,都是從這些簡單的X,Y坐標(biāo)開始的。
//PS:所謂[數(shù)組],大家可以簡單的理解為即數(shù)據(jù)的集合,一維數(shù)組
//僅包含X軸,而二維是由X,Y兩個軸組成的,X與Y的交織點,即為
//一條數(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}};
//設(shè)定顯示圖像對象
private Image floorImage;
private Image wallImage;
// 游戲所使用面板
private MyPanel panel;
public GameMap(MyPanel panel) {
// 初始化圖像
loadImage();
}
public void draw(Graphics g) {
//在Java或任何游戲開發(fā)中,算法都是最重要的一步,本例盡使用
//簡單的雙層for循環(huán)進行地圖描繪,
for (int x = 0; x < ROW; x++) {
for (int j = 0; j < COL; j++) {
// switch作為java中的轉(zhuǎn)換器,用于執(zhí)行和()中數(shù)值相等
// 的case操作。請注意,在case操作中如果不以break退出
// 執(zhí)行;switch函數(shù)將持續(xù)運算到最后一個case為止。
switch (map[x][j]) {
case 0 : //map的標(biāo)記為0時畫出地板
//在指定位置[描繪]出我們所加載的圖形,以下同
//在Example5開始,所有this由特定面板對象panel取代
g.drawImage(floorImage, j * CS, x * CS, panel);
break;
case 1 : //map的標(biāo)記為1時畫出城墻
g.drawImage(wallImage, j * CS, x * CS, panel);
break;
//我們可以依次類推出無數(shù)的背景組合,如定義椅子為2、寶座為3等
//很容易即可勾勒出一張背景地圖。
default: //當(dāng)所有case值皆不匹配時,將執(zhí)行此操作。
break;
}
}
}
}
/**
* 用于判定是否允許移動的發(fā)生,被move()函數(shù)調(diào)用,在Example5開始變更為公有
* @param x
* @param y
* @return
*/
public boolean isAllow(int x, int y) {
// 以(x,y)交點進行數(shù)據(jù)判定,我們都知道,
// 在本例中我僅以0作為地板的參數(shù),1作為
// 墻的參數(shù),由于我們的主角是[人類],而
// 不是[幽靈],所以當(dāng)他要[撞墻]時,我們
// 當(dāng)然不會允許,至少,是我講到劇情的觸發(fā)
// 以前……
if (map[y][x] == 1) {
// 不允許移動時,返回[假]
return false;
}
// 允許移動時時,返回[真]
return true;
}
private void loadImage() {
ImageIcon icon = new ImageIcon(getClass().getResource("image/floor.gif"));
floorImage = icon.getImage();
icon = new ImageIcon(getClass().getResource("image/wall.gif"));
wallImage = icon.getImage();
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -