推箱子小游戏java代码

以下是一个Java实现的简单推箱子小游戏示例,其中使用二维数组表示游戏地图,通过不断移动箱子和人物来完成游戏:

import java.util.Scanner;

public class SokobanGame {

    public static void main(String[] args) {
        char[][] map = {
                {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
                {'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
                {'#', ' ', ' ', ' ', '#', '#', '#', '#', ' ', '#'},
                {'#', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', '#'},
                {'#', ' ', ' ', ' ', '#', 'O', ' ', ' ', ' ', '#'},
                {'#', ' ', ' ', ' ', '#', 'X', ' ', ' ', ' ', '#'},
                {'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
                {'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
                {'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
                {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
        };

        int playerRow = 4;
        int playerCol = 5;

        Scanner input = new Scanner(System.in);
        while (true) {
            for (char[] row : map) {
                for (char c : row) {
                    System.out.print(c);
                }
                System.out.println();
            }

            System.out.println("请移动方向键(上:W,下:S,左:A,右:D):");
            char direction = input.next().charAt(0);

            int newRow = playerRow;
            int newCol = playerCol;

            switch (direction) {
                case 'w':
                case 'W':
                    newRow--;
                    break;
                case 's':
                case 'S':
                    newRow++;
                    break;
                case 'a':
                case 'A':
                    newCol--;
                    break;
                case 'd':
                case 'D':
                    newCol++;
                    break;
                default:
                    System.out.println("无效的移动方向,请重新输入!");
                    continue;
            }

            if (map[newRow][newCol] == ' ') {
                map[playerRow][playerCol] = ' ';
                map[newRow][newCol] = '@';
                playerRow = newRow;
                playerCol = newCol;
            } else if (map[newRow][newCol] == 'O') {
                int nextRow = newRow + (newRow - playerRow);
                int nextCol = newCol + (newCol - playerCol);

                if (map[nextRow][nextCol] == ' ') {
                    map[playerRow][playerCol] = ' ';
                    map[newRow][newCol] = '@';
                    map[nextRow][nextCol] = 'O';
                    playerRow = newRow;
                    playerCol = newCol;
                } else {
                    System.out.println("无法移动箱子,请重新输入移动方向!");
                }
            } else {
                System.out.println("无法移动,请重新输入移动方向!");
            }

            if (isGameCompleted(map)) {
                System.out.println("恭喜你成功完成了游戏!");
                break;
            }
        }
    }

    public static boolean isGameCompleted(char[][] map) {
        for (char[] row : map) {
            for (char c : row) {
                if (c == 'X') {
                    return false;
                }
            }
        }
        return true;
    }

}

在上述推箱子小游戏示例中,我们创建了一个基于二维数组的推箱子小游戏。在游戏开始时,我们定义了地图(由#、空格、人物@、箱子O和目标点X等字符组成)和玩家起始位置。然后,我们使用Java的控制台输入功能来实现游戏的交互式操作。当玩家按下方向键时,程序将根据用户的输入来移动人物或箱子,并检查游戏是否完成。

注意:这只是一个简单的推箱子小游戏示例,您可以根据需要添加更多的功能和逻辑来创作自己的游戏项目。例如,您可以添加关卡选择、难度调整、地图编辑器等更高级的功能,使游戏更具挑战性和趣味性。

此外,您还可以通过使用JavaFX或其他游戏引擎来创建更丰富的游戏界面和交互效果。这些工具提供了更多的图形化控件和视觉效果,可以帮助您快速构建复杂的游戏场景和动画效果。

总之,推箱子小游戏是一个非常受欢迎的益智类游戏,它不仅可以提高玩家的空间想象能力和逻辑思维能力,也是学习Java编程语言和控制台应用程序开发的绝佳案例。