基于Java的二维数组和条件循环语句实现简单推箱子游戏

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

/**
 * 二维数组实现推箱子
 * 二维数组地图为正方形
 */
public class Test01 {
    public static void main(String[] args) {
        //地图宽高
        int n = 6;
        //空格子
        char empty = '*';
        //自己
        char self = '&';
        //箱子
        char box = '#';
        //目标
        char target = '0';

        //创建地图
        char[][] map = new char[n][n];

        //先全部将地图赋值为指定字符的空格子
        for (int i = 0; i < map.length; i++){
           for (int j = 0; j < map[i].length; j++){
               map[i][j] = empty;
           }
        }

        //随机创建自己,箱子和目标位置
        Random random = new Random();
        //随机自己的位置
        int self_i = random.nextInt(n);
        int self_j = random.nextInt(n);
        map[self_i][self_j] = self;

        //随机箱子的位置,箱子必须不能在边缘
        int box_i = -1;
        int box_j = -1;
        int i1 = random.nextInt(n);
        int j1 = random.nextInt(n);
        while (true){
            //箱子不能打印在地图边缘
            if (!(i1 == 0 || i1 == map.length-1 || j1 == 0 || j1 == map[0].length-1)){
                //将坐标和字符赋值
                box_i = i1;
                box_j = j1;
                map[box_i][box_j] = box;
                break;
            }else{//箱子打印在边缘,则重新随机输入
                i1 = random.nextInt(n);
                j1 = random.nextInt(n);
            }
        }

        //随机目标的位置
        int target_i = random.nextInt(n);
        int target_j = random.nextInt(n);
        map[target_i][target_j] = target;

        //用户操作人的走向
        Scanner input = new Scanner(System.in);
        while (true){
            //打印地图
            System.out.println("==== "+empty+"--空格子  "+self+"--自己  "+box+"--箱子  "+target+"--目标 ====");
            for (int i = 0; i < map.length; i++){
                for (int j = 0; j < map[i].length; j++){
                    System.out.print(map[i][j]+"  ");
                }
                System.out.println();
            }

            //上下移动操作
            while (true){
                System.out.println("请输入你选择的方向(w-上 a-左 s-下 s-右):");
                String choice = input.next();
                switch (choice){
                    case "w"://上
                        if (self_i == 0){//上边界越界
                            System.out.println("你已移动到最上方,无法移动!游戏结束!");
                            System.exit(0);
                        }else{//进一步判断人的上面是空格子还是目标还是箱子
                            //取出自己上方的值作判断
                            char value = map[self_i - 1][self_j];
                            if (value == target){//上方为目标位置
                                System.out.println("你已掉入坑中!游戏结束!");
                                System.exit(0);
                            }else if (value == empty){//上方为空格子
                                //先把自己位置移动上去
                                map[self_i - 1][self_j] = self;
                                //重置原来的位置
                                map[self_i][self_j] = empty;
                                //更新自己的坐标
                                self_i--;
                            }else if (value == box){//上方为箱子
                                //判断箱子上方的情况
                                if (!(box_i == 0)){//箱子可向上移动
                                    //取出箱子上方的位置,用于判断是否胜利
                                    value = map[box_i - 1][box_j];
                                    if (value == target){//箱子处于目标位置处
                                        System.out.println("恭喜你!胜利啦!");
                                        System.exit(0);
                                    }else{//箱子可向上移动
                                        //先把箱子向上移动
                                        map[box_i - 1][box_j] = box;
                                        //再将自己向上移动
                                        map[self_i - 1][self_j] = self;
                                        //重置自己的位置
                                        map[self_i][self_j] = empty;
                                        //更新坐标位置
                                        box_i--;
                                        self_i--;
                                    }
                                }else{//箱子处于最上方
                                    System.out.println("箱子已移动到最上方,无法移动!游戏结束!");
                                    System.exit(0);
                                }
                            }
                        }
                        break;
                    case "s"://下
                        if (self_i == map.length - 1){
                            System.out.println("你已移动到最下方,无法移动!游戏结束!");
                            System.exit(0);
                        }else{
                            int value = map[self_i + 1][self_j];
                            if (value == target){
                                System.out.println("你已掉入坑中!游戏结束!");
                                System.exit(0);
                            } else if (value == empty) {
                                map[self_i + 1][self_j] = self;
                                map[self_i][self_j] = empty;
                                self_i++;
                            } else if (value == box){
                                if (!(box_i == map.length - 1)){
                                    value = map[box_i + 1][box_j];
                                    if (value == target){
                                        System.out.println("恭喜你!胜利啦!");
                                        System.exit(0);
                                    }else{
                                        map[box_i + 1][box_j] = box;
                                        map[self_i + 1][self_j] = self;
                                        map[self_i][self_j] = empty;
                                        box_i++;
                                        self_i++;
                                    }
                                }else{
                                    System.out.println("箱子已移动到最下方,无法移动!游戏结束!");
                                    System.exit(0);
                                }
                            }
                        }
                        break;
                    case "a"://左
                        if (self_j == 0){
                            System.out.println("你已移动到最左方,无法移动!游戏结束!");
                            System.exit(0);
                        }else{
                            int value = map[self_i][self_j - 1];
                            if (value == target){
                                System.out.println("你已掉入坑中!游戏结束!");
                                System.exit(0);
                            }else if (value == empty){
                                map[self_i][self_j - 1] = self;
                                map[self_i][self_j] = empty;
                                self_j--;
                            }else if (value == box){
                                if (!(box_j == 0)){
                                    value = map[box_i][box_j - 1];
                                    if (value == target){
                                        System.out.println("恭喜你!胜利啦!");
                                        System.exit(0);
                                    }else{
                                        map[box_i][box_j - 1] = box;
                                        map[self_i][self_j - 1] = self;
                                        map[self_i][self_j] = empty;
                                        box_j--;
                                        self_j--;
                                    }
                                }else{
                                    System.out.println("箱子已移动到最左方,无法移动!游戏结束!");
                                    System.exit(0);
                                }
                            }
                        }
                        break;
                    case "d"://右
                        if (self_j == map[0].length - 1){
                            System.out.println("你已移动到最右方,无法移动!游戏结束!");
                            System.exit(0);
                        }else{
                            int value = map[self_i][self_j + 1];
                            if (value == target){
                                System.out.println("你已掉入坑中!游戏结束!");
                                System.exit(0);
                            }else if (value == empty){
                                map[self_i][self_j + 1] = self;
                                map[self_i][self_j] = empty;
                                self_j++;
                            }else if (value == box){
                                if (!(box_j == map[0].length - 1)){
                                    value = map[box_i][box_j + 1];
                                    if (value == target){
                                        System.out.println("恭喜你!胜利啦!");
                                        System.exit(0);
                                    }else{
                                        map[box_i][box_j + 1] = box;
                                        map[self_i][self_j + 1] = self;
                                        map[self_i][self_j] = empty;
                                        box_j++;
                                        self_j++;
                                    }
                                }else{
                                    System.out.println("箱子已移动到最右方,无法移动!游戏结束!");
                                    System.exit(0);
                                }
                            }
                        }
                        break;
                    default:
                        //处理输入错误
                        System.out.println("输入有误,请重新输入(w-上 a-左 s-下 s-右):");
                        choice = input.next();
                }
                break;
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T何必当初

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值