Чем заняться айтишнику в армии — руководство к действию

1db5c0f4a2ad4009b382a0a1d3484f27.jpgПервая статья вызвала большой резонанс по всему рунету. Сейчас же я хочу немного рассказать про техническую сторону вопроса, а именно как начать разработку BomberMan в Excel. Исходного кода игры не будет в силу его отсутствия, а будут лишь отдельные пояснения принципов работы.Методы, описанные в статье, не претендуют на истину в последней инстанции. Я описываю то, как это было сделано мной ТАМ, в местах отсутствия интернета и сильнейшего воздействия на психику.Часть первая — создание формы клиента.В VBA есть формы… с формами работать приятнее и самое главное — привычнее. Для BomberMan’а мне понадобилось 12 миниатюр и немного творческого подхода в Paint:

c1aebc38221c433f96e09b91502f65fe.bmp — пустая клетка

216d91e27dc94a24bb286f93a863ac63.bmp — бетонная стена

5b2095d7a62b4d5eb3f8c38a39e5025b.bmp — целая кирпичная стена

7e4094d54b544ecdb2923974a975724b.bmp — полуразрушенная кирпичная стена (в момент взрыва имитация исчезновения)

5cb42f86d4174f848017096ab18d26d0.bmp — бомба

8f20461022fc4e1294cebc276a5c8a7d.bmp — яркий огонь взрыва

83ec2003d689486796ba775d42cfe5dc.bmp — догорающий огонь после взрыва (аналогичное исчезновение)

0ef3630b1f184a8bbe627d6b7da64ac9.bmp — могилка RIP

7d636b1079414a3a94c27fd698d06689.bmp — зеленый человечек

c0786c7883464b8a98e40ea79f5c8cac.bmp — красный

083f84ddb64a43c3a021f0bf6de0d402.bmp — синий

6f9af1edb2f34123a86c01f315266df8.bmp — желтый

Игровое поле размером 19×29, из них 9×14 бетонных стен. Принцип построения игровой формы таков: на форму необходимо добавить 8 эталонов миниатюр (Visible = false, с них мы просто будем копировать изображения) и 19×29=551 пустых ячеек Image, в них мы будем подставлять эталонные текстуры. Оставшиеся четыре изображения (разноцветные человеки) будут перемещаться над игровым полем по координатам.

Создадаем форму в VBA Экселя.

335ae3a3bf2e424396402b756adc8cbc.jpg

При инициализации формы необходимо расставить пустые ячейки Image1…551 и цветных человеков по своим местам. Цикл от 1 до 551, с присвоением параметров координат Left и Top. Ну и менюшку подключения набросал.

8ff66a4987e946b4b85bcc6df63f093c.jpg

Клиент сам по себе приложение простое. Далее отслеживаем нажатия клавиш, двигаем человечка и записываем его координаты в файл. Одновременно с этим постоянно считываем и отображаем изменения на игровом поле. Это основа.

Часть вторая — взаимодействие клиента с сервером.Я организовывал игровой процесс через текстовые файлы. Первый файл — это игровое поле 19 строк по 29 чисел в каждой. 0 — пустая клетка, 1 — затухающий огонь, 2 — яркий огонь, 3 — разрушенная стена, 4 — целая стена… и т.д Сервер работает с простой последовательностью из чисел.

edeee0eac40f463fa6784d43f247471f.jpg

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

Часть третья — сервер.Сервер штука умная. Это отдельное приложение и внутри тикает таймер, по нему подгружаются файлы с координатами каждого из игроков

Оффтопик Да-да, с голыми координатами, без защиты от телепортации, если вы понимаете о чем я. Привет сослуживцам, не понимающим, как я убегал из заточения среди бомб… Вообще говоря, мой клиент умел и сквозь бомбы пробегать. Режим бога, так сказать. А я всегда ссылался на «баг в бета версии» :)

и генерируется поле для следующего момента времени.b53eb1918c624fc4a1e21d38c307b916.jpg

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

Функция взрыва, кстати говоря, была реализована в виде рекурсии. Вся связная цепочка бомб взрывалась в один момент времени, а не по очереди. Поочередный врыв потребовал бы слишком большого FPS, что я не мог себе позволить. А так взрыв получался эффектным и затухал единовременно. На скриншоте правда видны небольшие разногласия в затухании, но это, видимо, вызвано тормозами на стороне клиента.

b526271b1cba4a13ad40386db33b9f30.jpg

На Ваш суд получилось своего рода краткое теоретическое описание принципов работы сетевого Бомбермена на VBA.

P.S. Что бы не говорили, а год это очень мало… Сколько еще хотелось успеть сделать, но не хватило времени.

© Habrahabr.ru