Методы, описанные в статье, не претендуют на истину в последней инстанции. Я описываю то, как это было сделано мной ТАМ, в местах отсутствия интернета и сильнейшего воздействия на психику.
Часть первая — создание формы клиента.
В VBA есть формы… с формами работать приятнее и самое главное — привычнее. Для BomberMan'а мне понадобилось 12 миниатюр и немного творческого подхода в Paint:
— пустая клетка
— бетонная стена
— целая кирпичная стена
— полуразрушенная кирпичная стена (в момент взрыва имитация исчезновения)
— бомба
— яркий огонь взрыва
— догорающий огонь после взрыва (аналогичное исчезновение)
— могилка RIP
— зеленый человечек
— красный
— синий
— желтый
Игровое поле размером 19х29, из них 9х14 бетонных стен. Принцип построения игровой формы таков: на форму необходимо добавить 8 эталонов миниатюр (Visible = false, с них мы просто будем копировать изображения) и 19х29=551 пустых ячеек Image, в них мы будем подставлять эталонные текстуры. Оставшиеся четыре изображения (разноцветные человеки) будут перемещаться над игровым полем по координатам.
Создадаем форму в VBA Экселя.
При инициализации формы необходимо расставить пустые ячейки Image1..551 и цветных человеков по своим местам. Цикл от 1 до 551, с присвоением параметров координат Left и Top. Ну и менюшку подключения набросал.
Клиент сам по себе приложение простое. Далее отслеживаем нажатия клавиш, двигаем человечка и записываем его координаты в файл. Одновременно с этим постоянно считываем и отображаем изменения на игровом поле. Это основа.
Часть вторая — взаимодействие клиента с сервером.
Я организовывал игровой процесс через текстовые файлы. Первый файл — это игровое поле 19 строк по 29 чисел в каждой. 0 — пустая клетка, 1 — затухающий огонь, 2 — яркий огонь, 3 — разрушенная стена, 4 — целая стена… и т.д Сервер работает с простой последовательностью из чисел.
Еще четыре файла отвечают за текущие координаты каждого из игроков и его свежие бомбы. Таким образом программа, выступающая в качестве сервера, считывает четыре файла с координатами, обрабатывает игровое поле для следующего момента времени и выплевывает главный файл, который в свое время считывает каждый из клиентов.
Часть третья — сервер.
Сервер штука умная. Это отдельное приложение и внутри тикает таймер, по нему подгружаются файлы с координатами каждого из игроков
и генерируется поле для следующего момента времени.
Следующий момент времени — это такой условный момент, когда яркий огонь от взрыва тускнеет, поврежденная стена разрушается до конца, таймер каждой из бомб уменьшается на единицу, вызывая функцию взрыва при неоходимости. При этом в массив игрового поля дописываются новые бомбы, новые взрывы и координаты игроков.
Функция взрыва, кстати говоря, была реализована в виде рекурсии. Вся связная цепочка бомб взрывалась в один момент времени, а не по очереди. Поочередный врыв потребовал бы слишком большого FPS, что я не мог себе позволить. А так взрыв получался эффектным и затухал единовременно. На скриншоте правда видны небольшие разногласия в затухании, но это, видимо, вызвано тормозами на стороне клиента.
На Ваш суд получилось своего рода краткое теоретическое описание принципов работы сетевого Бомбермена на 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. Креативный и толковый программист и дисплея микроволновки визуализатор музыки сделает. Успехов!