Прояви смекалку: Определить победителя в Крестики-Нолики
Теория и практика | создано: 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: Свой вариант решения я покажу позже на видео. (ссылка позже)