Отредактируй код так, чтобы он соответствовал правилам:
1. В игре не предполагаются анимации
2. Игра должна определять победителя и проигравшего, после чего по желанию игрока, перезапускается игровой процесс.
using System;
class Program
{
static void Main(string[] args)
{
bool playAgain = true;
while (playAgain)
{
// Игрок против компьютера
Console.WriteLine("Выберите сложность: легкий(1)/сложный(2)");
int difficulty = int.Parse(Console.ReadLine());
// Создаем доску и заполняем ее фишками
int[,] board = new int[8, 8] {
{ 0, 1, 0, 1, 0, 1, 0, 1 },
{ 1, 0, 1, 0, 1, 0, 1, 0 },
{ 0, 1, 0, 1, 0, 1, 0, 1 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 2, 0, 2, 0, 2, 0, 2, 0 },
{ 0, 2, 0, 2, 0, 2, 0, 2 },
{ 2, 0, 2, 0, 2, 0, 2, 0 }
};
// Определяем, чей ход
int player = 1;
// Цикл игры
while (true)
{
// Выводим доску
Console.WriteLine(" a b c d e f g h");
Console.WriteLine(" +----------------+");
for (int i = 0; i < 8; i++)
{
Console.Write(i+1 + " |");
for (int j = 0; j < 8; j++)
{
if (board[i, j] == 0)
{
Console.Write(" ");
}
else if (board[i, j] == 1)
{
Console.Write("o");
}
else if (board[i, j] == 2)
{
Console.Write("x");
}
Console.Write("|");
}
Console.WriteLine(" " + (i+1));
}
Console.WriteLine(" +----------------+");
Console.WriteLine(" a b c d e f g h");
// Проверяем, есть ли у текущего игрока ходы
bool hasMoves = false;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (board[i, j] == player)
{
if (CanMove(board, player, i, j))
{
hasMoves = true;
break;
}
}
}
if (hasMoves)
{
break;
}
}
// Если ходов нет, игра закончена
if (!hasMoves)
{
int winner = (player == 1) ? 2 : 1;
Console.WriteLine("Игрок " + winner + " выиграл!");
break;
}
// Если текущий игрок - компьютер, он делает ход
if (player == 2)
{
int[,] move = FindBestMove(board, player, difficulty);
if (move != null)
{
board[move[1], move[0]] = 2;
board[move[3], move[2]] = 0;
if (Math.Abs(move[0] - move[2]) == 2)
{
int cx = (move[0] + move[2]) / 2;
int cy = (move[1] + move[3]) / 2;
board[cy, cx] = 0;
}
Console.WriteLine("Ход компьютера: " + ConvertToPosition(move));
}
}
else // Иначе, ждем, пока текущий игрок сделает ход
{
bool moved = false;
while (!moved)
{
Console.Write("Ход игрока " + player + " (например, b3-c4): ");
string move = Console.ReadLine();
// Проверяем, что введенный ход корректный
if (move.Length != 5 || move[2] != '-' ||
move[0] < 'a' || move[0] > 'h' || move[1] < '1' || move[1] > '8' ||
move[3] < 'a' || move[3] > 'h' || move[4] < '1' || move[4] > '8')
{
Console.WriteLine("Некорректный ход! Попробуйте еще раз.");
continue;
}
// Переводим координаты из буквенно-цифрового вида в числовой
int x1 = move[0] - 'a';
int y1 = move[1] - '1';
int x2 = move[3] - 'a';
int y2 = move[4] - '1';
// Проверяем, что на начальной позиции стоит фишка текущего игрока
if (board[y1, x1] != player)
{
Console.WriteLine("На этой позиции нет вашей фишки! Попробуйте еще раз.");
continue;
}
// Проверяем, что ход корректный
if (!IsValidMove(board, player, x1, y1, x2, y2))
{
Console.WriteLine("Неверный ход! Попробуйте еще раз.");
continue;
}
// Делаем ход
board[y2, x2] = player;
board[y1, x1] = 0;
// Удаляем фишку, если был сделан ход через противника
if (Math.Abs(x2 - x1) == 2)
{
int cx = (x1 + x2) / 2;
int cy = (y1 + y2) / 2;
board[cy, cx] = 0;
}
// Проверяем, может ли игрок продолжить ход
if (Math.Abs(x2 - x1) == 2 && CanJump(board, player, x2, y2))
{
Console.WriteLine("Вы съели фишку противника! Можете продолжить ход.");
x1 = x2;
y1 = y2;
continue;
}
else if (CanMove(board, player, x2, y2))
{
Console