Понедельник, 29.04.2024, 04:06
Приветствую Вас Гость

Объектно-ориентированное программирование

Меню сайта
Категории раздела
Наш опрос
Оцените мой сайт
Всего ответов: 2
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » 3. Практические приемы ООП на VBA » Игра в крестики и нолики

Тема: Игра в крестики и нолики

Тема: Игра в крестики и нолики

Цель урока

В данном уроке запрограммируем игру с компьютером в крестики—нолики на игровом поле размером 3x3 условных клетки. Эта не такая уж тривиальная игра является хорошим примером, чтобы легко научить компьютер играть и воспользоваться возможностью выиграть, если вы, по невнимательности, дадите ему этот шанс.

Конструируя данное приложение, вы на практике освоите следующие операции:

  • Удаление рисунка из элемента управления
  • Выполнение учета количества щелчков по элементу управления
  • Управление видимостью границ элемента управления
  • Создание игрового поля

Практика

В редакторе форм создадим диалоговое окно крестики нолики

(рис. У11.1). Поле игры будут образовывать девять элементов управления Caption (надпись). Для видимости границ элементов управления Caption установите свойствоBorderStyle равным fmBorderStyleSingle.

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

Рис. У11.1. Диалоговое окно Крестики — нолики в редакторе форм

Итак, в нашей игре первый ход за пользователем. Ход осуществляется двойным щелчком по игровому полю. Если игровое поле пусто, то в нем отображается крестик. Компьютер мгновенно отвечает на ход игрока, постановкой нолика в другое игровое поле и т. д. О результате игры компьютер информирует пользователя. При желании сыграть еще одну игру с компьютером, нажмите кнопку переиграть, которая очистит игровые поля. На рис. У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

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

 
 

Бок, Верх

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

 
       

 

Рис. У11.3. Пример сообщения о результате игры

' Переменные уровня модуля

'

Dim Поле (1 То 3, 1 То 3) As Ob j ect

Dim Статус(1 To 3, 1 To 3) As Integer

Dim k As Integer

Dim i As Integer

Dim j As Integer

Dim Su(0 To 4, 0 To 4} As Integer

Самостоятельное задание

Разработать программу игры крестики—нолики, в которой в зависимости от установок параметров игры первый ход может делать либо компьютер, либр игрок (рис. У11.4). Игрок также может выбрать, что он ставит в игровые поля: крестики или нолики. Программа ведет учет числа побед как игрока, так и компьютера. Программа также подсчитывает число ничейных партий.

Рис. У11.4. Диалоговое окно Крестики — Нолики

Категория: Игра в крестики и нолики | Добавил: Efes16rus (25.01.2015)
Просмотров: 303 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Вход на сайт
Поиск
Друзья сайта