У11 2 Пример партии игры в крестики—нолики после второго шага игры
Рисунок У11.2. Пример партии игры в крестики—нолики после второго шага игры

Крестик и нолик, которые выводятся на игровом поле, содержатся в файлах cross.bmp и ou.bmp, а их образы можно создать при помощи любого графического редактора.
В связи с небольшим числом возможных стратегий в этой игре, составляя программу можно пойти по пути наименьшего сопротивления: а именно, применить подход простого перебора вариантов возможных действий. Если бы в игре было большое число стратегий, то этот подход был бы неприменим, т. к. программа не смогла бы играть в режиме реального времени.
Стратегия компьютера в игре крестики—нолики очень проста:
- Если в игре сложилась ситуация, когда на очередном ходе он может проставить в ряд три нолика, компьютер ставит их и выигрывает.
- Если игрок на очередном ходе угрожает поставить подряд три крестика, а у компьютера есть возможность помешать этому, поставив нолик, он это делает.
- Первый и второй ход игры являются основными и здесь компьютер должен действовать осторожно. Поэтому некоторые особые ситуации в них программируются отдельно.
- После каждого хода как игрока, так и компьютера необходимо производить проверку на возможный результат игры.
Обсудим, как приведенная ниже программа решает описанную задачу и что в ней происходит.
UserForm Initialize |
|
||
Нажатие кнопки Переиграть запускает на выполнение процедуру CommandButtonl_Click |
Очищает все надписи от рисунков и текста, обнуляет все переменные. |
||
Нажатие кнопки выход запускает на выполнение процедуру CoramandButton2_Click |
Закрывает диалоговое окно. |
||
От процедуры Labell_DblClick до Label9 DblClick |
При двойном щелчке в ячейке игрового поля ставит крестик при условии, что эта ячейка была ранее пустой. Проверяет, привел ли этот ход к победе игрока, если да, то выдается соответствующее сообщение и игра завершается. Если нет, то компьютер делает свой ответный ход. Проверяет, привел ли ход компьютера к его победе, если да, то выдается соответствующее сообщение (Рисунок У11.3) и игра завершается. |
||
Strategy 1 и Strategy |
Генерируют первый и последующие ходы соответственно. |
||
Проверка |
Проверяет, нет ли в игре победителей. |
||
НачальноеСостояние |
Очищает все надписи от рисунков и текста, обнуляет все переменные. |
||
Состояние |
В массиве Статус отмечаются расставленные в ячейках игрового — 10, а пусто — 0. Процедура Состояние находит суммы элементов массива на диагоналях, в строках и столбцах. |
||
Диагональ! |
Определяет в зависимости от состояние, надо ли компьютеру ходить по главной диагонали и, если надо, то в какую ячейку. |
||
Диагональ 2 |
Определяет в зависимости от состояние, надо ли компьютеру ходить по второй диагонали и, если надо, то в какую ячейку. |
||
Бок, Верх |
Определяет в зависимости от Состояние, надо ли компьютеру ходить и, если надо, то в какую ячейку. |
||