Прояви смекалку: Определить победителя в Крестики-Нолики
Теория и практика | создано: 12.03.2019 | опубликовано: 12.03.2019 | обновлено: 13.01.2024 | просмотров: 2236
Есть интересная задача из области программирования игр. В частности, речь идет об игре "Крестики-Нолики". Давайте предположим, что вам требуется определить победителя после каждого кода?
Постановка задачи
Предположим, что у вас есть 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: Свой вариант решения я покажу позже на видео. (ссылка позже)