- 定义游戏盘面
首先,需要定义游戏盘面,可以用二维数组来表示。数组中的每个元素代表一个位置,可以是空地、墙壁、箱子或目标位置。
char[,] board = new char[10, 10] {
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
};
- 定义玩家和箱子的位置
需要记录玩家和箱子的位置,可以用两个变量来表示。初始位置可以通过遍历游戏盘面数组得到。
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;
}
}
}
- 实现移动
玩家的移动可以通过键盘控制,箱子的移动可以通过玩家的移动来实现。需要对移动进行限制,如不能穿墙、不能推动两个箱子等。
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;
}
}
- 绘制游戏界面
最后,需要根据游戏盘面和玩家箱子的位置来绘制游戏界面。
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();
}