推箱子

花了N个小时完成的,算是把数组和循环综合巩固了一遍,该程序大体上是可以玩的,有兴趣的小伙伴可以将本代码复制过去进行改进,增加一些新的功能玩法


import java.util.Scanner;

public class Three_day {

/*
*推箱子
* 1、a、s、w、d控制角色上下左右移动
* 2、o表示箱子
* 3、@表示角色
* 4、‘*’ 表示墙体
* 5、G表示目的地
*/

public static void main(String [] args) {

//创建画布大小
char[][] Map_name = new char[10][10];
int x = 1, y = 1;//目的地坐标
int A =8 ,C = 8;//角色初始坐标
char temp1,temp2;//临时变量
boolean q = true;//循环条件
Scanner s = new Scanner(System.in);//选择是否开始游戏
System.out.println("----------------------------");
System.out.println("---进入游戏:y\t---\t退出:n---");
System.out.println("----------------------------");
switch (s.next().toLowerCase()) {
case "y"://进入游戏后,载入墙体,角色,箱子,目的地
Map_name[7][2] = 'o';//箱子位置
Map_name[x][y] = '@';//角色初始位置
Map_name[A][C] = 'G';//目的地
Map_name[8][6] = '*';//墙体
Map_name[7][6] = '*';//墙体
//对外围墙体进行设定
for (int i = 0; i < Map_name.length; i++) {

for (int j = 0; j < Map_name.length; j++) {
if (i == 0) {//首行墙体
Map_name[i][j] = '*';

}
if (i == Map_name.length - 1) {//尾行墙体
Map_name[i][j] = '*';
}
if (j == 0) {
if (i > 0 & i < Map_name.length - 1) {//首列墙体

Map_name[i][j] = '*';
}

}
if (j == Map_name.length - 1) {

if (i > 0 & i < Map_name.length - 1) {//尾列墙体

Map_name[i][j] = '*';
}
}
//墙体1
if (i > 0 & i < Map_name.length - 5 & j == 3) {

Map_name[i][j] = '*';
}

//墙体2
if (i < Map_name.length - 1 & i > Map_name.length - 5 & j == 3) {

Map_name[i][j] = '*';
}
//墙体3
if (i == 4 & j > Map_name.length - 5 & j < Map_name.length - 1) {

Map_name[i][j] = '*';
}
}
}

//操作,循环控制角色移动
while (q) {//当q为true时,执行下列循环体
//打印,更新操作后的界面
for (char[] E : Map_name) {
for (char R : E) {

System.out.print(R + "\t");
}

System.out.println();
}
//用户输入选择控制:a为左移动,d为右移动,w为上移动,s为下移动
Scanner w = new Scanner(System.in);
switch (w.next().toLowerCase()) {//不论用户是输入的是大写还是小写,一律转换成小写
case "a":
if(y == 1){//角色在边界上的情况
System.out.println("只能上走、下走、右走");
}else {
if (Map_name[x][y - 1] != '*' | Map_name[x][y - 1] == 'o') {//左走没有遇到墙或者左右遇到箱子情况
if(Map_name[x][y - 1] == 'o'){//当左走遇到箱子的时候
if(Map_name[x][y - 2] == '*'){//当箱子在边界上的时候

System.out.println("推不动,换个方向试试");
}
if(Map_name[x][y - 2] != '*'){//角色 ,箱子的位置左一格,原来角色所在位置空

temp2 = Map_name[x][y - 1];//箱子
temp1 = Map_name[x][y];//角色
Map_name[x][y] = Map_name[x][y - 2];//原来位置为空
Map_name[x][y - 1] = temp1;
Map_name[x][y - 2] = temp2;
y--;
}else {//当箱子和目的地重合时,游戏通关,有兴趣的小伙伴可以在此添加A、C、x、y的坐标进行下一关的开始,可扩展站空间挺大
temp1 = Map_name[x][y];
Map_name[A][C] = Map_name[x][y - 1];
Map_name[x][y - 1] = temp1;
System.out.println("恭喜通关");
q = false;
}
}
else {//没有遇到箱子
temp1 = Map_name[x][y];//角色的值先给临时变量
Map_name[x][y] = Map_name[x][y - 1];//左移动的数值给角色
Map_name[x][y - 1] = temp1;//角色为当前的变量
y--;
}
}else{//遇到墙

System.out.println(".....撞墙.....");

}
}
break;

case "d":
if(y == 9){
System.out.println("只能上走、下走、右走");
}else {
if (Map_name[x][y + 1] != '*' | Map_name[x][y + 1] == 'o') {//没有遇到墙
if(Map_name[x][y + 1] == 'o'){//遇到箱子的情况
if(Map_name[x][y + 2] == '*'){

System.out.println("推不动,换个方向试试");
}
if(Map_name[x][y + 2] != '*'){//三个位置交换

temp2 = Map_name[x][y + 1];//箱子
temp1 = Map_name[x][y];//角色
Map_name[x][y] = Map_name[x][y + 2];//原来位置为空
Map_name[x][y + 1] = temp1;
Map_name[x][y + 2] = temp2;
y++;
}else {
temp1 = Map_name[x][y];
Map_name[A][C] = Map_name[x][y + 1];
Map_name[x][y + 1] = temp1;
System.out.println("恭喜通关");
q = false;
}
}
else {//没有遇到箱子
temp1 = Map_name[x][y];//角色的值先给临时变量
Map_name[x][y] = Map_name[x][y + 1];//左移动的数值给角色
Map_name[x][y + 1] = temp1;//角色为当前的变量
y++;
}
}else{//遇到墙

System.out.println(".....撞墙.....");

}
}//else
break;
case "w":
if(x == 1){
System.out.println("只能左走、下走、右走");
}else {
if (Map_name[x - 1][y] != '*' | Map_name[x - 1][y] == 'o') {//没有遇到墙
if(Map_name[x - 1][y] == 'o'){//遇到箱子的情况
if(Map_name[x - 2][y] == '*'){

System.out.println("推不动,换个方向试试");
}
if(Map_name[x - 2][y] != '*'){//三个位置交换

temp2 = Map_name[x - 1][y];//箱子
temp1 = Map_name[x][y];//角色
Map_name[x][y] = Map_name[x - 2][y];//原来位置为空
Map_name[x - 1][y] = temp1;
Map_name[x - 2][y] = temp2;
x = x - 1;
}
else {
temp1 = Map_name[x][y];
Map_name[A][C] = Map_name[x - 1][y];
Map_name[x - 1][y] = temp1;
System.out.println("恭喜通关");
q = false;
}
}
else {//没有遇到箱子
temp1 = Map_name[x][y];//角色的值先给临时变量
Map_name[x][y] = Map_name[x - 1][y];//左移动的数值给角色
Map_name[x - 1][y] = temp1;//角色为当前的变量
x--;
}


}else{//遇到墙

System.out.println(".....撞墙.....");

}
}
break;
case "s":
if(x == 9){
System.out.println("只能上走、下走、右走");
}else {
if (Map_name[x + 1][y] != '*' | Map_name[x + 1][y] == 'o') {//没有遇到墙
if(Map_name[x + 1][y] == 'o'){//遇到箱子的情况
if(Map_name[x + 2][y] == '*'){

System.out.println("推不动,换个方向试试");
}
if(Map_name[x + 2][y] != '*' & Map_name[x + 2][y] != 'o'){//三个位置交换

temp2 = Map_name[x + 1][y];//箱子
temp1 = Map_name[x][y];//角色
Map_name[x][y] = Map_name[x + 2][y];//原来位置为空
Map_name[x + 1][y] = temp1;
Map_name[x + 2][y] = temp2;
x++;
}else {
temp1 = Map_name[x][y];
Map_name[A][C] = Map_name[x+1][y];
Map_name[x+1][y] = temp1;
System.out.println("恭喜通关");
q = false;
}
}
else {//没有遇到箱子
temp1 = Map_name[x][y];//角色的值先给临时变量
Map_name[x][y] = Map_name[x + 1][y];//左移动的数值给角色
Map_name[x + 1][y] = temp1;//角色为当前的变量
x++;
}
}else{//遇到墙

System.out.println(".....撞墙.....");

}
}//else
break;

}
}

case "n":
System.out.println("已退出游戏");
}
}


}
posted @ 2021-07-13 18:11  尐飄、  阅读(48)  评论(0编辑  收藏  举报