Самоучитель VBA


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



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




Крестик и нолик, которые выводятся на игровом поле, содержатся в файлах cross.bmp и ou.bmp, а их образы можно создать при помощи любого графического редактора.

В связи с небольшим числом возможных стратегий в этой игре, составляя программу можно пойти по пути наименьшего сопротивления: а именно, применить подход простого перебора вариантов возможных действий. Если бы в игре было большое число стратегий, то этот подход был бы неприменим, т. к. программа не смогла бы играть в режиме реального времени.

Стратегия компьютера в игре крестики—нолики очень проста:

  • Если в игре сложилась ситуация, когда на очередном ходе он может проставить в ряд три нолика, компьютер ставит их и выигрывает.
  • Если игрок на очередном ходе угрожает поставить подряд три крестика, а у компьютера есть возможность помешать этому, поставив нолик, он это делает.
  • Первый и второй ход игры являются основными и здесь компьютер должен действовать осторожно. Поэтому некоторые особые ситуации в них программируются отдельно.
  • После каждого хода как игрока, так и компьютера необходимо производить проверку на возможный результат игры.

Обсудим, как приведенная ниже программа решает описанную задачу и что в ней происходит.

UserForm Initialize

  1. Активизирует диалоговое окно.
  2. Очищает все надписи от рисунков и текста, обнуляет все переменные.

Нажатие кнопки Переиграть запускает на выполнение процедуру

CommandButtonl_Click

Очищает все надписи от рисунков и текста, обнуляет все переменные.

Нажатие кнопки выход запускает на

выполнение процедуру

CoramandButton2_Click

Закрывает диалоговое окно.

От процедуры

Labell_DblClick

до

Label9 DblClick

При двойном щелчке в ячейке игрового поля ставит крестик при условии, что эта ячейка была ранее пустой. Проверяет, привел ли этот ход к победе игрока, если да, то выдается соответствующее сообщение и игра завершается.

Если нет, то компьютер делает свой ответный ход. Проверяет, привел ли ход компьютера к его победе, если да, то выдается соответствующее сообщение (Рисунок У11.3) и игра завершается.

Strategy 1

и

Strategy

Генерируют первый и последующие ходы соответственно.

Проверка

Проверяет, нет ли в игре победителей.

НачальноеСостояние

Очищает все надписи от рисунков и текста, обнуляет все переменные.

Состояние

В массиве Статус отмечаются расставленные в ячейках игрового — 10, а пусто — 0. Процедура Состояние находит суммы элементов массива на диагоналях, в строках и столбцах.

Диагональ!

Определяет в зависимости от состояние, надо ли компьютеру ходить по главной диагонали и, если надо, то в какую ячейку.

Диагональ 2

Определяет в зависимости от состояние, надо ли компьютеру ходить по второй диагонали и, если надо, то в какую ячейку.

Бок, Верх

Определяет в зависимости от Состояние, надо ли компьютеру ходить и, если надо, то в какую ячейку.









Начало  Назад  Вперед