javaFX写的界面 大家可以一起探讨学习
核心代码:
/**
* 判断小人是否可以移动
*
* @param x1 小人下一步的x轴
* @param y1 小人下一步的y轴
* @param x2 小人下二步的x轴
* @param y2 小人下二步的y轴
* @return
*/
boolean tryMove(int x1, int y1, int x2, int y2) {
if (x1 < 0 || x2 < 0 || y1 < 0 || y2 < 0) return false;//若果超出地图的左上,不通过
//若果超出地图的右下,不通过
if (x1 > Config.map_width || x2 > Config.map_width || y1 > Config.map_height || y2 > Config.map_height)
return false;
if (curMap[x1][y1] == 1) return false; //如果小人前面是墙不通过
if (curMap[x1][y1] == 3 || curMap[x1][y1] == 5) { //小人下一步是箱子 需要判断箱子前面有没有障碍物(箱子/墙)
if (curMap[x2][y2] == 1 || curMap[x2][y2] == 3 || curMap[x2][y2] == 5) {
return false;
} else { //没有障碍 小人前面的箱子前进一步
curMap[x2][y2] = 3;
}
}
//如果都没判断成功小人前进一步
curMap[x1][y1] = 4;//更改地图对应坐标点的值
//移动之前的坐标
int v = oriMap[manX][manY];
if (v != 2) {//若果刚开始小人位置不是球的话
if (v == 5) {//可能是5 既有箱子又有球
v = 2;//若果小人本身就在球上面的话移开之后还是显示陷进
} else {
v = 0;//小人移开之后之前小人的位置改为地板
}
}
//重置小人位置的地图参数
curMap[manX][manY] = v;
//小人移动 重置小人的坐标
manX = x1;
manY = y1;
//返回true 代表小人移动了
return true;
}
/**
* 绘制地图
*/
public void drawMap() {
Image image = Config.block;//初始图片
double W = image.getWidth();
double H = image.getHeight();
for (int i = 0; i < curMap.length; i++) {//行
for (int j = 0; j < curMap[i].length; j++) {//列
image = Config.block;//初始图片
//绘制地板
pen.drawImage(image, j * W, i * H);
switch (curMap[i][j]) {
case 1://绘制墙壁
image = Config.wall;
break;
case 2://绘制球
image = Config.ball;
break;
case 3://绘制箱子
image = Config.box;
break;
case 4://绘制小人
image = this.curMan;
manX = i;
manY = j;
break;
case 5://绘制箱子
image = Config.box;
break;
default:
break;
}
//每个图片不一样宽 需要在对应地板的中心绘制地图
pen.drawImage(image, W * j - (image.getWidth() - W) / 2, H * i - (image.getHeight() - H), image.getWidth(), image.getHeight());
}
}
}
运行效果图:
源码下载:https://download.csdn.net/download/qq_40087987/10673556
素材来源:https://blog.csdn.net/bide_tootight/article/details/79459116