Как создать свою игру в жанре стратегии — Visual Basic 6
Как создать свою игру в жанре стратегии
С этой статьи я начну целую серию статей по созданию своей собственной игры в стиле лучших стратегий 90-х — 2000-х: Dune, Total Annihilation, Supreme Commander, StarCraft или например Warhammer 40,000. В ней будет что-то общее со всеми вышеназванными играми, но она будет чуть проще, конечно же. Ну и конечно же она будет в полном 2D. Хотя той же самой Дюне это не помешало стать одной из лучших стратегий, которые когда-либо выходили на свет.
И так, в этой серии статей я напишу, с какими сложностями я столкнулся, напишу варианты своего решения этих проблем и соответственно исходный код стратегии для компилятора, в котором я и писал игру — Visual Basic 6. Но даже если вы программируете на другом языке, материал вам все равно может оказаться полезным, так как я буду стараться описывать, что именно делает конкретный код и как работает.
Сразу скажу, что игра так и не была дописана до конца, так как я даже не ставил перед собой цели написать готовый продукт. Даже название так и не придумал — просто «Стратежка». Мне было интересно написание самого движка, который будет похож на стратегии того времени. Но и то, что получилось, мне очень даже нравится и сейчас. Можно сказать, я горжусь собой, что смог сотворить такое в школьном возрасте. Было реализовано множество сложнейших проблем и задач, которые меня и сейчас ставят в глубокий ступор. Но тогда я справился. Поэтому и хочу поделиться своими знаниями с другими людьми. Мало ли, кому-то пригодится, хотя бы тем же самым начинающим разработчикам игр.
Изначально я хотел сделать просто что-то похожее на стратегию используя лишь стандартные возможности и функции компилятора. Но со временем мне стало нравиться постепенно все усложнять, ставить перед собой новые, все более сложные задачи и цели и в итоге эта работа перестала быть обычным фаном и стала для меня настоящей гордостью, даже сейчас, видя весь объем проделанной работы, я слегка «фигею» (другого слова подобрать не смог).
Вот так выглядела одна из самых первый версий, сделанная из формы со стандартными кнопками, в которые я лишь добавил картинки:
Одна из первых версий Стратежки
А вот так выглядит финальная версия моей игры:
Финальная версия Стратежки
Согласитесь, разница огромна. Хотя и сейчас я бы еще много всего изменил, добавил, приукрасил, улучшил… Меня останавливает лишь одно — то, что вы можете увидеть на картинке выше, я делал в течение долгих и мучительных 4 месяцев, вечерами и ночами. Тогда я учился, вечерами свободного времени было более чем предостаточно, за исключением конечно того, что хоть иногда я ходил гулять 🙂 Сейчас столько времени я найти точно не смогу, постоянная работа, семья… В общем, может что-то еще и улучшу, да и то пока пишу эти статьи, но с головой в это дело уже точно не окунусь — мое время как программиста игр, пожалуй, прошло.
В следующей статье я сначала опишу основные особенности игры, экономику, возможности моего движка, а в уже последующих статьях буду рассказывать о всех основных фишках игро-движка подробнее. Короче говоря, материала явно получится не мало. Кто готов читать всё — оставайтесь на связи, постараюсь выкладывать статьи почаще.
В эту первую статью я буду добавлять ссылки на все остальные, здесь будет своего рода содержание всей серии статей по игре. Поэтому можете смело добавлять страницу в закладки, каждая новая статья серии здесь также отразится. Также планирую добавить на эту страницу ссылку на скачивание самой игры.
Серия статей по созданию игры в жанре стратегии — Стратежка:
Ссылки на скачивание игры:
Также хочу Вам представить ДЕЙСТВИТЕЛЬНО дешевый, но при этом качественный магазин электроники, в котором я сам неоднократно покупал компьютерные комплектующие (на 20.01.16 есть ноутбуки за 13 000 руб. что ОЧЕНЬ дешево в современных взаимоотношениях курсов Рубля к Доллару).
Довольно обидно, когда делаешь добрые дела, помогаешь кому-то и за это еще и каждый месяц несешь убытки. Если статья Вам понравилась, помогла или просто сэкономила время и средства, Вы можете помочь автору хотя бы в оплате хостинга. Ведь для Вас это может быть всего 5 или 10 рублей (не деньги), но если хотя бы часть читателей будет сознательна, блог будет самоокупаться. Я на этом не заработаю, но хотя бы хостинг смогу оплатить. Очень не хочется завешивать свой труд настырной навязчивой рекламой (это как «нагадить» в собственной квартире), поэтому прошу помощи у Вас.
QIWI-кошелек: 910-083-81-10 (инструкция на сайте Qiwi, подходит любой терминал).
WebMoney-кошелек: R400441386741 (в меню выбрать «Перевести» и указать кошелёк)
Яндекс.Кошелёк: 410012164738327
Так же, можно просто положить деньги на номер телефона 8 (910) 083-81-10 (с него я могу перевести деньги на хостинг). Но звонить на него можете не пытаться, он отключен.
Огромное спасибо за понимание и помощь!
Присоединяйтесь к нам Вконтакте, чтобы получить более оперативные ответы на свои вопросы, ПЕРВЫМИ читать новые статьи и обмениваться информацией с другими участниками группы!
Пишем игры на. VBA (Pt. 1)
Все мы знакомы с Excel. Вот и я, душный банковский служащий, что-то да слышал об этом инструменте.
Одни люди умеют лишь форматировать ячейки, другие создают клоны Doom, используя встроенный в Microsoft Office язык программирования.
Я не претендую на второй тип, но и к первым себя не отношу. Для меня Visual Basic for Applications, или VBA, стал тем первым ЯП, который заинтересовал и позволил уверовать в свои силы. Путешествие в этот интересный мир началось с автоматической записи макросов и разбора созданного программой кода.
Как начинающему программисту-самоучке, мне приходилось активно шерстить интернет в поисках решения возникающих проблем. Огромное коммьюнити, большое количество тематических сайтов и, на крайний случай, справка Microsoft помогали в решении практически любой проблемы.
Однако наступил такой момент, когда все рабочие задачи оказались решены и автоматизированы, а внутреннему программисту (ха-ха) все ещё хотелось чего-то большего.
Тогда меня осенило! В Excel ведь можно делать игры. Первая же найденная статья от программиста, который в армии клепал на основе VBA разные вещи, подтвердила мою теорию.
Эта серия статей не была задумана как обучающая (ведь я сам ещё учусь), но если что-нибудь изложенное будет полезно начинающим программистам, которые только погружаются в мир Visual Basic, то считайте, что я пополнил интернет одной полезной ссылкой.
Вторая цель создания цикла заключается в самообразовании и развитии навыков. Я буду ставить себе определенную цель, а потом исполнять ее наиболее приближенной к задумке.
К тому же где, как не в комментариях, мне доходчиво и культурным языком укажут на допущенные ошибки?
Я постараюсь объяснять все подробно, но без углубления в простейшие истины. Не буду рассказывать, что такое переменные, циклы или массивы. Всю эту информацию, изложенную доступным языком, можно найти в интернете.
В этих статьях я буду описывать процесс создания игр в Excel, начиная с простейших пятнашек и заканчивая глобальной RPG. Это позволит мне больше углубиться в тему, а вам поглумиться над неумехой-программистом. Или, в лучшем случае, забрать готовое решение на работу и скрывать безделье за мнимой подготовкой отчета. Ссылки на все исходные материалы будут в свободном доступе.
Темы первых статей цикла уже определены. В этой статье я расскажу, как сделать пятнашки в Excel. В следующий раз разберу создание игры в стиле Toon Blast.
Если вам, к моему удивлению, будет интересен такой формат, то пишите в комментариях, какого типа игры вы бы хотели, чтобы я реализовал на базе Excel.
Необходимо определиться с игровым полем. В данном случае все просто. Что есть пятнашки? Диапазон размером 4 на 4 ячейки, что в сумме даёт 16 ячеек. Переименовываем первый лист (по желанию), приводим нужные ячейки к квадратной форме и декорируем, как душе угодно. Получается примерно следующее:
На этом этапе необходимо в случайном порядке расположить числа от 1 до 15, а также пустое поле на выбранном диапазоне. Для этого открываем окно редактирования кода (Alt + F11), добавляем простой модуль (при желании и его можно переименовать для красоты).
Создаем публичную переменную rngPlayField, которая будет хранить координаты нашего игрового поля, и в методе initializeField() пишем следующий код:
Сперва метод создаёт коллекцию чисел от 1 до 16.
Я заметил особенность, что в VBA в большинстве случаев удобнее пользоваться коллекциями элементов, чем одномерными массивами. В моей практике были и такие случаи, когда приходилось использовать коллекции массивов (возможно, из-за моей некомпетентности).
InitializeField() запускает цикл For Each, который распространяется на каждую ячейку нашего диапазона. На первом этапе цикла программа рассчитывает случайное число от 1 до значения размера нашей коллекции (в настоящий момент 16) и помещает в первую ячейку диапазона число, хранящееся в коллекции под полученным случайным индексом.
Далее цикл удаляет из коллекции использованное число и переходит к следующей ячейке.
На последующих этапах происходит то же самое, за тем исключением, что размер коллекции постепенно уменьшается, пока в ней не останется ни одного числа, а все ячейки окажутся заполненными.
UPD. Уже в процессе написания статьи я выяснил, что не все комбинации, полученные таким образом, изначально решаемы. Тогда мной в ускоренном темпе был написан код, который сперва формирует правильное поле от 1 до 16, а затем в стиле песков времени разбирает пятнашки в течении 300 ходов (что мы собственно и делаем в реальной жизни, когда хотим «рестартнуть» игру). Направление движения «костяшки» рассчитывается случайным образом.
Сперва создаём обработчик события нажатия на определенную ячейку. Для этого в модуле листа, на котором расположено игровое поле, формируем метод Worksheet_SelectionChange и пишем в нем следующий код. Переменная Target при этом содержит адрес выбранной ячейки.
При выборе диапазона ячеек (больше одной), а также если выбранная ячейка не относится к игровому полю, программа завершает работу.
В ином случае запускается метод имитации движения цифр, принимающий адрес выбранной ячейки в качестве аргумента.
В основном модуле в методе moveCells(byVal rngCell as range) пишем следующее:
Цикл проверяет, есть ли слева, справа, снизу или сверху от нажатой ячейки пустое поле (его имитирует число 16) и считывает вхождение смещенной ячейки в диапазон игрового поля. Если условия выполнены, то программа просто меняет числа местами.
Создаём в рабочей книге второй лист и размещаем на нем победный вариант. Пример:
Далее пишем следующий код:
Данная программа с помощью цикла проверяет значение каждой ячейки игрового поля на соответствие аналогичной ячейке поля с победной расстановкой значений и закрашивает правильные варианты в зелёный цвет. И наоборот. Далее метод проверяет поле на наличие числа 16 (которое имитирует пустую «костяшку», не забываем) и устанавливает для шрифта белый цвет. Последний момент: проверка победы. При каждом совпадении каких-либо чисел с правильной позицией увеличивается переменная countRight, и когда ее значение станет равно 15, игра сообщит о победе.
В итоге должно получиться примерно следующее:
Вот таким нехитрым образом можно создать себе развлечение на случай скучных рабочих дней. А тем временем на ум приходит следующая картинка:
При желании в игру можно добавить подсчет ходов, рейтинговую таблицу или график динамики побед.
Сейчас же я считаю, что на этом можно остановиться.
Следующая статья выйдет When it’s done. Скорее всего в течение недели.
Пишем игру «Жизнь» (Life) на VBA в Excel
Игра идет на большом (иногда даже бесконечном) поле в клеточку («вселенной»). Как вы понимаете, Excel для такого подходит идеально 🙂
Если брать блок клеток 3х3 с текущей клеткой в середине, то вокруг неё оказывается 8 клеток-соседей. Дальнейшая судьба клетки зависит от того, сколько именно живых клеток (N) окажется в этой окружающей области. Вариантов несколько:
Вот, собственно, и все правила. Можно даже сказать, что всё это неправильно называть игрой, т.к. здесь нет соперников в привычном понимании. Вы расставляете первое поколение, запускаете процесс и затем просто наблюдаете за развитием вашей «колонии» на протяжении нескольких поколений.
Шаг 1. Готовим игровое пространство
Создадим в новой книге три листа:
На листе start разметим с помощью единичек первое поколение любым желаемым образом:
Шаг 2. Пишем макрос
Теперь пришла пора расчехлить наш VBA и написать макрос, который и будет делать всю работу, а именно:
Теперь давайте разберем его построчно для понятности:
Поскольку в коде нам придется несколько раз ссылаться и много раз работать с диапазонами игрового пространства (B2:AE31) на каждом из трёх листов книги, то имеет смысл сразу оформить их как переменные. Это делается в блоке:
Затем, перед началом игры, мы должны перенести первое поколение с листа start на лист game. Это выполяется командой прямого копирования с использованием уже созданных переменных:
Поскольку мы хотим прокрутить в нашей игре не одно, а несколько (например, 50 для начала) поколений, то дальнейшие действия заключены в цикл:
А внутри этого цикла мы, во-первых, сначала очищаем рабочее пространство на листе next для формирования следующего поколения:
Ссылка на очередную проверяемую ячейку будет храниться в переменной cell. Для этой ячейки нам нужно сначала построить окрестность 3х3 с ней в середине. Это выполняется с помощью конструкции:
Здесь метод Offset(-1,-1) виртуально сдвигает текущую проверяемую ячейку на одну строку вверх и на один столбец влево, а потом метод Resize(3,3) опять же виртуально растягивает эту одну ячейку до новых размеров 3 на 3:
Дальше нам нужно проверить полученное количество соседей и пометить на листе следующего поколения текущую ячейку как живую или мертвую, согласно правилам игры. Это выполняет блок из трёх проверок:
Вот, собственно, и вся логика.
Программирование игр в Visual Basic на уроках информатики
При изучении наук примеры полезнее, чем правила. Иссак Ньютон.
Предлагаемые вниманию коллег практические работы по программированию игр целесообразно использовать после изучения следующих тем: «Создание массива управляющих элементов», «Обработка массивов», «Графические возможности Visual Basic». После непосредственного изучения темы «Обработка событий мыши. Технология Drag-and-Drop» мы выполняем несколько практических работ по программированию несложных игр, основная цель которых – обобщение, систематизация и закрепление на практике изученного ранее материала.
При объяснении нового материала удобно использовать распечатки с изложением теории и примерами, либо методические пособия для каждого студента (мы используем оба варианта).
Приведённые практические работы рассчитаны на 3 занятия по 2 часа.
Обработка событий мыши. Технология Drag-and-Drop.
Для перетаскивания различных объектов при помощи мыши используется технология Drag-and-Drop (перетащить и бросить). Перемещаемый элемент называется источником (source), а объект, в котором он будет после этого находиться, носит название адресата (target). Объект становится адресатом в том случае, когда при завершении операции перетаскивания указатель мыши находится в его границах.
Для перемещения объекта необходимо наличие в программе соответствующих процедур. К элементу управления может применяться описанная технология только в том случае, если он не имеет фокус в этот момент. Для запрещения получения фокуса элементом необходимо для него задать свойство TabStop = False.
Свойства, события и методы технологии Drag-and-Drop.
Если установлен ручной режим перемещения (DragMode = 0), то в этом случае операция может быть выполнена только при помощи метода Drag. При автоматическом режиме возможно перетаскивание элемента без использования Drag.
Событие DragDrop, возникающее при завершении операции, имеет следующие параметры:
Константа | Значение | Описание |
vbCancel | 0 | Отмена операции |
vbBeginDrag | 1 | Начало перетаскивания |
vbEndDrag | 2 | Окончание операции |
Пример 1: Имитация действия Корзины путём перетаскивания в неё объекта. Восстановление объекта происходит при двойном щелчке по корзине.
На форме разместить метку Label1 (Положи мяч в корзину), кнопку Command1 (Выход), 2 элемента управления Image (в один поместить изображение мяча, в другой – пустой корзины).
Dim Mx, My As Single, P As Boolean
Private Sub Form_Load() ‘загрузка формы
P = False ‘признак пустой корзины
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then ‘если нажата левая кнопка мыши
Call Image1.Drag(vbBeginDrag) ‘начало перетаскивания
Private Sub Image2_DragDrop(Source As Control, X As Single, Y As Single) ‘завершение перетаскивания объекта в корзину
Source.Visible = False ‘мяч стал невидим
P = True ‘признак полной корзины
Image2.Picture = LoadPicture(«LEO4.ICO») ‘рисунок полной корзины
Label1.Caption = «Достань мяч из корзины. » ‘изменили надпись в метке
Private Sub Image2_DblClick() ‘извлечение объекта из корзины
Image1.Visible = True ‘мяч стал видимым
P = False ‘признак пустой корзины
Image2.Picture = LoadPicture(«LEO3.ICO») ‘загрузить рисунок пустой корзины
Label1.Caption = «Положи мяч в корзину!» ‘изменить надпись в метке
‘Завершение перетаскивания объекта на форме с учётом поправки (необязательная процедура)
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
При автоматическом перетаскивании элемента по форме при завершении операции его левый верхний угол будет находиться в той точке, где располагался указатель при отпускании кнопки мыши, независимо от того, где он находился на элементе в начале перетаскивания. Для того, чтобы конечное расположение совпадало с контуром, который отображается по умолчанию при перетаскивании (или с изображением, установленным в свойстве DragIcon), необходимо ввести поправку. После установления ручного режима становится возможным определение координат точки, в которой находился указатель в начале перетаскивания путём обработки события MouseDown для соответствующего элемента, что позволяет откорректировать параметры метода Move. [1]
Практическая работа 1
Предварительная подготовка к работе (может быть выполнена дома): в любом графическом редакторе разбить произвольный рисунок на 4 части и сохранить в разных файлах (Ris1.bmp, Ris2.bmp, Ris3.bmp, Ris4.bmp). Например, в Paint можно использовать команду ПРАВКА – Копировать в файл. Не изменяйте пропорций рисунков. Создайте ещё один рисунок Ris5.bmp – квадрат с однотонной заливкой (будем использовать его в качестве фона, когда необходимо скрыть предыдущие рисунки).
Задание. Разработать проект «Пазлы». Исходный рисунок разбит на 4 части. Необходимо сложить его на пустом поле, разбитом на 4 части. Исходный вид формы показан на рисунке .
Интерфейс проекта. На форме разместить следующие элементы управления:
Dim Mx, My As Single, Path As String, k, i, j, t As Integer, A(0 To 3) As Integer
‘Mx, My – координаты объекта при перемещении; Path – путь к файлу с рисунком;
Private Sub Form_Load() ‘загрузка формы
Private Sub Command1_Click() ‘Выход
Private Sub Command2_Click() ‘Проверка
k = 0 ‘количество верных ответов
If Image2(i).Index = A(i) Then k = k + 1 ‘индекс в массиве рисунков должен совпадать с номером рисунка
Private Sub Command3_Click() ‘Сброс
Image3(i).Visible = True ‘восстанавливаем все рисунки
Image2(i).Picture = LoadPicture(«Ris5.bmp») ‘загружаем пустой фон
Label1.Caption = «Собери картинку»
Private Sub Command4_Click() ‘Справка
Label2.Visible = True ‘метка становится видимой и появляется текст справки
Label2.Caption = «Перемещайте картинки при нажатой левой кнопке мыши в нужные клетки. При двойном щелчке по картинке она вернётся на прежнее место!»
Timer1.Enabled = True ‘включаем таймер
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) ‘Поправка
Private Sub Image2_DblClick(Index As Integer) ‘Возвратить картинку на место по двойному щелчку по рисунку
Image2(Index).Picture = LoadPicture(«Ris5.bmp») ‘загружаем пустой фон
t = A(Index) ‘запоминаем номер рисунка, который нужно вернуть на место
Image3(t).Visible = True ‘делаем рисунок с номером t видимым
Private Sub Image2_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single) ‘завершение перетаскивания
Private Sub Image3_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Call Image3(Index).Drag(vbBeginDrag) ‘начало перетаскивания рисунка
i = Index ‘запоминаем индекс поля в Image3, из которого перемещаем рисунок
If i = 0 Then Path = «Ris1.bmp» ‘путь к рисунку
If i = 1 Then Path = «Ris2.bmp»
If i = 2 Then Path = «Ris3.bmp»
If i = 3 Then Path = «Ris4.bmp»
Private Sub Timer1_Timer() ‘Таймер
Label2.Visible = False ‘скрыть текст справки
Практическая работа 2
Проект «Расположить объекты в хронологическом порядке».
Рассмотренные в данных работах методы обработки событий мыши при перемещении объектов мы используем в дальнейшем при создании тестовых и игровых программ («Пятнашки», «Морской бой», «Электронные кроссворды», «Переводчик», «Интеллектуальный марафон», «Эрудит», «Тесты на внимание», «Информатика в играх и задачах» и других). Несомненно, что выполнение таких заданий способствует не только развитию творческих и умственных способностей учащихся, но и повышает интерес к самому процессу программирования. В процессе работы над проектами возникает множество предложений по усовершенствованию программы и вопросов, для решения которых имеющихся знаний уже недостаточно. Таким образом поддерживается непрерывная связь теории с практикой, постоянно вводятся новые элементы познания.
С некоторыми проектами можно познакомиться на сайте ПОРТФОЛИО 2006/2007 г. («Информатика в играх и задачах», «Компьютерный тест Умник»), 2007/08 г. («Электронные кроссворды по информатике», проект «Компьютерная графика»).
Microsoft Excel
трюки • приёмы • решения
Как разработать несложную игру средствами VBA Excel
Перейдем к следующему примеру — необходимо разработать несложную игру. На рабочем листе (рис. 1.42) следует разместить пять окон для изображений (элементы управления типа «Изображение»). При этом два окна будут основными — расположены слева и большие по размеру. Другие три окна имеют меньшие размеры и расположены в правой части рабочего листа (они будут содержать эталонные изображения). Также на рис. 1.42 расположены две кнопки и две надписи, при этом надпись Результат является просто поясняющей, и далее мы ее упоминать не будем.
Теперь смысл игры. Предварительно в три маленьких окна в правой части листа выводятся три различные картинки (условно их можно называть эталонными). При щелчке на кнопке Бросок в каждое из двух основных окон для изображений должна попадать (случайным образом) одна из трех возможных картинок (из набора эталонных, которые видны на экране). Если в результате такого случайного выбора картинки в обоих основных окнах совпадают, то в элемент управления «Надпись» для результата добавляется 3 балла, а если нет, то вычитается 1 балл.
Рис. 1.42. Интерфейс разрабатываемой игры
Нам также потребуется датчик случайных чисел — здесь мы воспользуемся уже знакомой функцией Rnd. На первом этапе необходимо дать имена объектам в соответствии с табл. 1.2. Назначение элементов достаточно очевидно. Нескольких слов заслуживает элемент «Надпись» Res для отображения результата. В ней вычисляется суммарный результат по итогам серии произведенных бросков. А по щелчку на кнопке Начать игру снова значение результата обнуляется. Таким образом, вступительная часть перед программированием завершена, и поэтому перейдем к описанию программного кода.
Для того чтобы между сеансами работы на компьютере текущий результат сохранялся, отведем для него ячейку в первой строке на листе — М1. В начале в нее необходимо записать ноль. После каждого броска в эту ячейку программно будет записываться результат. В этом случае при сохранении книги предыдущий результат сохраняется в ячейке М1. Процедура, выполняемая при открытии книги, должна извлечь из ячейки М1 предыдущий результат, и тогда пользователь будет иметь возможность продолжить игру.
В качестве первого программного фрагмента оформим процедуру, выполняемую при открытии книги, так, как представлено в листинге 1.26. Здесь в надпись для результата подставляется содержимое ячейки М1 с первого листа книги.
‘ Листинг 1.26. Процедура, выполняемая при открытии книги Private Sub Workbook_Open() Worksheets(1).Res.Caption = Worksheets(1).Range(«M1»).Value End Sub
Таблица 1.2. Имена объектов на рис. 1.42
Свойство Name | Тип объекта | Комментарий |
---|---|---|
Image1 | Изображение | Левое основное окно для изображения |
Image2 | Изображение | Правое основное окно для изображения |
ImageEtalon1 | Изображение | Левое окно для образца |
ImageEtalon2 | Изображение | Среднее окно для образца |
ImageEtalon3 | Изображение | Правое окно для образца |
Label1 | Надпись | Подпись «Результат» |
Res | Надпись | Для отображения результата |
Brosok | Надпись | Для выполнения броска |
NewGame | Надпись | Начать игру снова |
В листинге 1.27 приведена основная процедура, выполняемая по щелчку на кнопке с надписью Бросок.
В тексте процедуры используется функция Rnd, которая нам уже встречалась. Преобразование CInt (Rnd * 3 + 0.5) позволяет сформировать случайное целое число, которое может принимать одно из трех возможных значений: 1, 2 или 3. Таким образом, можно значения переменных а и b сопоставить с номерами картинок. В результате при совпадении картинок мы увеличиваем сумму выигрыша на 3 балла, а при несовпадении, соответственно, уменьшаем на один.
Если не предпринимать каких-либо действий, то функция Rnd при каждом повторном открытии книги выдает одну и ту же последовательность случайных чисел. Чтобы устранить данный недостаток, мы воспользовались функцией Randomize, которая выполняет перемешивание случайных чисел. В результате при различных сеансах работы последовательность, выдаваемая по нажатию кнопки Бросок, каждый раз будет разная.
Другая кнопка на листе (NewGame) позволяет сбросить содержимое ячейки М1 и значение свойства Caption элемента Res в ноль для начала новой игры (листинг 1.28).
‘ Листинг 1.28. Процедура сброса суммы баллов в ноль Private Sub NewGame_Click() Symma = О Res.Caption = Symma Range(«M1») = Symma End Sub
Один из вариантов развития игры показан на рис. 1.43.