C#实现推箱子

  1. 定义游戏盘面

首先,需要定义游戏盘面,可以用二维数组来表示。数组中的每个元素代表一个位置,可以是空地、墙壁、箱子或目标位置。

char[,] board = new char[10, 10] {
    {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
    {'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
    {'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
    {'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
    {'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
    {'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
    {'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
    {'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
    {'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
    {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
};
  1. 定义玩家和箱子的位置

需要记录玩家和箱子的位置,可以用两个变量来表示。初始位置可以通过遍历游戏盘面数组得到。

int playerX = 1, playerY = 1;
int boxX = 2, boxY = 1;

for (int i = 0; i < board.GetLength(0); i++) {
    for (int j = 0; j < board.GetLength(1); j++) {
        if (board[i, j] == '@') {  // 玩家的初始位置
            playerX = i;
            playerY = j;
        } else if (board[i, j] == '$') {  // 箱子的初始位置
            boxX = i;
            boxY = j;
        }
    }
}
  1. 实现移动

玩家的移动可以通过键盘控制,箱子的移动可以通过玩家的移动来实现。需要对移动进行限制,如不能穿墙、不能推动两个箱子等。

while (true) {
    // 监听键盘输入
    var key = Console.ReadKey(true);
    int dx = 0, dy = 0;  // 移动距离
    switch (key.Key) {
        case ConsoleKey.UpArrow:
            dy = -1;
            break;
        case ConsoleKey.DownArrow:
            dy = 1;
            break;
        case ConsoleKey.LeftArrow:
            dx = -1;
            break;
        case ConsoleKey.RightArrow:
            dx = 1;
            break;
    }

    // 计算新位置
    int newPlayerX = playerX + dx, newPlayerY = playerY + dy;
    int newBoxX = boxX, newBoxY = boxY;
    if (newPlayerX == boxX && newPlayerY == boxY) {
        newBoxX += dx;
        newBoxY += dy;
    }

    // 判断新位置是否合法
    if (board[newPlayerX, newPlayerY] == '.') {
        playerX = newPlayerX;
        playerY = newPlayerY;
    }
    if (board[newBoxX, newBoxY] == '.' && (newBoxX != boxX || newBoxY != boxY)) {
        boxX = newBoxX;
        boxY = newBoxY;
    }

    // 判断是否胜利
    bool isWin = true;
    for (int i = 0; i < board.GetLength(0); i++) {
        for (int j = 0; j < board.GetLength(1); j++) {
            if (board[i, j] == '.' || board[i, j] == '+') {
                isWin = isWin && (i != boxX || j != boxY);
            }
        }
    }
    if (isWin) {
        Console.WriteLine("You win!");
        break;
    }
}
  1. 绘制游戏界面

最后,需要根据游戏盘面和玩家箱子的位置来绘制游戏界面。

for (int i = 0; i < board.GetLength(0); i++) {
    for (int j = 0; j < board.GetLength(1); j++) {
        if (i == playerX && j == playerY) {
            Console.Write('@');  // 玩家
        } else if (i == boxX && j == boxY) {
            Console.Write('$');  // 箱子
        } else {
            Console.Write(board[i, j]);  // 静态元素
        }
    }
    Console.WriteLine();
}

猜你喜欢

转载自blog.csdn.net/Steel_nails/article/details/132827102
今日推荐