Оконное приложение для игры в крестики-нолики.
Предоставляет два режима игры: против человека и против компьютера. Компьютер имеет два эвристических алгоритма выбора хода: минимакс и минимакс с альфа-бета отсечением.
Оптимизированный алгоритм после «прохода» по одной из ветвей дерева решений «отсекает» ветви, заведомо не имеющие оптимального решения, относительно коэффициентов альфа и бета, полученных на первом проходе. Альфа — это минимально возможная оценка, которую может получить максимизирующий игрок, инициализируется значением минус бесконечности и наоборот. Если в одном из узлов ветви значения альфа больше либо равно бета, найден ход, который гарантирует победу максимизирующему игроку. Если значения этих параметров в текущем узле не улучшаются, ветвь не следует рассматривать, поскольку все ее «потомки», как и она сама, не содержат оптимального решения. Глубина прохода задается при вызове функции ComputerPlayer.MinMaxAlphaBeta.
public static (int, (int, int)) MinMaxAlphaBeta(GameBoard board, bool isMaximizing, int depth = 10, int alpha = -int.MaxValue, int beta = int.MaxValue)
{
...
}
Так как работа алгоритма может быть достаточно продолжительной, во избежание "заморозки" интерфейса, вызовы реализованы асинхронно.