?? controlcenter.java
字號:
package pushbook.core;
import java.util.Vector;
import java.util.Hashtable;
import java.awt.*;
import javax.swing.*;
import pushbook.*;
import java.awt.image.ImageObserver;
/**
* <p>Title: 推箱子</p>
* <p>Description: 控制中心,控制游戲元素的移動</p>
* <p>Copyright: 無版權</p>
* <p>Company: 吉林省前郭爾羅斯蒙古族自治縣第五高級中學</p>
* @author 鄭雪
* @version 1.0
*/
public class ControlCenter
{
//窗口標題
public String gameTitle = "";
//背景音樂
public String gameMusic = "";
//過關提示
public String gameCelebrate = "";
//游戲元素表
public Vector gameElements = null;
//目的地元素列表
public Vector destinationElements = null;
//游戲元素模板列表
public Hashtable gameTemplet = null;
//關卡序列
public Vector gameSequence = null;
//數字圖片數組
public Vector numberImage = null;
//積分區圖片
public Image stepsImage = null;
//結束圖片
public Image endImage = null;
//地圖的寬度和高度
public int mapWidth = 0;
public int mapHeight = 0;
//有圖片元素個數
public int haveImageElement = 0;
//活動元素個數
public int activeElement = 0;
//當前關編號
public int levelIndex = 0;
//步行計數器
public int stepConter = 0;
//總步數
public int stepSum = 0;
//游戲結束
public boolean gameover = false;
/**
* 默認構造函數
*/
public ControlCenter()
{
numberImage = new Vector();
gameElements = new Vector();
gameTemplet = new Hashtable();
destinationElements = new Vector();
gameSequence = new Vector();
haveImageElement = 0;
activeElement = 0;
LevelManager lm = new LevelManager();
ConfigManager cm = new ConfigManager();
gameSequence = cm.getSequence();
levelIndex = 0;
lm.loadLevelData(this,(String)gameSequence.get(levelIndex));
MidiPlayer.getInstance(gameMusic).start();
}
/**
* 根據參數指定的xml文件建立新一關的游戲環境
* @param xmlfile String
*/
public boolean jumpLevel(int index)
{
if(index < 0 || index >= gameSequence.size()){gameover = true; return false;}
gameElements = new Vector();
destinationElements = new Vector();
gameTemplet = new Hashtable();
haveImageElement = 0;
activeElement = 0;
LevelManager lm = new LevelManager();
lm.loadLevelData(this,(String)gameSequence.get(index));
MidiPlayer.getInstance(null).changeFile(gameMusic);
gameover = false;
return true;
}
/**
* 直接進入下一關
*/
public void nextLevel()
{
if(levelIndex+1 >= gameSequence.size()){gameover = true; return;}
levelIndex ++;
stepSum += stepConter;
stepConter = 0;
jumpLevel(levelIndex);
}
/**
* 直接進入上一關
*/
public void privLevel()
{
if(levelIndex-1 < 0) return;
levelIndex --;
stepSum += stepConter;
stepConter = 0;
jumpLevel(levelIndex);
gameover = false;
}
/**
* 判斷能否過關
* @return boolean
*/
public boolean canPass()
{
boolean rev = true;
GameElement temp = null;
GameElement tempDes = null;
for(int i=0;i<destinationElements.size();i++)
{
tempDes = (GameElement)destinationElements.get(i);
temp = getElement(tempDes.x,tempDes.y);
if(temp == null || !temp.canMove || temp.canActive())
{
rev = false;
}
}
return rev;
}
/**
* 裝入資源
* @param g Graphics
*/
public void loadResource(Frame mainframe)
{
GameElement temp = null;
for (int i = 0; i < gameElements.size(); i++)
{
temp = (GameElement) gameElements.get(i);
if(temp.img != null)
{
temp.trueimg = mainframe.getToolkit().createImage(getClass().getResource(temp.img));
}
}
for(int i=0;i<10;i++)
{
numberImage.add(mainframe.getToolkit().createImage(getClass().getResource("/resource/"+i+".jpg")));
}
stepsImage = mainframe.getToolkit().createImage(getClass().getResource("/resource/steps.jpg"));
endImage = mainframe.getToolkit().createImage(getClass().getResource("/resource/end.jpg"));
}
/**
* 將全部對象的位置入棧
*/
public void pushAllStep()
{
for(int i=0;i<gameElements.size();i++)
{
GameElement temp = null;
temp = (GameElement)gameElements.get(i);
if(temp.canMove()) temp.stepPushStack();
}
}
/**
* 回退全部對象
*/
public void popAllStep()
{
for(int i=0;i<gameElements.size();i++)
{
GameElement temp = null;
temp = (GameElement)gameElements.get(i);
if(temp.canMove()) temp.breakStep();
}
}
/**
* 處理鍵盤事件
* @param keycode int 鍵盤鍵值
* @return boolean 是否影響畫面了
*/
public boolean pressKey(int keycode)
{
boolean rev = false;
GameElement temp = null;
if(keycode != Invariable.codeBareak) pushAllStep();
for(int i=0;i<gameElements.size();i++)
{
temp = (GameElement)gameElements.get(i);
if(temp.canMove() && temp.canActive())
{
if (keycode == Invariable.codeUp)
{
if (warmupMoveUp(temp)) rev = temp.moveUp();
if (rev){ stepConter++;}
}
if (keycode == Invariable.codeDown)
{
if (warmupMoveDown(temp)) rev = temp.moveDown();
if (rev){ stepConter++;}
}
if (keycode == Invariable.codeLeft)
{
if (warmupMoveLeft(temp)) rev = temp.moveLeft();
if (rev){ stepConter++;}
}
if (keycode == Invariable.codeRight)
{
if (warmupMoveRight(temp)) rev = temp.moveRight();
if (rev){ stepConter++;}
}
if (keycode == Invariable.codeBareak)
{
for(int j=0;j<gameElements.size();j++)
{
((GameElement)gameElements.get(j)).breakStep();
}
if(stepConter > 0) stepConter--;
rev = true;
}
}
}
if(rev == false && keycode != Invariable.codeBareak)
this.popAllStep();
return rev;
}
/**
* 取得指定坐標的游戲元素,如果指定坐標上有多個游戲元素則取得不可覆蓋的那個元素
* @param x int 坐標X
* @param y int 坐標Y
* @return GameElement 取得的元素,未取得元素時則返回null
*/
public GameElement getElement(int x,int y)
{
GameElement rev = null;
GameElement temp = null;
for(int i=0;i<gameElements.size();i++)
{
temp = (GameElement)gameElements.get(i);
if(temp.x == x && temp.y == y)
{
rev = temp;
//如果取得的元素是不能覆蓋的則直接將其返回,否則要保留結果繼續判斷
if(!temp.canOvercast()) return temp;
}
}
return rev;
}
/**
* 準備將指定游戲元素向上移動,將移動他相關的元素
* @param ge GameElement 指定的游戲元素
* @return boolean 如果指定元素不能移動則返回false
*/
public boolean warmupMoveUp(GameElement ge)
{
boolean rev = false;
GameElement temp = getElement(ge.x,ge.y-Invariable.unitSize);
if(temp != null)
{
if (temp.canOvercast())return true;
else if (!temp.canMove())return false;
else
{
GameElement temp1 = getElement(temp.x, temp.y - Invariable.unitSize);
if (temp1.canOvercast())
{
temp.moveUp();
return true;
}
else return false;
}
}
return false;
}
/**
* 準備將指定游戲元素向下移動,將移動他相關的元素
* @param ge GameElement 指定的游戲元素
* @return boolean 如果指定元素不能移動則返回false
*/
public boolean warmupMoveDown(GameElement ge)
{
boolean rev = false;
GameElement temp = getElement(ge.x,ge.y + Invariable.unitSize);
if(temp != null)
{
if (temp.canOvercast())return true;
else if (!temp.canMove())return false;
else
{
GameElement temp1 = getElement(temp.x, temp.y + Invariable.unitSize);
if (temp1.canOvercast())
{
temp.moveDown();
return true;
}
else return false;
}
}
return false;
}
/**
* 準備將指定游戲元素向左移動,將移動他相關的元素
* @param ge GameElement 指定的游戲元素
* @return boolean 如果指定元素不能移動則返回false
*/
public boolean warmupMoveLeft(GameElement ge)
{
boolean rev = false;
GameElement temp = getElement(ge.x - Invariable.unitSize,ge.y);
if(temp != null)
{
if (temp.canOvercast())return true;
else if (!temp.canMove())return false;
else
{
GameElement temp1 = getElement(temp.x - Invariable.unitSize, temp.y);
if (temp1.canOvercast())
{
temp.moveLeft();
return true;
}
else return false;
}
}
return false;
}
/**
* 準備將指定游戲元素向右移動,將移動他相關的元素
* @param ge GameElement 指定的游戲元素
* @return boolean 如果指定元素不能移動則返回false
*/
public boolean warmupMoveRight(GameElement ge)
{
boolean rev = false;
GameElement temp = getElement(ge.x + Invariable.unitSize,ge.y);
if(temp != null)
{
if (temp.canOvercast())return true;
else if (!temp.canMove())return false;
else
{
GameElement temp1 = getElement(temp.x + Invariable.unitSize, temp.y);
if (temp1.canOvercast())
{
temp.moveRight();
return true;
}
else return false;
}
}
return false;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -