Типичный алгоритм крестики-нолики должен выглядеть следующим образом:
Доска: вектор из девяти элементов, представляющий доску. Мы храним 2 (с указанием
Пусто), 3 (указывает на X) или 5 (указывает на O).
Поворот: целое число, указывающее, какой ход игры собирается сыграть.
1-й ход будет обозначен 1, последний - 9.
Алгоритм
Основной алгоритм использует три функции.
Make2: возвращает 5, если центральный квадрат доски пуст, т.е. если board[5]=2
. В противном случае эта функция возвращает любой неугловой квадрат (2, 4, 6 or 8)
.
Posswin(p)
: Возвращает 0, если игрок p
не может выиграть в следующий ход; в противном случае возвращается номер квадрата, который составляет выигрышный ход. Эта функция позволит программе как побеждать, так и блокировать победу противников. Эта функция работает путем проверки каждой строки, столбца и диагонали. Умножая значения каждого квадрата вместе для всей строки (или столбца или диагонали), можно проверить возможность выигрыша. Если продукт равен 18
(3 x 3 x 2
), тогда X
может выиграть. Если продукт равен 50
(5 x 5 x 2
), тогда O может победить. Если найдена выигрышная строка (столбец или диагональ), в ней можно определить пустой квадрат и номер этой клетки возвращается этой функцией.
Go (n)
: делает ход в квадрате n. эта процедура устанавливает на доске [n]
значение 3, если поворот нечетный, или 5, если поворот четный. Поворот также увеличивается на единицу.
Алгоритм имеет встроенную стратегию для каждого хода. Это делает нечетным
ход, если он играет X
, ход с четным номером, если он играет O.
Turn = 1 Go(1) (upper left corner).
Turn = 2 If Board[5] is blank, Go(5), else Go(1).
Turn = 3 If Board[9] is blank, Go(9), else Go(3).
Turn = 4 If Posswin(X) is not 0, then Go(Posswin(X)) i.e. [ block opponent’s win], else Go(Make2).
Turn = 5 if Posswin(X) is not 0 then Go(Posswin(X)) [i.e. win], else if Posswin(O) is not 0, then Go(Posswin(O)) [i.e. block win], else if Board[7] is blank, then Go(7), else Go(3). [to explore other possibility if there be any ].
Turn = 6 If Posswin(O) is not 0 then Go(Posswin(O)), else if Posswin(X) is not 0, then Go(Posswin(X)), else Go(Make2).
Turn = 7 If Posswin(X) is not 0 then Go(Posswin(X)), else if Posswin(X) is not 0, then Go(Posswin(O)) else go anywhere that is blank.
Turn = 8 if Posswin(O) is not 0 then Go(Posswin(O)), else if Posswin(X) is not 0, then Go(Posswin(X)), else go anywhere that is blank.
Turn = 9 Same as Turn=7.
Я использовал это. Дайте мне знать, что вы, ребята, чувствуете.