Прояви смекалку: Определить победителя в Крестики-Нолики

Теория и практика | создано: 12.03.2019 | опубликовано: 12.03.2019 | обновлено: 13.01.2024 | просмотров: 1942

Есть интересная задача из области программирования игр. В частности, речь идет об игре "Крестики-Нолики". Давайте предположим, что вам требуется определить победителя после каждого кода?

Постановка задачи

Предположим, что у вас есть List<int> массив размером 9, который символизирует ячейки 3х3 игрового поля. Вопрос: Как посчитать при каждом ходе победный ход или нет? Маленькое замечание, проверить это нужно при помощи одно LINQ-запроса, который должен вернуть true/false, как результат выполнения.

void Main()
{
    // Игровое поле "Крестики-Нолики"
    // -------------------------
    // |   0   |   1   |   2   |
    // -------------------------
    // |   3   |   4   |   5   |
    // -------------------------
    // |   6   |   7   |   8   |
    // -------------------------

	// Ячейки которые заполняет первый игрок
    var player1Cells = new List<int>();

	// Ячейки, которые заполняет второй игрок
	var player2Cells = new List<int>();

	// ход 1
	player1Cells.Add(4);
	var isWinner1 = WinnerChecker.HasWinner(player1Cells);
	if (isWinner1)
	{
		Console.WriteLine("Player 1 WIN!");
	}

	// ход 2
	player2Cells.Add(0)
	var isWinner2 = WinnerChecker.HasWinner(player2Cells);
	if (isWinner2
	{
		Console.WriteLine("Player 2 WIN!");
	}

	// ход 3
	// ... и так далее пока не будет выявлен
	// победитель, который проверяется после каждого хода каждого игрока
}

Я максимально упростил реализацию бизнес-логики, чтобы сделать акцент на один метод, написать который и требуется написать. По большому счету, задача выявить зависимость ячеек при определении выигрышных комбинаций. Первый листинг - это консольное приложение, вернее его первая часть. А вот вторая часть, с классом и методом, реализацию которого я и жду от вас. Регения отправляйте через обратную связь этого блога или в группе в контакте

Исходные данные

public static class WinnerChecker
{
    public static bool HasWinner(List<int> currentCells)
    {
        return ???
    }
}

Напишите пожалуйста реализацию в выделенной 5 строке. Очень интересно посмотреть, какие существуют варианты. Желательно, чтобы был задействован LINQ.

Подсказка: моя реализация заняла всего 5 строк.

PS: Свой вариант решения я покажу позже на видео. (ссылка позже)