Как сделать игру в excel

Пишем игру «Жизнь» (Life) на VBA в Excel

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

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

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

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

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

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

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

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

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

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

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

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

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

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

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

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

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

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

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

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

Источник

8 популярных игр воссозданы в Microsoft Excel

Программа Microsoft Excel может пригодиться во многих ситуациях. Формулы, функции, справочники и учебные пособия, обработка бизнес-информации — всё это может делать Excel. Однако, что если вы хотите просто расслабиться? Excel может помочь и в этом.

В этой статье мы рассмотрим 8 игр, которые запускаются в Microsoft Excel.

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

Однопользовательская головоломка популярна на Android и iOS. Данная игра создана на основе предыдущих, таких как Threes и 1024. Всего за одну неделю её создал 19-летний Габриэль Сирулли. Не желая зарабатывать на том, что он не изобретал, Сирулли загрузил бесплатные версии игры 2048 на Android и iOS.

Есть версия игры для Excel, позволяющая играть в таблицах. Предлагается режим просмотра 2D и 3D, звуковые эффекты, отслеживание движений и история, некоторые другие трюки.

2048 Stealth Mode в Excel

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

Scrabble

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

Продолжая разговор о головоломках, поговорим о Scrabble. Tom_Jobim с Reddit создал игру, которая открывает отдельное окно в Excel, так что она не совсем в таблице. Применяется язык VBA.

Реализация игры на высоком уровне. Вы противостоите искусственному интеллекту с различными уровнями навыка, от 1 до 100. Имеется инструмент анаграмм, встроенный словарь, разные тематические планы, таймеры и многое другое.

Arena.Xlsm

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

Не хотите головоломки? Arena.Xlsm даст вам возможность противостоять более 2000 потенциальных противников с искусственным интеллектом. Когда они появляются на экране, вы должны сразить их.

Имеется 8 боссов, 12 запрограммированных боевых арен, более 30 заклинаний, 20 уникальных предметов и даже системы достижений.

Arena.Xlsm также доступна на Itch.io, если вы предпочитаете отслеживать игры на определённых платформах.

Candy Crunch Number Saga

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

Вы берёте контроль над фондовым рынком, в том числе влияя на рыночную стоимость разработчика этой игры King.com.

Эта сатирическая игра происходит в недалёком будущем, где King.com (KING) провела успешное размещение акций (IPO) и их курс взлетел до небес.

Candy Number Crunch Saga предлагает более 35 новостных событий, которые влияют на стоимость акций. Отображается курс акций в реальном времени. Игра стала результатом четырёх дней работы канадского бухгалтера Кари Уолкина. Он же является автором Arena.Xlsm. Игра также доступна на Itch.io.

Championship Manager For Microsoft Excel

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

Одна из наиболее сильно вызывающих привыкание игр есть и на Excel. Это неудивительно, поскольку серия футбольных менеджеров больше других игр похожа на таблицы.

Можно играть в четырёх английских лигах, есть кубок Англии, кубок Лиги, Лига Чемпионов. Для трансферов доступно около 3000 футболистов.

Имеются дисквалификации и травмы, которые можно компенсировать молодёжным составом. Кому-то понравится еженедельная таблица результатов в старом стиле.

Нужно иметь ввиду, что вы не сможете получить лучших футболистов Премьер-лиги из реального мира. Все имена созданы случайным образом, чтобы не нарушать авторские права.

CellSweeper

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

CellSweeper представляет собой РПГ с подземельями в жанре Roguelike. Игра основана на Сапёре из старых версий Windows.

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

Tetris

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

Раз на Excel так много головоломок, невозможно обойтись и без Tetris. Здесь данная игра представлена в довольно простом варианте, но это не делает её менее увлекательной.

Yahtzee

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

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

Играть можно вдвоём или против искусственного интеллекта. Есть инструкции по игре и подсчёту очков.

Бонус: Fraqcel

Как сделать игру в excel. Смотреть фото Как сделать игру в excel. Смотреть картинку Как сделать игру в excel. Картинка про Как сделать игру в excel. Фото Как сделать игру в excel

Это не совсем игра, а скорее психоделический опыт. Или хотя бы попытка предложить его.

Fraqcel генерирует разнообразные геометрические фигуры, которые вы можете увеличивать в сотни раз. Есть четыре типа фракталов, возможность экспортировать изображения, глубокий зум и настраиваемые цветовые палитры.

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

Заключение

Игры для Excel являются довольно нишевым продуктом. Чаще всего их создают изучающие язык VBA люди в качестве практики. Почти все такие игры используют сочетание VBA и вручную созданных макросов. Excel также играет роль во многих Flash-играх. В последних сложнее сделать вид, что вы работаете.

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

Источник

Пишем игры на. 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. Скорее всего в течение недели.

Источник

Пошаговая RPG в Excel (Начало)

Вам бывает скучно на работе? Часто сидите два-три дня без единого намёка на трудовую деятельность и пытаетесь ее имитировать, а руководство так и ждет ошибки с вашей стороны?

Теперь этого можно будет избежать, ведь в разработке находится пошаговая RPG в стиле Dragon Quest на NES для офисного приложения Excel.

Конечно, идея не нова. В Excel и раньше делали разнообразные игры (даже полноценный шутер). Но если вы читали мои предыдущие статьи, то поймёте, что создавать троллейбусы из батонов белого (или чёрного) хлеба — мое небольшое хобби.

На данный момент готова альфа-версия графического движка и редактор карт. С вероятностью в 99% они будут дорабатываться в процессе разработки.

Сперва немного расскажу о некоторых технических характеристиках.

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

2. Все текстуры имеют размер 16*16 пикселей. Палитра состоит всего из 56 цветов (стандартный размер палитры Excel). В качестве основы я взял палитру NES.

3. Текстуры я рисую в программе Aseprite, а в Excel из. bmp перевожу с помощью небольшого, написанного на VBA софта, который нашел в интернете.

4. Бэкграунд состоит из тайлов, спрайты же привязаны к системе координат.

Карта уровня представляет собой двумерный массив с кодовым обозначением тайла в формате «XXXY», где XXX — номер текстуры по порядку, Y — значение, указывающее на то, можно ли пройти сквозь тайл. Вторая функция пока что не реализована.

Спрайты хранятся в отдельном массиве в формате: координата X, координата Y, порядковый номер спрайта, тип спрайта и тэг. Два последних значения пока не используются.

Для создания графического движка сперва необходимо инициализировать различные переменные. Часть из них хранится на отдельном листе, а в коде я сделал их публичными (знаю, что так нельзя):

— высота и ширина игрового экрана;

— диапазон игрового экрана;

— массив игрового экрана для рендеринга;

— размер одной текстуры;

— карта тайлов и координаты спрайтов;

— массив спрайтов, тайлов и спрайтов игрока.

Все текстуры хранятся на отдельном листе с отображением индексов цветов палитры.

Так как это только первая версия движка, нажатие на «Новую игру» тут же запускает метод fillWithTextures (процесс создания массива цифровых значений цвета).

Первым делом происходит поиск спрайтов, которые нужно отрисовать. Для этого программа проверяет каждый «пиксель» игрового экрана, считает смещение этого пикселя относительно стартовых координат камеры, а также смещение относительно всех спрайтов на уровне. Если смещение «пикселя» относительно спрайта по каждой оси равно от 0 до 15 (так как размер текстуры 16*16), берётся индекс нужного цвета из массива спрайтов.

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

Почему сперва происходит проверка спрайтов, а затем тайлов?

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

P.S. На следующий день я понял, что проверка условия «закрашенности» спрайтами должна производиться в начале. Тогда это повлияет на производительность. Привет, оптимизация.

Вторая проблема — это проверка спрайтов для каждого пикселя экрана. Предположим, что на уровне находится 40 спрайтов. При размере экрана 96*64 = 6144 пикселей количество итераций цикла достигает 6144 * 40 = 245760. Если пойти другим путём и проверять спрайты не для каждого пикселя, а по условию нахождения в поле зрения камеры, то количество итераций не превысит 40*16*16 = 10240. Эта проблема решается быстро.

Для того, чтобы поместить спрайт игрока в рендер-массив нужно посчитать смещение спрайта относительно координат камеры.

Аргумент imagePose будет использоваться для имитации поворота игрока при движении.

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

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

Вот, что получается в итоге:

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

В любом случае жду критику и советы. Всегда интересно послушать, что скажут люди.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *