it Завдання Завдання з мови C#: Гра «Хрестики Нолики» у консолі
Завдання з мови C#: Гра «Хрестики Нолики» у консолі

Завдання з мови C#: Гра «Хрестики Нолики» у консолі

14 899
07 лютого 2024 в 08:11

Розглянемо цікаву задачу розробки гри «Хрестики Нолики» мовою C#. Наш проект запускатиметься в консолі і вимагатиме креативне мислення для вирішення завдання.

Ваше завдання — реалізувати консольну гру «Хрестики Нолики» з використанням мови програмування C#. Вам потрібно створити ігрове поле, де два гравці можуть по черзі робити ходи і ставити свої знаки ("X" або "O") у вільні комірки. Гра повинна продовжуватися доти, доки один із гравців не виграє, заповнивши вертикалі, горизонталі або діагоналі трьома своїми знаками поспіль, або поки не настане нічия.


Вимоги:

  1. Використовуйте мову програмування C# для реалізації гри.
  2. Створіть ігрове поле 3x3, де кожен осередок позначений числом від 1 до 9.
  3. Реалізуйте механізм почергового ходу двох гравців. Перший гравець ставить "X", другий — "O".
  4. Перевірте кожен хід на наявність виграшної комбінації або наступ нічиї.
  5. Виведіть на консоль поточний стан ігрового поля після кожного ходу.


Приклад реалізації проекту:



Підказки:

  • Використовуйте масив для представлення ігрового поля.
  • Реалізуйте функції для відображення поточного стану поля, перевірки на виграш та перевірки на нічию.
  • Використовуйте цикл для послідовного ходу кожного гравця.
  • Забезпечте перевірку коректності введення номера осередку та наявності вільного місця перед кожним ходом.

Це завдання дозволить вам застосувати навички роботи з масивами, умовами, циклами та функціями на практиці, а також створити просту, але функціональну консольну гру. Успіхів!


Розв'язання задачі

Для вирішення цього завдання вам потрібно буде задіяти наступний код:

using System;

class TicTacToe
{
	static char[] board = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
	static int currentPlayer = 1; // 1 - хрестики, 2 - нулики

	static void Main()
	{
		int choice;
		bool validInput;

		do
		{
			Console.Clear();
			DrawBoard();

			Console.WriteLine($"Гравець {currentPlayer}, введіть номер комірки:");

			// Перевіряємо коректність введення: число від 1 до 9, і комірка не повинна бути зайнята
			validInput = int.TryParse(Console.ReadLine(), out choice) && choice >= 1 && choice <= 9 && board[choice - 1] != 'X' && board[choice - 1] != 'O';

			if (validInput)
			{
				// Заповнюємо комірку поточним символом (X або O)
				board[choice - 1] = (currentPlayer == 1) ? 'X' : 'O';

				// Перевіряємо на наявність виграшної комбінації
				if (CheckForWin())
				{
					Console.Clear();
					DrawBoard();
					Console.WriteLine($"Переміг гравець {currentPlayer}!");
					break;
				}

				// Перевіряємо на наступ нічиєї
				if (CheckForDraw())
				{
					Console.Clear();
					DrawBoard();
					Console.WriteLine("Нічия!");
					break;
				}

				// Змінюємо поточного гравця
				currentPlayer = (currentPlayer == 1) ? 2 : 1;
			}
			else
				Console.WriteLine("Некоректне введення. Спробуйте знову.");

		} while (true);
	}

	// Виводимо поточний стан ігрового поля
	static void DrawBoard()
	{
		Console.WriteLine($" {board[0]} | {board[1]} | {board[2]} ");
		Console.WriteLine("-----------");
		Console.WriteLine($" {board[3]} | {board[4]} | {board[5]} ");
		Console.WriteLine("-----------");
		Console.WriteLine($" {board[6]} | {board[7]} | {board[8]} ");
	}

	// Перевіряємо на виграш
	static bool CheckForWin()
	{
		return (board[0] == board[1] && board[1] == board[2]) ||
			(board[3] == board[4] && board[4] == board[5]) ||
			(board[6] == board[7] && board[7] == board[8]) ||
			(board[0] == board[3] && board[3] == board[6]) ||
			(board[1] == board[4] && board[4] == board[7]) ||
			(board[2] == board[5] && board[5] == board[8]) ||
			(board[0] == board[4] && board[4] == board[8]) ||
			(board[2] == board[4] && board[4] == board[6]);
	}

	// Перевіряємо на нічию
	static bool CheckForDraw()
	{
		// Перевіряємо, чи залишилися вільні комірки
		foreach (char cell in board)
		{
			if (cell != 'X' && cell != 'O')
				return false;
		}
		return true;
	}
}

Більше цікавих новин

Коментарі
Додати коментар

Поки що коментарів немає