Создание логических игр на языке VBA в среде Microsoft Excel
Содержание
Введение §1. Жанры компьютерных игр §2. Примеры компьютерных логических игр §3. Создание логических игр на языке VBA 3.1 Игра «Быки и коровы» 3.2 Игра «Угадай число» 3.3 Игра «Пятнашки» Заключение Литература | 3 4 9 10 11 15 16 21 22 |
Введение
Научно-технический прогресс, набравший к концу XX века головокружительную скорость, послужил причиной появления такого чуда современности как компьютер и компьютерные технологии. Вместе с появлением компьютеров появились компьютерные игры, которые сразу же нашли массу поклонников. С совершенствованием компьютеров совершенствовались и игры, привлекая всё больше и больше людей.
Ученые считают, что потребность в игре как таковой, свойственна человеку на протяжении всей его жизни. В процессе игры удовлетворяется неосознаваемая познавательная потребность, вследствие чего человек получает удовольствие. Важное место в ряду компьютерных игр занимают логические игры.
Цель данного исследования – разработать и создать логические игры на языке VBA в среде Microsoft Excel.
Объект исследования – язык VBA в среде Microsoft Excel.
Предмет исследования – программирование логических игр.
Гипотеза исследования: язык VBA является удобной средой для создания логических игр в среде Microsoft Excel.
§1. Жанры компьютерных игр
Игру можно назвать восьмым чудом света, так как в ней заложены огромные воспитательные и образовательные возможности. Игра развивает наблюдательность и способность определять свойства предметов, выявлять их существенные признаки. Таким образом, игры оказывают большое влияние на умственное развитие, совершенствуя мышление, внимание, творческое воображение.
Известный французский ученый Луи де Броль утверждал, что все игры (даже самые простые) имеют много общего с работой ученого. В игре привлекает поставленная задача и трудность, которую можно преодолеть, а затем радость открытия и ощущение преодоленного препятствия.
Как правило, в компьютерных играх от игрока требуется:
• владение средствами управления, быстрота и точность манипуляций;
• быстрая и правильная реакция на происходящие события;
• чувство времени, умение выдерживать заданные временные интервалы;
• способность следить за несколькими объектами одновременно;
• знание географии игрового поля, законов игрового мира;
• знание конкретной предметной области, которая моделируется в игре;
• умение искать закономерности;
• умение предугадывать действия противника;
• знание алгоритма и стратегии выигрыша;
• способность к быстрому и максимально полному перебору основных вариантов;
• память на текущие события;
• использование прошлого опыта, что происходило в предыдущих сеансах игры;
• способность интенсивно работать в течение всего сеанса игры.
Компьютерные игры, как и любые другие можно разделить на несколько жанров, в зависимости от их содержания.
Аркадные Arcade – это крытая галерея магазинов, где традиционно размещали игровые автоматы, которые назывались аркадными. Если компьютерная игра схожа по концепции с играми для автоматов – она называется «аркадой». Аркадные игры представляют собой различные виды единоборств с оружием или без него. В этих играх все сделано так, чтобы не дать игроку расслабиться ни на секунду. Он должен уметь все делать быстро, точно и расчетливо. «Аркада» всегда имеет развитую системой бонусов - это начисление очков, открываемые различные элементы и пр. В последние годы с развитием компьютерной техники появились новые направления аркадных игр: боевые единоборства, варианты компьютерных бильярдов (пинболы), трехмерные боевики (3D Action).

Адвентюрные Приключенческие игры. Эти игры представляют собой некое путешествие, в которое предлагается вступить играющему, где ему придется решать различные задачи и препятствия. Игры построены на сюжетах сказок, мифов, литературных произведений или известных мультфильмов. Как правило, в каждом эпизоде герою необходимо добыть какой-либо полезный предмет (волшебное средство), который пригодится ему на каком-либо последующем этапе. Целью игры являются различные варианты борьбы против злых сил, выполнение королевского поручения, освобождение принцессы, освобождение от зла какого-либо города).


Ролевые
Специфика ролевых игр заключается в овладении той роли, которую вы выбрали для себя, умелом управлении ролями персонажей вашего отряда, в улучшении личностных качеств персонажей своего отряда.


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


Игры-симуляторы
Например, симулятор поезда — это жанр компьютерных игр, в котором игроку предоставлена возможность управления железнодорожным составом. Эти игры имеют хорошую физическую модель и неплохую графику. Симулятор свиданий — это жанр компьютерных игр, который тесно связан с романтическими аниме. Сюжет и цель в играх этого жанра - добиться успеха в романтических отношениях с противоположным полом. Игроку предоставляется для выбора большой круг лиц противоположного пола, с которыми можно завязать отношения. Гоночные симуляторы ( Need for Speed). Спортивные имитаторы - от футбола или хоккея до баскетбола и бейсбола.


Логические Логическая игра - это игра, имеющая четко определенные правила, суть которой состоит в достижении победы путем выполнения последовательности действий, основанных лишь на логических умозаключениях игрока и не зависящая от других его способностей. Логические игры возникли в числе первых. Реализованные в пошаговом режиме, они не требовали особых аппаратных ресурсов и под них использовали даже самые слабые ПК. Ну а то, что, пока компьютер "думал" над очередным ходом, люди успевали выкурить сигарету, считалось нормой. Позже, с появлением графических мониторов, был придуман знаменитый TETRIS, ознаменовав собой возникновение игр-головоломок, или, как их еще называют за рубежом, Puzzle game.

Традиционные К
омпьютерные реализации традиционных и настольных игр.
Вывод
В каждом жанре существуют свои разновидности, так что всего разных видов компьютерных игр можно насчитать несколько десятков. Почти ежемесячно появляются новые, а некоторые игры сочетают в себе несколько жанров.
§2. Примеры компьютерных логических игр
П
редтечею жанра являлись настольные, графические и механические головоломки — от кроссвордов до кубика Рубика, увидевшего свет в середине 1970-х. Эти головоломки требовали от игрока логики и ловкости в решении, которые также стали играть важную роль в прототипах жанра как Q*bert, Boulder Dash и Marble Madness. Эталоном же жанра стала игра Тетрис, появившаяся в 1985 году и сочетавшая в себе простой и захватывающий игровой процесс.
В
начале 1990-х годов такие игры как Lemmings и The Lost Vikings оживили жанр головоломок.

Появление трёхмерной графики поспособствовало развитию головоломок на игровых приставках. Относительно дешёвые для производства игры нашли свою нишу на портативных игровых системах.
В 2000 году игры Pikmin, Meteos, Polarium, LocoRoco и Lumines вновь возродили принципы жанра. В Японии серия игр Brain Training (развивающие логические игры) — один из наиболее крупных успехов индустрии компьютерных игр за 2005 год.
§3. Создание логических игр на языке VBA
VBA (Visual Basic for Applications - Visual Basic для приложений) — немного упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office (включая версии для Mac OS), а также во многие другие программные пакеты, такие как AutoCAD, SolidWorks, CorelDRAW, WordPerfect и ESRI ArcGIS. VBA покрывает и расширяет функциональность ранее использовавшихся специализированных макро-языков, таких как WordBasic.
К достоинствам языка можно отнести сравнительную лёгкость освоения, благодаря которой приложения могут создавать даже пользователи, не программирующие профессионально.
3.1 Игра «Быки и коровы»
Быки и коровы — логическая игра для двоих игроков. Для игры достаточно иметь бумагу, ручку и уметь считать. Также игра может называться «Цифры».
Правила игры
Играют двое. Каждый задумывает и записывает тайное 4-хзначное число с неповторяющимися цифрами. Игрок, который начинает игру по жребию, делает попытку отгадать число. Попытка — это 4-хзначное число с неповторяющимися цифрами, сообщаемое противнику. Противник сообщает в ответ, сколько цифр угадано без совпадения с их позициями в тайном числе и сколько угадано вплоть до позиции в тайном числе. Например:
Задумано тайное число «3219».
Попытка: «2310».
Результат две «коровы» (две цифры: 2 и 3 — угаданы на неверных позициях) и один «бык» (одна цифра 1 угадана вплоть до позиции).
Игроки делают попытки угадать по очереди. Побеждает тот, кто угадает первым.
Вариации игры
В упрощенном английском варианте игры Mastermind (приблизительный перевод гениальный отгадчик) задумываются цифры от 1 до 6, причём цифры могут повторяться.
В усложнённом варианте может использоваться 5-, 6- и более- значное число. В настольном варианте игры вместо чисел загадывается один из шести цветов или шести предметов.
Существует вариант игры со словами. То есть игрок загадывает слово, обычно из 5 букв (в именительном падеже единственном числе по правилам игры балда) и задача противника угадать его используя в качестве попыток такие же корректные слова из словаря русского языка. Известное слово из 4 букв для «подлавливания» новичков — «эльф»; в нём три буквы из четырёх крайне редкие, и неопытный игрок может сделать много ходов, прежде чем добьётся хотя бы «коровы».
Алгоритм
В общем случае количество вариантов для k-значного числа в N-ричной системе счисления без повторений, будет равно числу размещений
В случае варианта с повторениями количество вариантов будет равно Nk.
Большинство известных алгоритмов суть вариации алгоритма полного перебора с определённой эвристикой. В связи с тем что количество вариантов не столь велико и схема прямого перебора элементарно реализуется компьютер играет в «быки и коровы» намного сильнее человека. Чем больше знаков в числе тем больше разница в силе игры человека и компьютера.
Как показал Дональд Кнут для игры Mastermind (64 вариантов) при предложенной им стратегии нужно не более 5 попыток чтобы отгадать любую комбинацию и в среднем 4.34 попыток для отгадывания.
Существует множество вариантов компьютерной реализации. В настоящее время существует большое количество программ играющих в различные вариации в том числе и для мобильных телефонов и мобильных компьютеров.
Создадим игру Быки-Коровы на языке VBA в среде Microsoft Excel
Создадим в Microsoft Excel кнопку «Новая игра», запишем для неё следующий командный код
Option Explicit
Dim comp(1 To 4), n, com As Integer
Dim a, b, c, d As Byte
Dim ot(1 To 4), otv, bik, kor, i, j As Integer
Private Sub CommandButton1_Click()
TextBox1.Text = ""
Cells(11, 5) = ""
Randomize
Do
com = 1000 + Rnd * 8999
comp(1) = com \ 1000
comp(2) = (com \ 100) Mod 10
comp(3) = (com \ 10) Mod 10
comp(4) = com Mod 10
Loop Until comp(1) comp(2) And comp(1) comp(3) And comp(1) comp(4) And comp(2) comp(3) And comp(2) comp(4) And comp(3) comp(4)
n = 0
End Sub
Запись Option Explicit предусматривает, что все использованные переменные величины должны быть объявлены (описаны) перед их использованием.
Функция STR$ используется для преобразования числового значения в строковую величину.
Символ \ означает целочисленное деление, т.е. остаток при делении одного целого числа на другое отбрасывается. Например, 70 \ 20 = 3.
Mod дает остаток от деления одного целого числа на другое,
Для текстового окна выберите Key Down, чтобы при нажатии клавиши Enter выполнялся программный код:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
n = n + 1
otv = Val(TextBox1.Text)
If otv = com Then
MsgBox ("Правильно! Число попыток = " & Str$(n))
Else
If otv = 0 Then
MsgBox ("Вы сдались!")
Else
ot(1) = otv \ 1000
ot(2) = (otv \ 100) Mod 10
ot(3) = (otv \ 10) Mod 10
ot(4) = otv Mod 10
For i = 1 To 4
If ot(i) = comp(i) Then
bik = bik + 1
End If
Next i
For i = 1 To 4
For j = 1 To 4
If ot(i) = comp(j) And i j Then
kor = kor + 1
End If
Next j
Next i
MsgBox ("Число быков = " & Str$(bik) & " Число коров = " & Str$(kor))
End If
End If
kor = 0
bik = 0
TextBox1.Text = ""
Cells(11, 5) = n
End If
End Sub
После этого в ячейке D9 напишем текст «Введите число», а в ячейке D13 «Количество попыток» и оформим остальную часть по своему желанию, например, выбрав единый цвет заливки оставшихся ячеек и скрыв границы.
В
конце концов мы должны прийти к такому результату:
Чтобы запустить игру, необходимо нажать на кнопку «Новая игра».
3.2 Игра «Угадай число»
О
формим область игры следующим образом:
Для кнопки Старт необходимо написать следующий программный код:
Dim comp As Integer
Dim n As Integer
Dim a As Integer
Private Sub CommandButton1_Click()
Randomize
comp = Fix(Rnd * 100)
n = 0
TextBox1.Text = ""
End Sub
Для текстового окна программный код выглядит так:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
a = Val(TextBox1.Text)
n = n + 1
If KeyCode = vbKeyReturn Then
If a = comp Then
MsgBox "Угадано за " & n & " раз !"
End If
If a
MsgBox "Больше!"
TextBox1.Text = ""
End If
If a comp Then
MsgBox "Меньше!"
TextBox1.Text = ""
End If
End If
End Sub
Для запуска новой игры необходимо нажать кнопку Старт.
3.3 Игра «Пятнашки»
Пятна́шки — популярная головоломка, придуманная в 1878 году Ноем Чепмэном. Представляет собой набор одинаковых квадратных костяшек с нанесёнными числами, заключённых в квадратную коробку. Длина стороны коробки в четыре раза больше длины стороны костяшек для набора из 15 элементов (и в три раза больше для набора в 8 элементов), соответственно в коробке остаётся незаполненным одно квадратное поле. Цель игры — перемещая костяшки по коробке добиться упорядочивания их по номерам, желательно сделав как можно меньше перемещений.
История создания
С 1891 года до самой смерти Сэмюэл Лойд считал, что изобрёл головоломку именно он. Однако существуют доказательства того, что он был непричастен к созданию «пятнашек». Настоящим изобретателем был Ной Палмер Чепмэн, почтмейстер из Канастоты, который ещё в 1874 году показывал друзьям головоломку, состоящую из шестнадцати пронумерованных квадратиков, которые надо было сложить в ряды по четыре штуки так, чтобы сумма чисел в каждом ряду была равна 34. Затем сын Ноя Чепмэна, Фрэнк Чепмэн привёз доработанные головоломки в Сиракузы (штат Нью-Йорк), а затем в Хартфорд (Коннектикут), где слушатели Американской школы для слабослышащих начали производство головоломки. К 1879 году она уже продавалась не только в Хартфорде, но и в Бостоне. Тогда о «пятнашках» узнал художник по дереву Маттиас Райс. В декабре 1879 года он начал бизнес по производству новой головоломки под названием «Драгоценная головоломка» (англ. Gem Puzzle). В начале 1880 года некий Чарльз Певи, дантист из Вустера, привлёк внимание общественности, предложил денежное вознаграждение за решение задачи собирания головоломки, что добавило популярности новой забаве. Весной того же года игра достигла Европы. 21 февраля 1880 года Ной Чепмэн попытался оформить патент на своё изобретение (патент назывался «Головоломка из бриллиантовых блоков», «Block Solitaire Puzzle»), однако заявка на патент была отклонена, так как мало отличалась от уже оформленного тремя годами ранее патента «Хитрые блоки», «Puzzle-Blocks».
Математическое описание
Пятнашки представляют собой классическую задачу для моделирования эвристических алгоритмов. Обычно задачу решают через количество перемещений и поиск манхеттенского расстояния между каждой костяшкой и её позицией в собранной головоломке. Для решения используются алгоритмы наподобие алгоритма A*.

Нерешаемая комбинация, предложенная Ноем Чепменом
Можно показать, что ровно половину из всех возможных 1 307 674 368 000 (=15!) начальных положений пятнашек невозможно привести к собранному виду: пусть квадратик с числом i расположен до (если считать слева направо и сверху вниз) k квадратиков с числами меньшими i. Будем считать ni = k, то есть если после костяшки с i-м числом нет чисел, меньших i, то k = 0. Также введем число e — номер ряда пустой клетки (считая с 1). Если сумма является нечётной, то решения головоломки не существует.
Для обобщённых пятнашек (с бо́льшим, чем 15, количеством костяшек) задача поиска кратчайшего решения является NP-полной.
Если допустить поворот коробки на 90 градусов, при котором изображения цифр окажутся лежащими на боку, то можно перевести неразрешимые комбинации в разрешимые (и наоборот). Таким образом, если вместо цифр на костяшки нанести точки и не фиксировать положение коробки, то неразрешимых комбинаций вообще не окажется.
Создадим программу на языке VBA. Для начала откроем Excel и запустим Visual Basic.
Создадим кнопку «Сначала», для которой напишем следующий программный код:
Private Sub CommandButton1_Click()
Randomize
For x = 0 To 3: For y = 0 To 3
Cells(y + 8, x + 6) = ""
Next y, x
For i = 1 To 15
x = Int(Rnd * 4): y = Int(Rnd * 4)
While Cells(y + 8, x + 6) "": x = Int(Rnd * 4): y = Int(Rnd * 4): Wend
Cells(y + 8, x + 6) = i
Next i
End Sub
Эта процедура расставляет числа в случайном порядке, используя команду Rnd.
Теперь необходимо составить процедуру, которая находила бы свободную ячейку рядом с активной и меняла бы их значения местами.
После процедуры CommandButton1_Click() вставляем следующий код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
x = ActiveCell.Column: y = ActiveCell.Row
If x = 6 And x = 8 And y
If x 6 And Cells(y, x - 1) = "" Then
Cells(y, x - 1) = Cells(y, x): Cells(y, x) = ""
ElseIf x
Cells(y, x + 1) = Cells(y, x): Cells(y, x) = ""
ElseIf y 8 And Cells(y - 1, x) = "" Then
Cells(y - 1, x) = Cells(y, x): Cells(y, x) = ""
ElseIf y
Cells(y + 1, x) = Cells(y, x): Cells(y, x) = ""
End If
If test Then MsgBox ("Победа!")
End If
End Sub
Обратите внимание, что в конце имеется строчка выводящая сообщение «Победа» при выполнении условия test. Использование функции предполагает ее объявление в начале программы. Значит, следует добавить ее следующий текст в самое начало кода:
Function test()
c = 0
For x = 0 To 3: For y = 0 To 3
If Cells(y + 8, x + 6) = Cells(x + 3, x + 1) Then c = c + 1
Next y, x
If c = 16 Then test = True Else test = False
End Function
Private Sub CommandButton1_Click()
Randomize
For x = 0 To 3: For y = 0 To 3
Cells(y + 8, x + 6) = ""
Next y, x
For i = 1 To 15
x = Int(Rnd * 4): y = Int(Rnd * 4)
While Cells(y + 8, x + 6) "": x = Int(Rnd * 4): y = Int(Rnd * 4): Wend
Cells(y + 8, x + 6) = i
Next i
End Sub
Данная функция просто сравнивает сумму столбцов и рядов игрока с той, которая должна получиться при правильной расстановке всех ячеек.
Теперь можно попробовать решить знаменитую головоломку.
Заключение
За последних шестьдесят пять лет область компьютерных игр успела не просто родиться, но и получить всемирную популярность. Компьютерные игры так прочно вошли в нашу жизнь, что теперь практически невозможно представить персональный компьютер, на котором не было бы хоть одной из них. С компьютерными играми приятно проводить время, отдыхать после трудового дня. Любители игр давно пользуются возможностью скачать игры из Интернета. Но как приятно самому создать компьютерную игру, продумать дизайн, написать программу, похвастаться перед друзьями!
В процессе выполнения исследования по теме «Создание логических игр на языке VBA в среде Microsoft Excel» была проанализирована литература и интернет-источники по данному вопросу, в среде Microsoft Excel на языке VBA написаны 3 логических игры: «Быки и коровы», «Угадай число», «Пятнашки».
В дальнейшем хотелось бы продолжить работу по созданию игр на других языках программирования.
Литература
Ананьев А., Федоров А. Самоучитель Visual Basic 6.0. - С.-Петербург, Дюссельдороф, Киев, Москва, "Cbhv", 2002. -624с.
Волчёнков Н.Г. Программирование на Visual Basic 6. Часть 1. - М.: "ИНФРА-М", 2000. - 288с.
Информационная культура: Учебное пособие для средней школы. Часть 1/ Т.А.Матвеева, А.Г.Гейн, В.В. Мачульский, т.В.Шпота, В.И.Кадочникова, В.И.Жильцова, А.С.Щербинин - Екатеринбург: Центр «Учебная книга»; Смоленск: Издательство «Ассоциация XXI век», 2006.-392 с.
Могилёв, А.В. Информатика [Текст] // А.В.Могилев, Н.И.Пак, Е.К.Хённер. -М.,ACADEMA, 2007.
Моделирование простейших игр в Microsoft Excel. / «Информатика» № 20, 2005.
Симонович С.В., Евсеев Г.А. Занимательный компьютер. Книга для детей, учителей и родителей. – М.: АСТ-ПРЕСС КНИГА, Инфорком-Пресс, 2002.
http://www.games.ru
http://images.yandex.ru/
http://ru.wikipedia.org/wiki/Жанры_видеоигр
0