●
●
●
●
《最受欢迎的精准提升平台》
/**
*@Title: ${filename}
*@Package: ${package_name}
*@Description: ${todo}
*推箱子
*
*@author: 源代码资料尽在"清哥好课堂"公众号:qghktit
*@date: ${date}${time}
*@version: 1.0
*/
import java.util.Scanner;
public class PushBox
{
public static void main(String[] args)
{
//1,有一个游戏的简单介绍
//2,地图 --用二维数组来表示地图
//地图中有三种角色 人 箱子 目的地 (障碍物)
//3,game start wsad进行上下左右移动
//4,胜利
//定义地图
final int N = 10;
int[][] map = new int[N][N]; //地图 初值为0
//初始化人,箱子,目的地
//人
int rr = 0; //人的行数位置
int rc = 0; //人的列数位置
//1的值表示 人
map[rr][rc] = 1;
//箱子
int xr = 3; //箱子的行数位置
int xc = 5; //箱子的列数位置
//2来表示 箱子
map[xr][xc] = 2;
//目的地
int mr = 8; //目的地的行数位置
int mc = 8; //目的地的列数位置
//3来表示目的地
map[mr][mc] = 3;
while (true) //游戏,标配
{
//清屏
try
{
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
}
catch (Exception ex)
{
System.out.println("error");
}
//打印游戏简介
System.out.println("*****************************************************");
System.out.println("\t\t推箱子游戏简单版");
System.out.println("游戏简介:囚代表人,▲代表箱子,☆代表目的地");
System.out.println("游戏规则:把箱子推到目的地就算胜利");
System.out.println("游戏按键:上移(w),下移(s),右移(d),左移(a)");
System.out.println("*****************************************************");
//解决人经过目的地以后,目的地不见了
//重新给目的地位置赋值
map[mr][mc] = 3;
//打印地图
for (int r=0; r<N; r++)
{
for (int c=0; c<N; c++)
{
//System.out.print(map[r][c]);
switch (map[r][c])
{
case 1: // 人
System.out.print("囚");
break;
case 2: // 箱子
System.out.print("▲");
break;
case 3: // 目的地
System.out.print("☆");
break;
default: //地图
System.out.print("□");
break;
}
}
System.out.println("");
}
//判断是否胜利
//判断 箱子和目的地的位置是否重合
if (xr==mr && xc==mc)
{
System.out.println("恭喜您,顺利通关!!!");
break;
}
//开始游戏
//通过wsad四个键来进行上下左右移动
System.out.println("请问要向哪走:");
Scanner sc = new Scanner(System.in);
String key = sc.next();
//根据用户输入来进行移动
//暂不考虑wsda以外输入
if ("w".equals(key)) //上移
{
System.out.println("上移");
if (map[rr-1][rc] == 2) //前上方是否有箱子
{
xr--;
map[xr][xc] = 2;
}
//人走
map[rr][rc] = 0;
rr--;
map[rr][rc] = 1;
}
else if ("s".equals(key)) //下移
{
System.out.println("下移");
if (map[rr+1][rc] == 2) //前下方有箱子
{
//箱子先走
xr++;
map[xr][xc] = 2;
//人后走
}
// else
// {
//人所在的位置变成空地
map[rr][rc] = 0;
//下一个位置变成人的位置
rr++;
map[rr][rc] = 1;
// }
}
else if ("a".equals(key)) //左移
{
System.out.println("左移");
if (map[rr][rc-1] == 2) //如果左前方有箱子
{
xc--;
map[xr][xc] = 2;
}
//走人
map[rr][rc] = 0;
rc--;
map[rr][rc] = 1;
}
else if ("d".equals(key)) //右移
{
System.out.println("右移");
if (map[rr][rc+1] == 2) //如果右前方有箱子
{
xc++;
map[xr][xc] = 2;
}
//人走
map[rr][rc] = 0;
rc++;
map[rr][rc] = 1;
}
}
/*
要解决的问题,边界问题 上下左右
思想:
如果前面有箱子,是不是要判断箱子的下一个位置是不是到了边界
比如右移,如果箱子到了最右边,xc+1==N rc+1+1 ==N
没有箱子的情况 人已经到了最右边,rc+1 ==N
比如左移,如果箱子到了最左边, xc-1 <0,即等于0时,不让推
没有箱子的情况,人已经到了最左边,rc==0 rc-1<0
扩展:
1>扩展出障碍物 “■”表示
2>让这个游戏有多个关卡
如果胜利,可以问询一下是否继续,也可以直接进入一关
2.1地图的问题,可以找方法在下一关,重置地图
2.2地图的问题,扩展使用三维数组
3>做一个提示,路径标识
*/
}
}
清哥好课堂公众号
微信号 : qghktit
新浪微博:清哥好课堂
联系客服