首页 课程 师资 教程 报名

Java游戏项目的练习题有哪些

  • 2020-08-28 15:35:34
  • 2244次 动力节点

一、游戏功能

游戏由障碍、空地、箱子、终点与玩家组成。

通过上下左右控制玩家推动箱子。当箱子的推动方向没有障碍时,向前移动到新的位置,玩家也向前移动一步。

当所有箱子都处于终点时,游戏胜利,按回车键进入下一关。当完成所有关卡时,按回车键结束游戏。

在游戏中按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游戏项目的练习题有哪些”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交