更新時間:2020-08-28 15:35:34 來源:動力節點 瀏覽2480次
一、游戲功能
游戲由障礙、空地、箱子、終點與玩家組成。
通過上下左右控制玩家推動箱子。當箱子的推動方向沒有障礙時,向前移動到新的位置,玩家也向前移動一步。
當所有箱子都處于終點時,游戲勝利,按回車鍵進入下一關。當完成所有關卡時,按回車鍵結束游戲。
在游戲中按R建重新開始本關。
二、素材準備
從網上下載推箱子游戲的地圖素材與背景音樂。
三、游戲的大致框架
首先最容易想到的是一個管理地圖信息的Map類,其中應該包括一個關卡地圖中的所有信息。
其次應該有一個DataManager類來從文件中讀取地圖、讀取圖片,并能根據讀入的地圖文件與關卡編號創造出所需的Map類的對象。
還需要有一個SoundManager類來播放音樂。
游戲中最不能缺少的是GameManager類,用于管理游戲的所有邏輯。
最后是一個窗口,用于綜合所有的管理類,將輸入傳入GameManager類以及顯示游戲畫面。
四、地圖類的設計
因此設計出Map類,其中有4個私有成員:二維數組byte map[][]儲存地圖上的元素,int level儲存當前地圖的等級,manX、manY表示玩家當前所在的位置。
private int manX,manY;//主角所在位置的坐標
private byte map[][];//二維地圖元素數組
private int level;//當前地圖的等級
對于每一種地圖元素,我們都需要用一個數字來表示。因此我們定義一些byte類型的常量。
/** 地圖元素含義表 */
public final static byte WALL = 1, BOX = 2, BOX_ON_END = 3, END = 4,?
MAN_DOWN = 5, MAN_LEFT = 6, MAN_RIGHT = 7, MAN_UP = 8, GRASS = 9,?
MAN_DOWN_ON_END = 10, MAN_LEFT_ON_END = 11,MAN_RIGHT_ON_END = 12, MAN_UP_ON_END = 13;
考慮到進入下一個關卡與重置本關都要新建一個Map對象,因此構造方法有兩種,一種傳入level,一種則不需要。
/** 構造一個地圖對象,不設定等級 */
public Map(byte map[][]){
this.init(map);
}
/** 構造一個地圖對象并指定等級 */
public Map(byte map[][],int level) {
this.init(map);
this.level = level;
}
構造Map時,我們只需要傳入表示地圖元素的二維數組與等級即可,玩家的位置可以由地圖計算得到。
這里沒有判斷地圖的合法性,即主角是否只有一個、箱子與終點是否對應以及謎題是否有解。因為這里的地圖是事先寫入文件中的,在寫入時就應該保證合法性。
/** 初始化一個地圖對象 */
public void init(byte map[][]){
this.map = new byte[map.length][map[0].length];
for (int i=0;i
for (int j=0;j
this.map[i][j] = map[i][j];
}
}
findMan();
}
// 判斷類型k是否為主角
private boolean isMan(byte k){
boolean res = false;
if (k>=5&&k<=13&&k!=9) res = true;
return res;
}
/** 計算主角在地圖中的位置 */
public void findMan(){
bk:for (int i=0;i
for (int j=0;j
if (isMan(map[i][j])){
manX = i;
manY = j;
break bk;
}
}
}
}
在實際使用中,我們需要有公有方法來獲得地圖的一些信息。
/** 獲取地圖的行數 */
public int getRow(){
return map.length;
}
/** 獲取地圖的列數 */
public int getColumn(){
return map[0].length;
}
/** 設置主角的位置 */
public void setMan(int x, int y){
manX = x;
manY = y;
}
/** 獲取主角在地圖中的X坐標 */
public int getManX(){
return manX;
}
/** 獲取主角在地圖中的y坐標 */
public int getMaxY(){
return manY;
}
/** 獲取(i,j)在地圖中的元素 */
public byte getMap(int i,int j){
return map[i][j];
}
/** 設置(i,j)的元素類型 */
public void setMap(int i,int j,byte t){
map[i][j]=t;
}
/** 獲取當前等級 */
public int getLevel(){
return level;
}
/** 判斷(i,j)是否為空地 */
public boolean isGrassOrEnd(int i,int j){
if (map[i][j]==4||map[i][j]==9) return true;
return false;
}
/** 判斷(i,j)為箱子 */
public boolean isBox(int x,int y){
if (map[x][y]==2||map[x][y]==3) return true;
return false;
}
/** 判斷(i,j)是否在地圖上 */
public boolean inMap(int x,int y){
if (x>=0&&x=0&&y0) return true;
return false;
}
此時,游戲基礎的地圖類就完成了。
以上就是動力節點java培訓機構的小編針對“Java游戲項目的練習題有哪些”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習