- ゲームボードを定義する
まず、2 次元配列で表すことができるゲーム ボードを定義する必要があります。配列内の各要素は、空のスペース、壁、ボックス、またはターゲットの場所などの場所を表します。
char[,] board = new char[10, 10] {
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
};
- プレーヤーと胸の位置を定義する
プレーヤーとボックスの位置を記録する必要があり、これは 2 つの変数で表すことができます。初期位置は、ゲーム ボード配列を横断することによって取得できます。
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;
}
}
}
- モバイルを有効にする
プレイヤーの動きはキーボードで制御でき、ボックスの動きはプレイヤーの動きで実現できます。壁を通り抜けられない、箱を2つ押してはいけないなど、移動を制限する必要がある。
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();
}