![](http://habrastorage.org/files/1db/5c0/f4a/1db5c0f4a2ad4009b382a0a1d3484f27.jpg)
Методы, описанные в статье, не претендуют на истину в последней инстанции. Я описываю то, как это было сделано мной ТАМ, в местах отсутствия интернета и сильнейшего воздействия на психику.
Часть первая — создание формы клиента.
В VBA есть формы… с формами работать приятнее и самое главное — привычнее. Для BomberMan'а мне понадобилось 12 миниатюр и немного творческого подхода в Paint:
![](http://habrastorage.org/files/c1a/ebc/382/c1aebc38221c433f96e09b91502f65fe.bmp)
![](http://habrastorage.org/files/216/d91/e27/216d91e27dc94a24bb286f93a863ac63.bmp)
![](http://habrastorage.org/files/5b2/095/d7a/5b2095d7a62b4d5eb3f8c38a39e5025b.bmp)
![](http://habrastorage.org/files/7e4/094/d54/7e4094d54b544ecdb2923974a975724b.bmp)
![](http://habrastorage.org/files/5cb/42f/86d/5cb42f86d4174f848017096ab18d26d0.bmp)
![](http://habrastorage.org/files/8f2/046/102/8f20461022fc4e1294cebc276a5c8a7d.bmp)
![](http://habrastorage.org/files/83e/c20/03d/83ec2003d689486796ba775d42cfe5dc.bmp)
![](http://habrastorage.org/files/0ef/363/0b1/0ef3630b1f184a8bbe627d6b7da64ac9.bmp)
![](http://habrastorage.org/files/7d6/36b/107/7d636b1079414a3a94c27fd698d06689.bmp)
![](http://habrastorage.org/files/c07/86c/788/c0786c7883464b8a98e40ea79f5c8cac.bmp)
![](http://habrastorage.org/files/083/f84/ddb/083f84ddb64a43c3a021f0bf6de0d402.bmp)
![](http://habrastorage.org/files/6f9/af1/edb/6f9af1edb2f34123a86c01f315266df8.bmp)
Игровое поле размером 19х29, из них 9х14 бетонных стен. Принцип построения игровой формы таков: на форму необходимо добавить 8 эталонов миниатюр (Visible = false, с них мы просто будем копировать изображения) и 19х29=551 пустых ячеек Image, в них мы будем подставлять эталонные текстуры. Оставшиеся четыре изображения (разноцветные человеки) будут перемещаться над игровым полем по координатам.
Создадаем форму в VBA Экселя.
![](http://habrastorage.org/files/335/ae3/a3b/335ae3a3bf2e424396402b756adc8cbc.jpg)
При инициализации формы необходимо расставить пустые ячейки Image1..551 и цветных человеков по своим местам. Цикл от 1 до 551, с присвоением параметров координат Left и Top. Ну и менюшку подключения набросал.
![](http://habrastorage.org/files/8ff/66a/498/8ff66a4987e946b4b85bcc6df63f093c.jpg)
Клиент сам по себе приложение простое. Далее отслеживаем нажатия клавиш, двигаем человечка и записываем его координаты в файл. Одновременно с этим постоянно считываем и отображаем изменения на игровом поле. Это основа.
Часть вторая — взаимодействие клиента с сервером.
Я организовывал игровой процесс через текстовые файлы. Первый файл — это игровое поле 19 строк по 29 чисел в каждой. 0 — пустая клетка, 1 — затухающий огонь, 2 — яркий огонь, 3 — разрушенная стена, 4 — целая стена… и т.д Сервер работает с простой последовательностью из чисел.
![](http://habrastorage.org/files/ede/ee0/eac/edeee0eac40f463fa6784d43f247471f.jpg)
Еще четыре файла отвечают за текущие координаты каждого из игроков и его свежие бомбы. Таким образом программа, выступающая в качестве сервера, считывает четыре файла с координатами, обрабатывает игровое поле для следующего момента времени и выплевывает главный файл, который в свое время считывает каждый из клиентов.
Часть третья — сервер.
Сервер штука умная. Это отдельное приложение и внутри тикает таймер, по нему подгружаются файлы с координатами каждого из игроков
и генерируется поле для следующего момента времени.
![](http://habrastorage.org/files/b53/eb1/918/b53eb1918c624fc4a1e21d38c307b916.jpg)
Следующий момент времени — это такой условный момент, когда яркий огонь от взрыва тускнеет, поврежденная стена разрушается до конца, таймер каждой из бомб уменьшается на единицу, вызывая функцию взрыва при неоходимости. При этом в массив игрового поля дописываются новые бомбы, новые взрывы и координаты игроков.
Функция взрыва, кстати говоря, была реализована в виде рекурсии. Вся связная цепочка бомб взрывалась в один момент времени, а не по очереди. Поочередный врыв потребовал бы слишком большого FPS, что я не мог себе позволить. А так взрыв получался эффектным и затухал единовременно. На скриншоте правда видны небольшие разногласия в затухании, но это, видимо, вызвано тормозами на стороне клиента.
![](http://habrastorage.org/files/b52/627/1b1/b526271b1cba4a13ad40386db33b9f30.jpg)
На Ваш суд получилось своего рода краткое теоретическое описание принципов работы сетевого Бомбермена на VBA.
P.S. Что бы не говорили, а год это очень мало… Сколько еще хотелось успеть сделать, но не хватило времени.
Комментарии (18)
igor_suhorukov
06.04.2015 21:37+4Сколько за время службы среднестатистический солдат может написать игр на VB?)
lostpassword
06.04.2015 22:13+14Сколько еще хотелось успеть сделать, но не хватило времени.
Военная служба по контракту — выбор настоящихмужчинпрограммистов!
EvilBeaver
06.04.2015 22:44+6Я делал на Flash стрелялку-убивалку, где врагами были командир части и его зам. Игра пользовалась успехом даже у офицеров :)
kefiijrw
06.04.2015 22:51+1Я во время службы мечтал написать систему учета военнослужащих — график дежурств, нарядов, автоматический подсчет занятости, подготовка списка смен к заступлению на дежурстве — в общем, всё то, что приходилось мне вручную. Но представляю, какую офицерскую реакцию вызвал бы ответ «Поднимаю веб-сервер для написания админки учета» на вопрос «че делаешь?». Ведь есть же солдатик.
DIMOSUS
07.04.2015 04:18+9А мне как-то пришлось переносить сохранку игры (Elite) с компа на комп. Доступа к usb не было, сети тоже. В итоге распечатал сохранку в HEX виде на А4 и отсканил на другом компе. Потом немного кодинга и собрал отсканенный текст обратно в бинарние. Солдатская смекалка беспощадна.
GeckoPelt
07.04.2015 09:53+4Вот нападет враг, а мы против них хрясь, бомбермена на Excel!
susnake
07.04.2015 10:07Давно пора все войны перенести в онлайн.
Хочет одна страна напасть на другую — хрясь, запустили сервак какой-нить CS или Battlefield и пусть воюют там. Без ущерба для людей, зданий, животных и природы.074909
07.04.2015 22:58Так уже :)
ru.wikipedia.org/wiki/ERepublik
«Игра представляет собой отражение реального мира, в котором игроки (граждане) могут участвовать в политической, экономической, общественной и военной жизни государств.»
www.erepublik.com/ru
oWart Автор
07.04.2015 10:10+11Ну извините… можно толчки чистые показать, бордюры и траву покрашенные
DIMOSUS
07.04.2015 10:35+2Я еще грязный снег побелкой белил…
oWart Автор
07.04.2015 11:02+1а я здание гуталином красил…
AlexBin
07.04.2015 12:11+4Продолжайте ваш батл. Сейчас соберем все армейские боевые задачи в одном треде и напишем новую игру на экселе, где герои будут траву красить, снег белить и здания гуталином мазать.
EvilBeaver
07.04.2015 15:37+2К сожалению, полностью прочуствовать игру смогут только те, кто служил. Для остальных это будет просто нечто про тупых военных и не более.
seokirill
07.04.2015 16:04про тюрьму игра получилась более сюрреалистичная. Там условия кодинга жестче. Но изучить пхп и основы с++ удалось
AndrewNikolaevich
Никогда бы не додумался до такого, вот что значит креатив. Автору респект.
P.S. Креативный и толковый программист и дисплея микроволновки визуализатор музыки сделает. Успехов!