Код игры

drex123

Новичок
Статус
offline
Регистрация
01.06.2023
Сообщения
7
Репутация
0
Напиши полный, рабочий код игры "Уголки" на языке программирования C#
 

Garant [BOT]

Администратор
Статус
offline
Регистрация
15.11.2021
Сообщения
1,673
Репутация
297
// Уголки на C#

using System;

class Program
{
static void Main(string[] args)
{
// Создаем доску и заполняем ее фишками
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)
{
Console.WriteLine("Игрок " + player + " проиграл!");
Console.ReadKey();
return;
}

// Ждем, пока текущий игрок сделает ход
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.WriteLine("Ход сделан. Можете сделать еще один.");
continue;
}

// Ход завершен
moved = true;
}

// Переключаем игрока
player = (player == 1) ? 2 : 1;
}
}

// Проверяет, может ли фишка с координатами (x, y) сделать ход
static bool CanMove(int[,] board, int player, int x, int y)
{
if (board[y, x] != player)
{
return false;
}
if (player == 1)
{
if (y > 0)
{
if (x > 0 && board[y-1, x-1] == 0)
{
return true;
}
if (x < 7 && board[y-1, x+1] == 0)
{
return true;
}
}
}
else if (player == 2)
{
if (y < 7)
{
if (x > 0 && board[y+1, x-1] == 0)
{
return true;
}
if (x < 7 && board[y+1, x+1] == 0)
{
return true;
}
}
}
return false;
}

// Проверяет, может ли фишка с координатами (x1, y1) сделать ход на (x2, y2)
static bool IsValidMove(int[,] board, int player, int x1, int y1, int x2, int y2)
{
if (board[y2, x2] != 0)
{
return false;
}
if (player == 1 && (y2 > y1 || Math.Abs(x2 - x1) > 2))
{
return false;
}
if (player == 2 && (y2 < y1 || Math.Abs(x2 - x1) > 2))
{
return false;
}
if (Math.Abs(x2 - x1) == 1 && Math.Abs(y2 - y1) == 1)
{
return true;
}
if (Math.Abs(x2 - x1) == 2 && Math.Abs(y2 - y1) == 2)
{
int cx = (x1 + x2) / 2;
int cy = (y1 + y2) / 2;
if (board[cy, cx] == 3 - player)
{
return true;
}
}
return false;
}

// Проверяет, может ли фишка с координатами (x, y) съесть фишку противника
static bool CanJump(int[,] board, int player, int x, int y)
{
if (player == 1)
{
if (y > 1)
{
if (x > 1 && board[y-1, x-1] == 2 && board[y-2, x-2] == 0)
{
return true;
}
if (x < 6 && board[y-1, x+1] == 2 && board[y-2, x+2] == 0)
{
return true;
}
}
}
else if (player == 2)
{
if (y < 6)
{
if (x > 1 && board[y+1, x-1] == 1 && board[y+2, x-2] == 0)
{
return true;
}
if (x < 6 && board[y+1, x+1] == 1 && board[y+2, x+2] == 0)
{
return true;
}
}
}
return false;
}
}
 

drex123

Новичок
Статус
offline
Регистрация
01.06.2023
Сообщения
7
Репутация
0
// Уголки на C#

using System;

class Program
{
static void Main(string[] args)
{
// Создаем доску и заполняем ее фишками
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)
{
Console.WriteLine("Игрок " + player + " проиграл!");
Console.ReadKey();
return;
}

// Ждем, пока текущий игрок сделает ход
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.WriteLine("Ход сделан. Можете сделать еще один.");
continue;
}

// Ход завершен
moved = true;
}

// Переключаем игрока
player = (player == 1) ? 2 : 1;
}
}

// Проверяет, может ли фишка с координатами (x, y) сделать ход
static bool CanMove(int[,] board, int player, int x, int y)
{
if (board[y, x] != player)
{
return false;
}
if (player == 1)
{
if (y > 0)
{
if (x > 0 && board[y-1, x-1] == 0)
{
return true;
}
if (x < 7 && board[y-1, x+1] == 0)
{
return true;
}
}
}
else if (player == 2)
{
if (y < 7)
{
if (x > 0 && board[y+1, x-1] == 0)
{
return true;
}
if (x < 7 && board[y+1, x+1] == 0)
{
return true;
}
}
}
return false;
}

// Проверяет, может ли фишка с координатами (x1, y1) сделать ход на (x2, y2)
static bool IsValidMove(int[,] board, int player, int x1, int y1, int x2, int y2)
{
if (board[y2, x2] != 0)
{
return false;
}
if (player == 1 && (y2 > y1 || Math.Abs(x2 - x1) > 2))
{
return false;
}
if (player == 2 && (y2 < y1 || Math.Abs(x2 - x1) > 2))
{
return false;
}
if (Math.Abs(x2 - x1) == 1 && Math.Abs(y2 - y1) == 1)
{
return true;
}
if (Math.Abs(x2 - x1) == 2 && Math.Abs(y2 - y1) == 2)
{
int cx = (x1 + x2) / 2;
int cy = (y1 + y2) / 2;
if (board[cy, cx] == 3 - player)
{
return true;
}
}
return false;
}

// Проверяет, может ли фишка с координатами (x, y) съесть фишку противника
static bool CanJump(int[,] board, int player, int x, int y)
{
if (player == 1)
{
if (y > 1)
{
if (x > 1 && board[y-1, x-1] == 2 && board[y-2, x-2] == 0)
{
return true;
}
if (x < 6 && board[y-1, x+1] == 2 && board[y-2, x+2] == 0)
{
return true;
}
}
}
else if (player == 2)
{
if (y < 6)
{
if (x > 1 && board[y+1, x-1] == 1 && board[y+2, x-2] == 0)
{
return true;
}
if (x < 6 && board[y+1, x+1] == 1 && board[y+2, x+2] == 0)
{
return true;
}
}
}
return false;
}
}
Отредактируй код так, чтобы он соответствовал правилам:
1. В игре не предполагаются анимации
2. Игра должна определять победителя и проигравшего, после чего по желанию игрока, перезапускается игровой процесс.
 

Garant [BOT]

Администратор
Статус
offline
Регистрация
15.11.2021
Сообщения
1,673
Репутация
297
Отредактируй код так, чтобы он соответствовал правилам:
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