【经典项目】Java小游戏 —— 推箱子

一、玩法回顾

【预期实现】

 【玩法介绍】

推箱子是一种益智解谜类的小游戏,玩家需要通过推动箱子将它们放置到指定的位置,以完成关卡的任务。

玩法介绍:

  1. 游戏场景:推箱子的游戏通常以方格地图为基础,其中包含了墙壁、空地、目标点和箱子等元素。
  2. 角色操作:玩家扮演一个角色,可以在地图上进行移动,并且可以推动箱子。
  3. 目标任务:游戏的目标是将所有的箱子推到对应的目标点上,即完成关卡的任务。
  4. 移动规则:玩家可以在地图上上下左右移动,但不能穿越墙壁或将箱子推到墙壁上。
  5. 推箱子:玩家可以选择一个方向推动箱子,箱子会沿着该方向一直移动,直到碰到墙壁或其他障碍物为止。
  6. 挑战难度:随着关卡的增加,游戏的难度逐渐增加,需要更多的策略和思考来解决谜题。

推箱子是一款简单而有趣的游戏,它能够锻炼玩家的逻辑思维、空间认知能力和问题解决能力。

二、实现分析

1、地图定义

【经典项目】Java小游戏 —— 推箱子_第1张图片

【地图数组】

【经典项目】Java小游戏 —— 推箱子_第2张图片

 .map文件中,数字 = 方格

1 = 边界墙

2 = 路

3 = 箱子

4 = 目标位置

5 = 玩家位置

9 = 箱子在目标位置

2、控制移动

设计思路,以向上移动为例:

1、判断向上一格的位置(即状态是2或者4)是否可走:
    -是:继续前进,修改原来格子状态。
2、判断向上一格的位置,是否是箱子:
    -是:需要考虑箱子能否继续前进,如果可以箱子也需要向上移动一格
    -否:由于箱子卡占用了前进的格子,所以无法前进。
​3、前进的位置是否是状态9,即是已经有箱子放在目标位置了:
    -是:判断能否推动箱子继续前进
4、碰到边界墙直接无法前进步。

其他方向的思路基本相同。

因为需要实现后退一步的功能,另外需要一个栈保存前进方向。需要后退一步的时候,借助临时的map数组和这个路径栈,恢复现场。

【代码设计】

	/** 向上移动一格 **/
	void moveUp() {
		if (map[manY - 1][manX] == 2 || map[manY - 1][manX] == 4) {
			if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
				map[manY][manX] = 4;	// 移动前的格子-->目标格子
			else
				map[manY][manX] = 2;	// 将移动前的格子-->空白格子
			
			map[manY - 1][manX] = 8;	// 当前?
			repaint();					// 重绘面板地图
			manY--;						// 向上走了一步
			mystack.push(10);			// 10(向上走了一步) 推入栈
		} else if (map[manY - 1][manX] == 3) {
			if (map[manY - 2][manX] == 4) {
				if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
					map[manY][manX] = 4;
				else
					map[manY][manX] = 2;
				map[manY - 1][manX] = 8;
				map[manY - 2][manX] = 9;
				repaint();
				manY--;
				mystack.push(11);
			} else if (map[manY - 2][manX] == 2) {
				if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
					map[manY][manX] = 4;
				else
					map[manY][manX] = 2;
				map[manY - 1][manX] = 8;
				map[manY - 2][manX] = 3;
				repaint();
				manY--;
				mystack.push(11);
			} else {
				map[manY][manX] = 8;
				repaint();
			}
		} else if (map[manY - 1][manX] == 9) {
			if (map[manY - 2][manX] == 4) {
				if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
					map[manY][manX] = 4;
				else
					map[manY][manX] = 2;
				map[manY - 1][manX] = 8;
				map[manY - 2][manX] = 9;
				repaint();
				manY--;
				mystack.push(11);
			} else if (map[manY - 2][manX] == 2) {
				if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
					map[manY][manX] = 4;
				else
					map[manY][manX] = 2;
				map[manY - 1][manX] = 8;
				map[manY - 2][manX] = 3;
				repaint();
				manY--;
				mystack.push(11);
			} else {
				map[manY][manX] = 8;
				repaint();
			}
		}
		if (map[manY - 1][manX] == 1) {
			map[manY][manX] = 8;
			repaint();
		}
	}

三、效果展示

游戏过程

四、完整代码

经典项目Java小游戏-推箱子资源-CSDN文库

你可能感兴趣的:(JAVA基础,java,游戏)