Макросы для игр excel

У нас появилось свободное время.. значит можно поиграть! В этой рубрике мы будем выкладывать простенькие игры в Excel. Да, в Excel тоже можно писать игры, ведь в нем встроен язык программирования VBA. После того как вы скачаете игру (по ссылкам ниже), необходимо будет только включить макросы (как это сделать описано тут). Во многих Ирах в Excel (в макросах) есть много интересных находок. Кто знает, может игра в Excel поможет вам не только скоротать время, но и научиться чему-то новому. Играйте в Excel и пишите игры сами!

Игра в Excel «Морской бой»:

Battleships

Игра в Excel «Змейка»:

snaked

Игра в Excel «Вертолет»:

gmexcopter

Игра в Excel «Квадрат»

Squares

Игра в Excel «Лягушка»

frog_leap

Игра в Excel «Темница»

dungeon

Если у вас есть чем поделиться — присылайте!

Спасибо за внимание.

Развлекая — поучай.
(Гораций)

Если вы уже имели какой-то опыт программирования в прошлой жизни (привет, Basic, Pascal и т.д.), то, скорее всего, уже прошли этап «игрописательства». Однако, тряхнуть стариной и размять мозги вполне можно. Если же вы никогда не программировали игр, то никогда не поздно начать этот весьма увлекательный процесс. Всё, что нам потребуется — это Excel (любой версии) и 15-20 минут времени для начала.

Тренироваться будем на известной в узких кругах программистов игре «Жизнь» (Life). Её придумал британский математик Джон Конвей еще в 1970 году на основе работ легендарного Джона фон Неймана — прадедушки всех современных компьютеров. Если вы не сталкивались с ней раньше — не проблема, правила можно объяснить за полминуты:

  • Игра идет на большом (иногда даже бесконечном) поле в клеточку («вселенной»). Как вы понимаете, Excel для такого подходит идеально :)

  • В один момент времени каждая клетка может быть в двух состояниях — живой (обозначим её каким-нибудь значком или просто единичкой) или же мертвой (пустой). Начальное состояние всех клеток в игре называют первым поколением.

  • Если брать блок клеток 3х3 с текущей клеткой в середине, то вокруг неё оказывается 8 клеток-соседей. Дальнейшая судьба клетки зависит от того, сколько именно живых клеток (N) окажется в этой окружающей области. Вариантов несколько:

  • Правила игры

  • Если клетка была пустая (мертвая), но у нее есть ровно 3 живых соседа, то в ней зарождается жизнь.
  • Если клетка живая, но у неё меньше 2 соседей, то она умирает от одиночества.
  • Если клетка живая, но у неё больше 3 соседей, то она умирает от перенаселения.
  • Если клетка живая и у нее 2-3 соседа, то клетка продолжает жить.

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

Однако, не стоит недооценивать обманчивую простоту этой логики — количество комбинаций, сценариев игры и многообразие фигур в такой игровой вселенной поражает своим разнообразием и поистине бесконечно. В математике подобные модели называют клеточными автоматами. А самое интересное, что реализовать подобную модель можно в любой версии Excel буквально на 20 строчках кода.

Поехали.

Шаг 1. Готовим игровое пространство

Создадим в новой книге три листа:

  • game — это будет основной листы игры, где мы будем наблюдать за развитием нашей «колонии»
  • next — этот лист будет формировать следующее поколение, которое затем придет на смену текущему
  • start — на этом листе мы будем задавать начальную конфигурацию, т.е. первое поколение в нашей игре

На каждом листе (можно выделить их заранее, удерживая клавишу Shift или Ctrl, чтобы не повторять трижды одни и те же действия), разметим игровое поле размером, допустим, 30 на 30 ячеек. Впоследствии размер поля можно будет подправить в соответствии с вашими аппетитами и мощью вашего ПК:

Игровое пространство

На листе start разметим с помощью единичек первое поколение любым желаемым образом:

Первое поколение

Шаг 2. Пишем макрос

Теперь пришла пора расчехлить наш VBA и написать макрос, который и будет делать всю работу, а именно:

  1. Копировать первое поколение с листа start на лист game.
  2. Проходить по ячейкам игрового поля на листе game и проверять окружающих соседей (блок 3х3) для каждой из них.
  3. В зависимости от результатов проверки помечать на листе следующего поколения next ту же ячейку как живую (1) или мертвую (пусто).
  4. Копировать получившееся новое поколение с листа next вместо текущего на листы игры game.
  5. Повторять пункты 2-4 несколько раз, сменяя одно поколение другим и отображая на экране изменения в нашей «колонии».

Для начала откроем редактор Visual Basic на вкладке Разработчик (Developer). Если такой вкладки не видно, то её нужно будет сначала отобразить через Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon), включив соответствующий флажок.

В открывшемся окне редактора создадим новый модуль с помощью команды меню Insert — Module, а затем скопируем и вставим туда код нашего макроса:

Sub Life()
    Dim cell As Range, n As Integer, i As Integer
    
    Set rGame = Worksheets("Game").Range("B2:AE31")
    Set rStart = Worksheets("Start").Range("B2:AE31")
    Set rNext = Worksheets("Next").Range("B2:AE31")
    Set wNext = Worksheets("Next")

    rStart.Copy Destination:=rGame
    
    For i = 1 To 50
        rNext.ClearContents
        For Each cell In rGame.Cells
            n = WorksheetFunction.CountA(cell.Offset(-1, -1).Resize(3, 3)) - cell.value
            If cell = "" And n = 3 Then wNext.Cells(cell.Row, cell.Column) = 1
            If cell = 1 And (n = 2 Or n = 3) Then wNext.Cells(cell.Row, cell.Column) = 1
            If cell = 1 And (n < 2 Or n > 3) Then wNext.Cells(cell.Row, cell.Column) = ""
        Next cell
        rNext.Copy Destination:=rGame
    Next i
End Sub

Теперь давайте разберем его построчно для понятности:

Поскольку в коде нам придется несколько раз ссылаться и много раз работать с диапазонами игрового пространства (B2:AE31) на каждом из трёх листов книги, то имеет смысл сразу оформить их как переменные. Это делается в блоке:

Set rGame = Worksheets("Game").Range("B2:AE31")
Set rStart = Worksheets("Start").Range("B2:AE31")
Set rNext = Worksheets("Next").Range("B2:AE31")

Заодно мы создаем ещё и переменную wNext, которая ссылается на весь лист next целиком — это нам тоже пригодится в будущем:

Set wNext = Worksheets("Next")

Затем, перед началом игры, мы должны перенести первое поколение с листа start на лист game. Это выполяется командой прямого копирования с использованием уже созданных переменных:

rStart.Copy Destination:=rGame

Поскольку мы хотим прокрутить в нашей игре не одно, а несколько (например, 50 для начала) поколений, то дальнейшие действия заключены в цикл:

For i = 1 to 50
...
Next i

А внутри этого цикла мы, во-первых, сначала очищаем рабочее пространство на листе next для формирования следующего поколения:

rNext.ClearContents

А, во-вторых, запускаем вложенный цикл прохода по всем ячейкам игровой вселенной на листе game, чтобы проверить каждую из них — это реализовано циклом прохода по коллекции:

For Each cell in rGame.Cells
...
Next cell

Ссылка на очередную проверяемую ячейку будет храниться в переменной cell. Для этой ячейки нам нужно сначала построить окрестность 3х3 с ней в середине. Это выполняется с помощью конструкции:

cell.Offset(-1, -1).Resize(3, 3)

Здесь метод Offset(-1,-1) виртуально сдвигает текущую проверяемую ячейку на одну строку вверх и на один столбец влево, а потом метод Resize(3,3) опять же виртуально растягивает эту одну ячейку до новых размеров 3 на 3:

Offset и Resize

Чтобы посчитать количество заполненных ячеек в полученной окрестности применяется функция рабочего листа СЧЁТЗ (COUNTA), которую в VBA можно вызвать с помощью объекта WorksheetFunction. Таким образом количество живых соседей в окружающей текущую ячейку области 3 на 3 мы получаем выражением (не забыв вычесть из полученного количества текущую ячейку):

n = WorksheetFunction.CountA(cell.Offset(-1, -1).Resize(3, 3)) - WorksheetFunction.CountA(cell)

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

If cell = "" And n = 3 Then wNext.Cells(cell.Row, cell.Column) = 1
If cell = 1 And (n = 2 Or n = 3) Then wNext.Cells(cell.Row, cell.Column) = 1
If cell = 1 And (n < 2 Or n > 3) Then wNext.Cells(cell.Row, cell.Column) = ""

Когда цикл прохода по ячейкам будет завершен, то сформированное следующее поколение с листа next нужно скопировать на место текущего на листе game — делаем это уже знакомой конструкцией:

rNext.Copy Destination:=rGame

Вот, собственно, и вся логика.

Осталось вернуться в Excel на лист game, запустить нашу игру через вкладку Разработчик — Макросы (Developer — Macro) и насладиться процессом развития нашей колонии:

Игра Жизнь Life

Ссылки по теме

  • Что такое макросы и как их программировать в Microsoft Excel
  • Справочник по игре «Жизнь» — сайт LifeWiki

Время на прочтение
1 мин

Количество просмотров 190K

Бухгалтер из Торонто по имени Кэри Уолкин (Cary Walkin) никогда не занимался разработкой компьютерных игр, но в совершенстве освоил Excel. Этого оказалось достаточно для создания RPG-игры, которая работает на макросах VBA, встроенного языка программирования Excel.

Игру Arena.Xlsm версии 1.0 можно скачать здесь:

v1-0-arena.xlsm (работает в Excel 2007 и Excel 2010 под Windows)

Ключевые особенности:

  • Увлекательный сюжет с четырьмя различными концовками, в зависимости от прохождения игры
  • Более 2000 врагов с различным уровнем ИИ
  • 39 модификаторов вещей означает более 1000 возможных комбинаций и свойств предметов
  • 8 схваток с боссами, для победы над каждым из них нужна особая тактика
  • 4 предварительно подготовленных игровых пространства
  • 31 заклинание, есть много разных стратегий для успеха
  • 15 уникальных артефактов
  • 36 наград (достижений)
  • Вся игра от начала до конца проходит внутри рабочей книги Excel

Официальная wiki-страница для помощи по игре, там же информация о базовых стратегиях.

Так что если увидите бухгалтера в офисе, который целыми сутками сидит в программе Excel, присмотритесь к нему повнимательнее. Кто знает, какие заклинания он сейчас подбирает для босса на шестом уровне.

Теги:

  • Arena.Xlsm
  • Excel
  • RPG
  • рабочая книга Excel
  • макрос
  • VBA

Хабы:

  • Ненормальное программирование
  • Разработка игр
  • Visual Basic for Applications

Вступление

Все мы знакомы с Excel. Вот и я, душный банковский служащий, что-то да слышал об этом инструменте.

Одни люди умеют лишь форматировать ячейки, другие создают клоны Doom, используя встроенный в Microsoft Office язык программирования.

Я не претендую на второй тип, но и к первым себя не отношу. Для меня Visual Basic for Applications, или VBA, стал тем первым ЯП, который заинтересовал и позволил уверовать в свои силы. Путешествие в этот интересный мир началось с автоматической записи макросов и разбора созданного программой кода.

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

Однако наступил такой момент, когда все рабочие задачи оказались решены и автоматизированы, а внутреннему программисту (ха-ха) все ещё хотелось чего-то большего.

Эта серия статей не была задумана как обучающая (ведь я сам ещё учусь), но если что-нибудь изложенное будет полезно начинающим программистам, которые только погружаются в мир Visual Basic, то считайте, что я пополнил интернет одной полезной ссылкой.

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

К тому же где, как не в комментариях, мне доходчиво и культурным языком укажут на допущенные ошибки?

Я постараюсь объяснять все подробно, но без углубления в простейшие истины. Не буду рассказывать, что такое переменные, циклы или массивы. Всю эту информацию, изложенную доступным языком, можно найти в интернете.

В этих статьях я буду описывать процесс создания игр в Excel, начиная с простейших пятнашек и заканчивая глобальной RPG. Это позволит мне больше углубиться в тему, а вам поглумиться над неумехой-программистом. Или, в лучшем случае, забрать готовое решение на работу и скрывать безделье за мнимой подготовкой отчета. Ссылки на все исходные материалы будут в свободном доступе.

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

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

Итак, хватит грофомании! ПЯТНАШКИ.

Первым делом…

Необходимо определиться с игровым полем. В данном случае все просто. Что есть пятнашки? Диапазон размером 4 на 4 ячейки, что в сумме даёт 16 ячеек. Переименовываем первый лист (по желанию), приводим нужные ячейки к квадратной форме и декорируем, как душе угодно. Получается примерно следующее:

Формирование игрового поля

На этом этапе необходимо в случайном порядке расположить числа от 1 до 15, а также пустое поле на выбранном диапазоне. Для этого открываем окно редактирования кода (Alt + F11), добавляем простой модуль (при желании и его можно переименовать для красоты).

Создаем публичную переменную rngPlayField, которая будет хранить координаты нашего игрового поля, и в методе initializeField() пишем следующий код:

Public rngPlayField As Range

Sub initializeField()

Dim collNumbers As New Collection, countNumbers As Byte, rndNumber As Byte, fndCells As Range

Set rngPlayField = Sheets(«MAIN»).Range(«B2:E5») ‘игровой диапазон

For countNumbers = 1 To 16 ‘формируем коллекцию чисел

collNumbers.Add countNumbers

Next

For Each fndCells In rngPlayField.Cells ‘цикл для каждого элемента на игровом поле

rndNumber = Application.WorksheetFunction.RandBetween(1, collNumbers.Count) ‘случайное число от 1 до количества элементов в коллекции
fndCells.Value = collNumbers.Item(rndNumber) ‘значение ячейки = случайное число из коллекции
collNumbers.Remove rndNumber ‘удаляем использованное число из коллекции

Next

Call decorateField ‘вызываем декорирование поля

End Sub

Сперва метод создаёт коллекцию чисел от 1 до 16.

Я заметил особенность, что в VBA в большинстве случаев удобнее пользоваться коллекциями элементов, чем одномерными массивами. В моей практике были и такие случаи, когда приходилось использовать коллекции массивов (возможно, из-за моей некомпетентности).

InitializeField() запускает цикл For Each, который распространяется на каждую ячейку нашего диапазона. На первом этапе цикла программа рассчитывает случайное число от 1 до значения размера нашей коллекции (в настоящий момент 16) и помещает в первую ячейку диапазона число, хранящееся в коллекции под полученным случайным индексом.

Далее цикл удаляет из коллекции использованное число и переходит к следующей ячейке.

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

UPD. Уже в процессе написания статьи я выяснил, что не все комбинации, полученные таким образом, изначально решаемы. Тогда мной в ускоренном темпе был написан код, который сперва формирует правильное поле от 1 до 16, а затем в стиле песков времени разбирает пятнашки в течении 300 ходов (что мы собственно и делаем в реальной жизни, когда хотим «рестартнуть» игру). Направление движения «костяшки» рассчитывается случайным образом.

Sub createRightField()

Dim countNumbers As Byte, fndCells As Range, countMoves As Integer, byteRndDir As Byte, fndRndRange As Range

countNumbers = 1

For Each fndCells In rngPlayField.Cells ‘заполняем поле значениями от 1 до 16

fndCells.Value = countNumbers
countNumbers = countNumbers + 1

Next

While countMoves < 300

byteRndDir = 3 * Rnd() + 1 ‘ 1 — up, 2 — down, 3 — left, 4 — right

For Each fndRndRange In rngPlayField.Cells

If fndRndRange.Value = 16 Then

Select Case byteRndDir ‘выбор направления

Case 1

If fndRndRange.Offset(-1, 0) <> «» Then

fndRndRange.Value = fndRndRange.Offset(-1, 0)
fndRndRange.Offset(-1, 0) = 16
countMoves = countMoves + 1

End If

Case 2

If fndRndRange.Offset(1, 0) <> «» Then

fndRndRange.Value = fndRndRange.Offset(1, 0)
fndRndRange.Offset(1, 0) = 16
countMoves = countMoves + 1

End If

Case 3

If fndRndRange.Offset(0, -1) <> «» Then

fndRndRange.Value = fndRndRange.Offset(0, -1)
fndRndRange.Offset(0, -1) = 16
countMoves = countMoves + 1

End If

Case 4

If fndRndRange.Offset(0, 1) <> «» Then

fndRndRange.Value = fndRndRange.Offset(0, 1)
fndRndRange.Offset(0, 1) = 16
countMoves = countMoves + 1

End If

End Select

End If

Next

Wend

Call decorateField

End Sub

Имитация движения «костяшек» по игровому полю

Сперва создаём обработчик события нажатия на определенную ячейку. Для этого в модуле листа, на котором расположено игровое поле, формируем метод Worksheet_SelectionChange и пишем в нем следующий код. Переменная Target при этом содержит адрес выбранной ячейки.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Set rngPlayField = Sheets(«MAIN»).Range(«B2:E5»)

If Target.Cells.Count > 1 Then

Exit Sub

ElseIf Not Application.Intersect(rngPlayField, Target) Is Nothing Then ‘считывает вхождение нажатой ячейки в игровое поле

Call moveCells(Target)

End If

End Sub

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

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

В основном модуле в методе moveCells(byVal rngCell as range) пишем следующее:

Sub moveCells(ByVal rngCell As Range) ‘процедура нажатия на ячейку с числом

Dim checkCells As Integer

For checkCells = -1 To 1 Step 2 ‘цикл для проверки ячеек слева/справа и сверху/снизу от выбранной ячейки

If rngCell.Offset(checkCells, 0).Value = 16 And Not Application.Intersect(rngPlayField, rngCell.Offset(checkCells, 0)) Is Nothing Then ‘проверка сверху/снизу

rngCell.Offset(checkCells, 0).Value = rngCell.Value
rngCell.Value = 16

ElseIf rngCell.Offset(0, checkCells).Value = 16 And Not Application.Intersect(rngPlayField, rngCell.Offset(0, checkCells)) Is Nothing Then ‘проверка слева/справа

rngCell.Offset(0, checkCells).Value = rngCell.Value
rngCell.Value = 16

End If

Next

Call decorateField ‘ вызываем декорирование поля

Цикл проверяет, есть ли слева, справа, снизу или сверху от нажатой ячейки пустое поле (его имитирует число 16) и считывает вхождение смещенной ячейки в диапазон игрового поля. Если условия выполнены, то программа просто меняет числа местами.

Декорирование игрового поля и проверка победы в методе decorateField()

Создаём в рабочей книге второй лист и размещаем на нем победный вариант. Пример:

Далее пишем следующий код:

Sub decorateField() ‘декорирует и проверяет на победу

Dim fndZero As Range, rngRightData As Range, countRows As Byte, countColumns As Byte, countRight As Integer

Set rngRightData = Sheets(«DATA»).Range(«A1:D4») ‘диапазон с правильными значениями

For countRows = 1 To 4

For countColumns = 1 To 4

If rngPlayField.Cells(countRows, countColumns) = rngRightData.Cells(countRows, countColumns) rngPlayField.Cells(countRows, countColumns) <> 16 Then ‘декорирование правильной позиции

With rngPlayField.Cells(countRows, countColumns)

.Interior.Color = RGB(0, 150, 0) ‘vbGreen показался мне слишком ярким
.Font.Color = vbWhite

End With

countRight = countRight + 1

Else

With rngPlayField.Cells(countRows, countColumns)

.Interior.Color = xlNone
.Font.Color = vbBlack

End With

End If

Next

Next

For Each fndZero In rngPlayField ‘цвет шрифта для нуля

If fndZero = 16 Then

fndZero.Font.Color = vbWhite

End If

Next

If countRight = 15 Then ‘проверка победы

MsgBox «Победа!», vbExclamation, «Победа»

End If

End Sub

Данная программа с помощью цикла проверяет значение каждой ячейки игрового поля на соответствие аналогичной ячейке поля с победной расстановкой значений и закрашивает правильные варианты в зелёный цвет. И наоборот. Далее метод проверяет поле на наличие числа 16 (которое имитирует пустую «костяшку», не забываем) и устанавливает для шрифта белый цвет. Последний момент: проверка победы. При каждом совпадении каких-либо чисел с правильной позицией увеличивается переменная countRight, и когда ее значение станет равно 15, игра сообщит о победе.

ЭПИЛОГ

В итоге должно получиться примерно следующее:

Вот таким нехитрым образом можно создать себе развлечение на случай скучных рабочих дней. А тем временем на ум приходит следующая картинка:

При желании в игру можно добавить подсчет ходов, рейтинговую таблицу или график динамики побед.

Сейчас же я считаю, что на этом можно остановиться.

Следующая статья выйдет When it’s done. Скорее всего в течение недели.

Excel — мощная программа, в которой можно создавать другие программы, поменьше. Даже отдельные функции являют собой, по сути дела, особые программки. Не все они служат скучным целям. Игр, написанных специально для Excel, довольно много. Возможно, игры и не исчезли, а просто их упрятали поглубже. Если вам известно, как запустить в Microsoft Office какую-нибудь игрушку, напишите мне, пожалуйста. Иногда в творческом процессе так хочется кого-нибудь пристрелить или где-нибудь полетать…

Игры inside

В версиях Excel 95-2000 игрушки, придуманные авторами программы, «спрятаны». Например, в Excel 95 нужно проделать следующие шаманские действия.

  1. Создать новую книгу.
  2. Выделить строку gод номером 95.
  3. Нажать клавишу табуляции.
  4. Открыть меню Справка ► 0 программе.
  5. Удерживая одновременно клавиши Ctr, Alt и Shift, щелкнуть на пункте Техническая поддержка.

И запускается «стрелялка», напоминающая комбатс и светлой памяти Doom, только попроще!

В Excel 97 действия для вызова игры такие.

  1. Выполнить команду Сервис ► Параметры и в открывшемся окне на вкладке Общие снять флажок Стиль ссылок R1C1.
  2. Создать таблицу.
  3. Нажать F5 и ввести в появившемся окне кабалистическую надпись Х97:_97.
  4. Нажать Enter.
  5. Выделить строку с номером 97.
  6. Нажать клавишу табуляции, а затем, удерживая Shift и Ctrl, щелкнуть на значке Мастера диаграмм и подождать, пока открывающееся окно не заполнит весь экран.

В результате вы сможете оценить достоинства авиасимулятора, придуманного и разработанного программистами Microsoft.

В Excel 2000 процедура запуска игры усложнена. Нужно выполнить такие действия.

  1. Создать новую книгу.
  2. Сохранить ее в формате веб-страницы (Сохранить как Web-страницу), установив флажки выделенное: Лист и Добавить интерактивность.
  3. Открыть созданную страницу в Internet Explorer версии не ниже 5.0.
  4. Выделить строку 2000.
  5. Клавишей табуляции перевести выделение на ячейку WC 2000.
  6. Одновременно нажать клавиши Ctrl, Alt и Shift, расположенные на клавиатуре слева, и щелкнуть в левом верхнем углу внедренного в веб-страницу листа Excel на эмблеме Office.

После этого у вас появляется возможность погонять по виртуальной трассе виртуальные же машинки.

После 2000 года руководство компании Microsoft, видимо, узнало, чем занимаются программисты вместо того, чтобы улучшать интерфейс и повышать надежность программных продуктов. Или еще что-то случилось. Во всяком случае, начиная с Office ХР «встроенные» игры из Excel исчезли. А заодно и из Word, где была, например, неплохая вариация на тему игры Pinball.

Игры-макросы

В Excel (и вообще в любой программе Microsoft Office) есть возможность написать мини-приложение на языке программирования VBA (Visual Basic for Applications). Обычно на нем пишут какие-нибудь полезные вещи — сложные расчеты, поиск объектов по определенному признаку, хитрое форматирование данных. Но никто не запрещает и игру написать.

А хоть бы и запрещали! В Интернете полно игр, написанных для Excel. Не буду даже советовать конкретные сайты. Достаточно зайти на поисковый сервер (например, http://www.google.com или http://www.yandex.ru) и в строке поиска написать Excel игра или, если хотя бы чуть-чуть читаете по-английски, Excel game. Увидите множество ресурсов, где есть подходящие игрушки. Правда, для их запуска нужно немного изменить настройки программы.

Давайте я вам расскажу, как установить какую-нибудь игру, а заодно и передохну на совершенно законном основании. Для тестирования я выбрал старый добрый «Тетрис». Ностальгия, знаете ли, замучила: молодость, лаборатория нелинейной спектроскопии, поляризация лазера на красителях, расчет эксперимента на ЭВМ «Мазовия», а в перерывах… М-да… Молодость ушла, а «Тетрис» жив и постоянно появляется в самых неожиданных формах: например в виде игрушки для Excel. Файл игры я скачал с одного популярного интернет-портала. Это обычный документ Excel под названием Tetris.xls. Открыл его… и туг же обнаружил многозначительное предупреждение.

Ни в коем случае не разрешайте выполнение неизвестных макросов, если не уверены в их безвредности! Я бы ни за что не стал этого делать, но надо же вас научить играть в «Тетрис»!

Это очень важное предупреждение. Давайте с ним разберемся, прежде чем пойти дальше. Как я уже писал, игры — это мини-программы (макросы), написанные на языке VBA. Это не очень «навороченный* язык, по всякого рода вредители навострились писать вирусы и на нем.

Поэтому в Excel 2007-2013 по умолчанию выполнение всех макросов запрещено. Как известно, воздержание — единственный надежный метод предохранения. Поэтому, увидев такое предупреждение в незнакомом файле, который вы получили неизвестно от кого, лучше сразу закройте его и займитесь чем-нибудь другим. В данном случае я трижды плюнул через левое плечо, помолился лицензионному антивирусу, который стережет мой компьютер, и не стал закрывать файл. Более того, я нажал кнопку Параметры и увидел окно настроек.

Тут я еще раз поплевал через плечо и установил переключатель в положение Включить это содержимое. И нажал ОК. С этой секунды все макросы, записанные в файле Tetris.xls, перешли в активное состояние. При внимательном рассмотрении файл с игрой «Тетрис» оказался очень простым. Кроме данных об авторе, на листе оказались две кнопки — Запуск и Выход, а также список уровней сложности, от первого до пятого. Я, естественно, начал с самого сложного, пятого, и погрузился в игру.

Выяснилось, что руки до сих пор помнят клавиши управления игрой: на цифровой клавиатуре стрелки ← и → сдвигают фигуру соответственно влево и вправо; стрелка ↑ поворачивает фигуру вокруг своей оси; стрелка ↓ ускоряет движение вниз. Мышечная память оказалась очень кстати, потому что в самом файле об управлении игрой — ни слова.

Понравилась статья? Поделить с друзьями:
  • Макросы для защиты excel
  • Макросы для excel яндекс
  • Макросы для excel штрих код
  • Макросы для excel в open
  • Макросы в excel сцепить ячейки в excel