利用二维数组制作推箱子

xiaoxiao2021-02-28  80

利用二维数组制作简易的推箱子游戏,一个人去推一个箱子到一个点

package com.lan.java03;

import java.util.Scanner;

public class TuiXiangZi {

public static void main(String[] args) {

/*

* 首先我们要创建出来小人可以移动的地图

* 这个地图是一个二维的数组

* */

/*-----------------------开始创建地图-----------------------------*/

int[ ][ ] c = new int[5][5];   //定义一个数组

/*

* 接下来,我希望从输入确定我的小人在哪个初始位置

* */

Scanner scanner = new Scanner(System.in);

System.out.println("请输入小人的横坐标从0到" + (c.length - 1));

int i = scanner.nextInt(); //就是小人的行坐标

if( i >= c.length || i < 0){

System.out.println("您输入的行数有误,小人坐标脱离了地图");

return;

}

System.out.println("请输入小人的列坐标从0到" + (c[0].length - 1));//  i  j  代表小人

int j = scanner.nextInt(); //就是小人的列坐标

if( j >= c[i].length || j < 0){

System.out.println("您输入的列数有误,小人坐标脱离了地图");

return;

}

c[i][j] = 1;       //初始化位置c[i][j] = 1    我没做合法性判断

System.out.println("小地图的目前状态如下");

System.out.println("**************************************************************************");  //  输出地图

for(int n  = 0; n < c.length; n++){ //输出矩阵

for(int m = 0 ; m < 5 ;m++){

System.out.print(c[n][m] + "   ");

}

System.out.println();

}

System.out.println("请输入箱子的横坐标:从0-" + (c.length - 1));  //boxM  boxN代表箱子

int boxM = scanner.nextInt();

if(boxM >= c.length || boxM < 0){

System.out.println("箱子脱离地图");

return;

}

System.out.println("请输入箱子的纵坐标:从0-" + (c[boxM].length - 1));

int boxN = scanner.nextInt();

if(boxN >= c[boxM].length || boxN < 0){

System.out.println("箱子脱离地图");

return;

}else if(i == boxM && j == boxN){

System.out.println("小人与箱子重复");

return;

}

c[boxM][boxN] = 2;

System.out.println("小地图的目前状态如下");

System.out.println("**************************************************************************");  //输出地图

for(int n  = 0; n < c.length; n++){ //输出矩阵

for(int m = 0 ; m < 5 ;m++){

System.out.print(c[n][m] + "   ");

}

System.out.println();

}

System.out.println("请输入箱子终点位置的横坐标:从0-" + (c.length - 1));  //boxM  boxN代表箱子

int x = scanner.nextInt();

if(x >= c.length || x < 0){

System.out.println("箱子终点脱离地图");

return;

}

System.out.println("请输入箱子终点位置的纵坐标:从0-" + (c[x].length - 1));  //x y代表点

int y= scanner.nextInt();

if(y >= c[x].length || y < 0){

System.out.println("箱子的终点脱离地图");

return;

}else if(boxM == x && boxN == y ){

c[x][y] = 5;

}else if(x == i && y == j){

c[x][y] = 4;

}else{

c[x][y] = 3;

}

System.out.println("小地图的目前状态如下");

System.out.println("**************************************************************************");

for(int n  = 0; n < c.length; n++){ //输出矩阵

for(int m = 0 ; m < 5 ;m++){

System.out.print(c[n][m] + "   ");

}

System.out.println();

}

/*-------------------------创建地图结束,并实例化小人------------------------------*/

/*

* 我们检查一下目前的地图小人

* */

while(true){

/*------------------------检查动作结束------------------------------*/

/*-----------------------小人行走的逻辑----------------------------*/

System.out.println("请输入小人移动方向:w向上 a向左 s向下 d向右"); //输入移动方向

String command = scanner.next();

command.toUpperCase();   //  大小写通用

switch(command){

case"w": //判定w a s d

//这里让小人向上移动

if( i == 0 ){

System.err.println("小人撞墙了,不能向上走了");

}else if(c[i-1][j] == 2){

if(c[i-2][j] ==2){

System.out.println("箱子前面还有箱子不能退了");

}else if(i - 2 == 0){

System.out.println("箱子到顶了,不能向上走了");

}else if(c[i-1][j] ==5  ){

c[i-2][j] = c[i-2][j] + c[i-1][j];

c[i-1][j] = c[i][j] - 1;

c[i][j] = c[i][j] - 1;

i= i - 1;

}else if(c[i][j] == 4){

c[i-2][j] = c[i-2][j] + c[i-1][j];

c[i-1][j] =c[i][j] - 3 ;

c[i][j] = c[i][j] - 1;

i= i - 1;

}else{

c[i-2][j] = c[i-2][j] + c[i-1][j];

c[i-1][j] =c[i][j] ;

c[i][j] = c[i][j] - 1;

i= i - 1;

}

}else if(c[i-1][j] == 3  ){

c[i-1][j] = c[i-1][j]+c[i][j] ;

c[i][j] = c[i][j] - 1;

i= i - 1;

}else {

c[i-1][j] = 1;

c[i][j] = c[i][j] -1;

i= i - 1;

}

break;

case"a":

if(j == 0){

System.err.println("小人撞墙了,不能向左走了");

}else if(c[i][j-1] ==  2){

if(j - 2 == 0){

System.out.println("箱子到顶了,不能向上走了");

  }else if( c[i][j-2] == 2){

System.out.println("箱子前面还有箱子不能退了");

} else if(c[i][j-1] == 5){

c[i][j-2] = c[i][j-2] + c[i][j-1];

c[i][j-1] = c[i][j] - 1;

c[i][j] = c[i][j] - 1;

j= j - 1;

}else if(c[i][j] == 4){

c[i][j-2] = c[i][j-2] + c[i][j-1];

c[i][j-1] = c[i][j] - 3;

c[i][j] = c[i][j] - 1;

j= j - 1;

}else{

c[i][j-2] = c[i][j-2] + c[i][j-1];

c[i][j-1] = c[i][j];

c[i][j] = c[i][j] - 1;

j= j - 1;

}

}else if(c[i][j-1] == 3){

c[i][j-1] = c[i][j-1]+c[i][j] ;

c[i][j] = c[i][j] - 1;

j= j - 1;

}else{

c[i][j-1] = 1;

c[i][j] = c[i][j] -1;

j= j - 1;

}

break;

case"s":

if(i == 4){

System.err.println("小人撞墙了,不能向下走了");

}else if(c[i+1][j] == 2){

if(i + 2 == c.length){

System.out.println("箱子到顶了,不能向下走了");

  }else if( c[i+2][j] == 2){

System.out.println("箱子前面还有箱子不能退了");

}else  if(c[i+1][j] == 5){

c[i+2][j] = c[i+2][j] + c[i+1][j];

c[i+1][j] = c[i][j]-1;

c[i][j] = c[i][j] - 1;

i= i + 1;

}else if(c[i][j] == 4){

c[i+2][j] = c[i+2][j] + c[i+1][j];

c[i+1][j] = c[i][j] - 3;

c[i][j] = c[i][j] - 1;

i= i + 1;

}else{

c[i+2][j] = c[i+2][j] + c[i+1][j];

c[i+1][j] = c[i][j];

c[i][j] = c[i][j] - 1;

i= i + 1;

}

}else  if(c[i+1][j] == 3){

c[i+1][j] = c[i+1][j]+c[i][j];

c[i][j] = c[i][j] - 1;

i= i + 1;

}else{

c[i+1][j] = 1;

c[i][j] = c[i][j] -1;

i= i + 1;

}

break;

case "d":

if(j == c.length -1){

System.err.println("小人撞墙了,不能向右走了");

}else if(c[i][j+1] == 2 ){//有箱子

if(j + 2 == c[i].length){ //箱子到最右边

System.out.println("箱子到顶了,不能向右走了");

    }else if( c[i][j+2] == 2){         //箱子右边有箱子 (多箱子的情况)

System.out.println("箱子前面还有箱子不能退了");

}else if(c[i][j+1] == 5) { //    推箱子时箱子站在点上(多箱子、多点的情况 )

c[i][j+2] = c[i][j+2] + c[i][j+1];

c[i][j+1] = c[i][j]-1 ;

c[i][j] = c[i][j] - 1;

j= j + 1;

}else if(c[i][j] == 4){ //推箱子时人站在点上

c[i][j+2] = c[i][j+2] + c[i][j+1];

c[i][j+1] = c[i][j] - 3;

c[i][j] = c[i][j] - 1;

j= j + 1;

}else { //

c[i][j+2] = c[i][j+2] + c[i][j+1];

c[i][j+1] = c[i][j];

c[i][j] = c[i][j] - 1;

j= j + 1;

}

}else if(c[i][j+1] == 3){                                  //右边是3

c[i][j+1] = c[i][j+1]+c[i][j];

c[i][j] = c[i][j] - 1;

j= j + 1;

}else{                                  //右边是0

c[i][j+1] = 1;

c[i][j] = c[i][j] - 1;

j= j + 1;

}

break;

default:

System.err.println("您主动关闭程序了");

return;

}

System.out.println("小地图的目前状态如下");

System.out.println("**************************************************************************");

for(int n  = 0; n < c.length; n++){ //输出矩阵

for(int m = 0 ; m < 5 ;m++){

System.out.print(c[n][m] + "   ");

}

System.out.println();

}

if(c[x][y] == 5){

System.out.println("恭喜您获胜了");

return;

}

}

}

}

转载请注明原文地址: https://www.6miu.com/read-76660.html

最新回复(0)