/** *@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 新浪微博:清哥好课堂
|