c#推箱子代码
时间: 2023-07-02 10:05:17 浏览: 93
以下是一个简单的 C# 推箱子游戏的代码示例,仅供参考:
```csharp
using System;
using System.Collections.Generic;
namespace PushBoxGame
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Welcome to Push Box Game!");
// 初始化地图和玩家位置
char[,] map = new char[,] {
{ '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' },
{ '#', ' ', ' ', ' ', ' ', '#', ' ', ' ', ' ', '#' },
{ '#', ' ', ' ', ' ', ' ', '#', ' ', 'X', ' ', '#' },
{ '#', ' ', ' ', ' ', ' ', '#', ' ', ' ', ' ', '#' },
{ '#', '#', '#', '#', ' ', '#', ' ', ' ', ' ', '#' },
{ '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#' },
{ '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#' },
{ '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#' },
{ '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#' },
{ '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' }
};
int playerX = 4;
int playerY = 5;
while (true)
{
// 显示地图
DisplayMap(map, playerX, playerY);
// 获取玩家输入
Console.Write("Enter your move (WASD): ");
ConsoleKeyInfo key = Console.ReadKey();
Console.WriteLine();
// 根据玩家输入移动玩家
int dx = 0;
int dy = 0;
switch (key.Key)
{
case ConsoleKey.W:
dy = -1;
break;
case ConsoleKey.A:
dx = -1;
break;
case ConsoleKey.S:
dy = 1;
break;
case ConsoleKey.D:
dx = 1;
break;
}
int newPlayerX = playerX + dx;
int newPlayerY = playerY + dy;
// 检查新的玩家位置是否合法
if (IsPositionValid(map, newPlayerX, newPlayerY))
{
// 如果新的玩家位置是空地,则直接移动玩家
if (map[newPlayerY, newPlayerX] == ' ')
{
playerX = newPlayerX;
playerY = newPlayerY;
}
// 如果新的玩家位置是箱子,则需要检查箱子是否可以移动
else if (map[newPlayerY, newPlayerX] == 'X')
{
int newBoxX = newPlayerX + dx;
int newBoxY = newPlayerY + dy;
if (IsPositionValid(map, newBoxX, newBoxY) && map[newBoxY, newBoxX] == ' ')
{
map[newPlayerY, newPlayerX] = ' ';
map[newBoxY, newBoxX] = 'X';
playerX = newPlayerX;
playerY = newPlayerY;
}
}
}
// 检查是否胜利
if (IsGameWon(map))
{
Console.WriteLine("Congratulations, you won!");
break;
}
}
}
// 显示地图和玩家位置
static void DisplayMap(char[,] map, int playerX, int playerY)
{
for (int y = 0; y < map.GetLength(0); y++)
{
for (int x = 0; x < map.GetLength(1); x++)
{
if (x == playerX && y == playerY)
{
Console.Write('@');
}
else
{
Console.Write(map[y, x]);
}
}
Console.WriteLine();
}
}
// 检查位置是否合法
static bool IsPositionValid(char[,] map, int x, int y)
{
if (x < 0 || x >= map.GetLength(1) || y < 0 || y >= map.GetLength(0))
{
return false;
}
return map[y, x] != '#';
}
// 检查是否胜利
static bool IsGameWon(char[,] map)
{
for (int y = 0; y < map.GetLength(0); y++)
{
for (int x = 0; x < map.GetLength(1); x++)
{
if (map[y, x] == 'X')
{
return false;
}
}
}
return true;
}
}
}
```
在这个示例中,我们使用一个二维字符数组来表示地图,其中 `' '` 表示空地,`'#'` 表示墙,`'X'` 表示箱子。玩家的位置用 `playerX` 和 `playerY` 来表示。每次循环中,我们首先显示地图和玩家位置,然后获取玩家输入,并根据输入移动玩家。如果新的玩家位置是空地,则直接移动玩家。如果新的玩家位置是箱子,则需要检查箱子是否可以移动。移动箱子后,我们需要更新地图和玩家位置,然后检查是否胜利。如果所有箱子都被推到目标位置,则游戏胜利。