habrahabr

Чем заняться айтишнику в армии или как я на VBA игры писал

  • вторник, 23 сентября 2014 г. в 03:10:38
http://habrahabr.ru/post/237641/

Прошло уже больше двух месяцев с момента моей демобилизации. Я уже освоился на свободе, пришло время рассказать правду. Служил я в разведке!.. «Секретная» в/ч ОсНаз ГРУ. По распределению попал в отдел ЦРП (Центр радиоперехвата). Работенка не пыльная, сидишь ночами в наушниках и слушаешь врага. Но речь пойдет не об этом.

У каждого оператора поста радиоперехвата (таковыми мы числились) был в распоряжении компьютер с подключенными к нему РПУ (радио-приемными устройствами). На компьютере стоял спецсофт + Excel. Все остальное было заблочено. После N-ного дежурства я стал скучать… Зачесались руки.

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



После змейки было еще парочка небольших игрушек, но все это мелочи…



Сослуживцы ходили и клянчили, чтобы я им все это скинул, всем надоело играть в косынку. Способов сделать это я не знал. Порты USB отключены аппаратно. Но, как выяснилось, все компьютеры были объединены в локальную сеть. Запустив через Excel командную строку, я смог зайти на соседний компьютер и скинуть туда необходимые файлы. И тут меня осенило… Excel, VBA, чтение/запись файлов, локальная сеть… Смекаете?

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



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



Респект этим ребятам. До сего момента я не видел возможность использования форм на VBA. Не заметил сразу, да и не задумался над этим. Этой же ночью было решено переписать морской бой на формах. Код получился компактней, интерфейс дружелюбней, работоспособность выше.



Работа в отделе встала! Морской бой любят все… кроме меня. Ну не нравится мне эти глупые перестрелки. В общем, на нем я не остановился. Но, забегая вперед, скажу, что морской бой был самым популярным.

Bomber Man
Кто-то в шутку сказал «а слабо написать Bomber Man?».
Вызов принят! Месяц неторопливых мучений и в свет вышел ОН.



Миниатюрки отрисованы в Paint. Игра рассчитана на одновременное подключение 4-х человек с разных компьютеров. Приложение клиент-серверное. Сервер был запущен в отдельном приложении. Количество жизней не ограничено (я думаю, по количеству надгробий это понятно).
Но все не так гладко, как кажется. При записи/чтении файлов возникали ошибки из-за одновременного обращения и добиться более 10 кадров в секунду мне не удалось. Если игра шла на двух человек, то все укладывалось в 25-30 кадров, но на четырех добиться хороших скоростей мне не удалось. Отсутствие интернета не дало возможности найти решение.

Далее меня просили сделать танчики, но от разработки экшн игр, ввиду описанных выше проблем, я решил отказаться.

Texas Holdem Poker
Я очень люблю покер. В армии мне его сильно не хватало. Реализацию покера на 9 человек я видел не такой уж и сложной. Разве что над алгоритмами поиска собранной комбинации пришлось поломать голову, но это было интересно. Отсутствие интернета заставило поднапрячься. Одну ночь я потратил на отрисовку колоды карт. Другую на стол и фишки. А дальше начался процесс написания. Покер у меня получился быстрее Bomber Man. В одну из ночей мы оттестировали его на максимальное количество игроков, тесты прошли вполне успешно.



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

Вообще говоря, это было очень опасное и кропотливое дело, не дай бог кто-то спалит за таким занятием, да еще на боевом дежурстве. Кто служил, тот поймет. За обычную косынку снимали с дежурств и ставили в наряды, а тут такое… Спасибо одному хорошему человеку за то, что скинул себе на флешку все эти скриншоты и переслал мне на почту. Оставлю себе на память.