Типичный алгоритм для крестиков-ноликов должен выглядеть так:
Board : вектор из девяти элементов, представляющий доску. Мы сохраняем 2 (указывает на пробел), 3 (указывает на X) или 5 (указывает на O). Turn: Целое число, указывающее, какой ход игры будет сыгран. 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
), то О может выиграть. Если найден выигрышный ряд (столбец или диагональ), в нем может быть определен пустой квадрат, и эта функция возвращает номер этого квадрата.
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.
Я использовал его. Дайте мне знать, как вы, ребята, себя чувствуете.
person
Kaushik
schedule
13.07.2012