Чем заняться айтишнику в армии — руководство к действию
Первая статья вызвала большой резонанс по всему рунету. Сейчас же я хочу немного рассказать про техническую сторону вопроса, а именно как начать разработку BomberMan в Excel. Исходного кода игры не будет в силу его отсутствия, а будут лишь отдельные пояснения принципов работы.Методы, описанные в статье, не претендуют на истину в последней инстанции. Я описываю то, как это было сделано мной ТАМ, в местах отсутствия интернета и сильнейшего воздействия на психику.Часть первая — создание формы клиента.В 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. Что бы не говорили, а год это очень мало… Сколько еще хотелось успеть сделать, но не хватило времени.