推箱子总结:
1.遇到的问题,与解决办法
- 最后一步,设置箱子的位置与目的地位置重合,原理是让map地图重新加载一遍,再退出
- 2、重新开始游戏,原理就是在循环外面定义一个do-while循环,注意,一个break只在一个while循环中起作用,之前误认为,一个break就能把所有的while或者for循环停止,其实不然。
- 3、提到了for循环,这里再次回复一下,for循环中的break、return、continue,的作用
①、continue:指的是跳出当前循环,即不执行continue后的语句,直接进入下次循环。
②、break:指的是跳出for循环本身,不再进行之后的循环,但可以执行for循环之外的语句。
③、return:指的是跳出for循环,且不执行for循环之外的语句,直接跳出当前函数,返回return后的值
- 4、就是在推箱子这个项目中,boolean值的定义非常关键
第一个Boolean
// 3、判断人与箱子相遇的情况,人穿过箱子,先覆盖箱子,然后再出现
// 解释:a[rx - 1][ry] == 3 人的前面是一个箱子,人向上走一步,先让flag变成true,然后对箱子、和人移动的位置进行处理
if (flag) {
a[rx][ry] = 3;
flag = false;
rx--;
a[rx][ry] = 1;
continue;
}
if (a[rx - 1][ry] == 3) {
flag = true;
}
// 重新开始
// 解释:重新判定,游戏结束后,是否继续游戏,同时还有一个Game,是do-while循环中的判断,具体内容看下面的源码
if(temp) {
temp = false;
System.out.println("恭喜你,通关成功!");
System.out.println("是否继续游戏:(yes/no)");
answer = mys.next();
if(answer.equals("yes")) {
Game = true;
break;
}
else {
Game=false;
break;
}
}
- 5、感悟,本人正在学习java,偶尔分享一下自己的学习小项目,也是第一次在掘金中写博客,有很多不足,还在继续学习中 ……
- 6 源代码,只写了随机生成人、箱子、目的地的点位,循环重新开始 功能,感兴趣的小伙伴可以继续开发~~~
import java.util.Random;
import java.util.Scanner;
public class PushCase {
public static void main(String[] args) {
// 引用随机生成数据,先把基本的布局弄一遍再过来改
// 功能:生成随机位置
// 边框:看可不可以
// 是否重新开始、悔棋步骤
// 今晚的任务:写一篇总结,抄好笔记
// 判断是否继续游戏
String answer="";
boolean Game = false;
do {
Random myr = new Random();
Scanner mys = new Scanner(System.in);
// 地图
int[][] a = new int[9][9];
boolean flag = false;
boolean temp = false;
// 人:1、箱子:2、目标:3
int rx = myr.nextInt(a.length-1);
int ry = myr.nextInt(a.length-1);
int xx = myr.nextInt(a.length-1);
int xy = myr.nextInt(a.length-1);
int dx = myr.nextInt(a.length-1);
int dy = myr.nextInt((a.length-1));
if(xx==0||xy==0||dx==0||dy==0) {
Game =true;
continue;
}
a[rx][ry] = 1;
a[xx][xy] = 2;
a[dx][dy] = 3;
while (true) {
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length; j++) {
if(a[i][j] == 0) {
System.out.print("口");
}
if (a[i][j] == 1 ) {
System.out.print("囚");
}
if (a[i][j] == 2 ) {
System.out.print("箱");
}
if (a[i][j] == 3) {
System.out.print("地");
}
}
System.out.println();
}
// 重新开始
if(temp) {
temp = false;
System.out.println("恭喜你,通关成功!");
System.out.println("是否继续游戏:(yes/no)");
answer = mys.next();
if(answer.equals("yes")) {
Game = true;
break;
}
else {
System.out.println("敲代码还是文哥最帅!");
System.out.println("敲代码还是文哥最帅!");
System.out.println("敲代码还是文哥最帅!");
Game=false;
break;
}
}
// 能上下左右推动箱子
System.out.println("请输入要移动的方向:(w上,x下,a左,d右)");
String x = mys.next();
// 游戏结束条件,暂时这个不太行,后面箱子的值,会先覆盖盒子的值,这个判断不了
// if(a[xx][xy]==a[dx][dy]) {
// System.out.println("恭喜你,通关,游戏结束!");
// break;
// }
// 上
if (x.equals("w")) {
// 1、判断箱子是否在墙边上
if (rx - 1 < 0) {
System.out.println("再上就穿墙了,小伙子不能开挂昂!");
continue;
}
// 2、判断人推箱子的情况
if (a[rx - 1][ry] == 2) {
if (rx - 2 < 0) {
System.out.println("再上箱子要撞墙了!");
continue;
}
if (a[rx - 2][ry] == 3) {
temp = true;
}
a[rx - 2][ry] = 2;
}
// 3、判断人与箱子相遇的情况,人穿过箱子,先覆盖箱子,然后再出现
if (flag) {
a[rx][ry] = 3;
flag = false;
rx--;
a[rx][ry] = 1;
continue;
}
if (a[rx - 1][ry] == 3) {
flag = true;
}
a[rx][ry] = 0;
rx--;
a[rx][ry] = 1;
}
// 下
if (x.equals("s")) {
// 1、判断箱子是否在墙边上
if (rx + 1 == a.length) {
System.out.println("再上就穿墙了,小伙子不能开挂昂!");
continue;
}
// 2、判断人推箱子的情况
if (a[rx + 1][ry] == 2) {
if (rx + 2 == a.length) {
System.out.println("再上箱子要撞墙了!");
continue;
}
if (a[rx + 2][ry] == 3) {
temp = true;
}
a[rx + 2][ry] = 2;
}
// 3、判断人与箱子相遇的情况,人穿过箱子,先覆盖箱子,然后再出现
if (flag) {
a[rx][ry] = 3;
flag = false;
rx++;
a[rx][ry] = 1;
continue;
}
if (a[rx + 1][ry] == 3) {
flag = true;
}
a[rx][ry] = 0;
rx++;
a[rx][ry] = 1;
// if(temp) {
// break;
// }
}
// 左
if (x.equals("a")) {
// 1、判断箱子是否在墙边上
if (ry - 1 < 0) {
System.out.println("再上就穿墙了,小伙子不能开挂昂!");
continue;
}
// 2、判断人推箱子的情况
if (a[rx][ry - 1] == 2) {
if (ry - 2 < 0) {
System.out.println("再上箱子要撞墙了!");
continue;
}
if (a[rx][ry - 2] == 3) {
temp = true;
}
a[rx][ry - 2] = 2;
}
// 3、判断人与箱子相遇的情况,人穿过箱子,先覆盖箱子,然后再出现
if (flag) {
a[rx][ry] = 3;
flag = false;
ry--;
a[rx][ry] = 1;
continue;
}
if (a[rx][ry - 1] == 3) {
flag = true;
}
a[rx][ry] = 0;
ry--;
a[rx][ry] = 1;
// if(temp) {
// break;
// }
}
// 右
if (x.equals("d")) {
// 1、判断箱子是否在墙边上
if (ry + 1 == a.length) {
System.out.println("再上就穿墙了,小伙子不能开挂昂!");
continue;
}
// 2、判断人推箱子的情况
if (a[rx][ry + 1] == 2) {
if (ry + 2 == a.length) {
System.out.println("再上箱子要撞墙了!");
continue;
}
if (a[rx][ry + 2] == 3) {
temp = true;
}
a[rx][ry + 2] = 2;
}
// 3、判断人与箱子相遇的情况,人穿过箱子,先覆盖箱子,然后再出现
if (flag) {
a[rx][ry] = 3;
flag = false;
ry++;
a[rx][ry] = 1;
continue;
}
if (a[rx][ry + 1] == 3) {
flag = true;
}
a[rx][ry] = 0;
ry++;
a[rx][ry] = 1;
}
}
} while(Game);
}
}