Вотъ и закончился очередной годъ, который вопреки всѣмъ надеждамъ выдался не столь хорошимъ. И теперь хотѣлось бы вспомнить о компьютерныхъ реализаціяхъ настольныхъ игръ, которыми занимались мы сами. Исключительно въ свободное отъ работы время, конечно же!
Игра | Разработчикъ | Языкъ программированія | Періодъ разработки |
---|---|---|---|
Cluedo | Alexander | Power Builder+PHP | августъ 2015 — декабрь 2015 |
Ограбленіе музея | Sander | Delphi | сентябрь 2015 — августъ 2016 |
Черная Вена | Tim | Java | ноябрь 2016 — январь 2017 |
Слава Риму | Alexander | JavaScript+Node.js+PHP | іюль 2021 — декабрь 2021 |
Страшныя сказки | Alexander | JavaScript+Node.js | августъ 2022 — ноябрь 2022 |
Санъ Хуанъ | Alexander | JavaScript+Node.js | августъ 2023 — декабрь 2023 |
Воспоминанія о играхъ «Слава Риму», «Страшныя сказки» и «Санъ Хуанъ», какъ наиболѣе новыхъ проектахъ, мы отложимъ на нѣкоторое время, а теперь дадимъ слово авторамъ программъ!
Начало было положено въ августѣ 2015-го года.
Къ созданію моей первой игры меня подталкивало сразу нѣсколько факторовъ. Во-первыхъ, мнѣ не хватало нашихъ перерывовъ для того, чтобы въ полной мѣрѣ распробовать удовольствіе отъ игрового процесса. Во-вторыхъ, это былъ интересный вызовъ самому себѣ, цѣль, которую я еще передъ собой не ставилъ. Въ-третьихъ, у меня было желаніе сдѣлать это, используя въ качествѣ основнаго инструмента именно наше рабочее средство, такимъ образомъ раскрывъ его потенціалъ съ необычной стороны, да и необходимыя въ профессіональной дѣятельности практики это былъ неплохой поводъ закрѣпить.
Мой выборъ игры былъ обусловленъ тѣмъ, что въ то время наша игротека еще не могла похвастаться большимъ разнообразіемъ, да и на тотъ моментъ именно Cluedo была одной изъ самыхъ популярныхъ. Къ тому же, я уже въ достаточно полной мѣрѣ представлялъ, какъ будетъ организованъ игровой процессъ, какіе компоненты будутъ использованы, каковымъ будетъ взаимодѣйствіе.
SWCluedo была также моимъ первымъ опытомъ созданія приложенія, экземпляры котораго способны общаться по сѣти. Для этой цѣли мною былъ избранъ весьма нестандартный, можно сказать, экзотическій способъ соединенія безъ, собственно, постояннаго соединенія — т. н. mailslot. Тѣмъ не менѣе, именно благодаря этому механизму мы могли безпрепятственно создавать и присоединяться къ игрѣ на любой машинѣ предпріятія безъ необходимости указывать номеръ порта, который еще передъ этимъ нужно было открыть.
Во время разработки многія игровыя вычисленія были возложены на использованіе объектовъ типа DataWindow, что, разумѣется, подчеркиваетъ уникальность даннаго проекта, но также ограничиваетъ переносъ его на другіе платформы.
Я довольно долго искалъ рѣшенія по визуальному оформленію используемыхъ въ игрѣ картъ, но среди огромнаго разнообразія, представленнаго въ глобальной сѣти, не нашелъ ничего удовлетворяющаго мои требованія по стилю оформленія, его однородности и такъ далѣе. Внезапно мнѣ попался сайтъ-конструкторъ чибиковъ1. Вѣрнѣе, я сталкивался съ нимъ и раньше, но мнѣ вовремя о нёмъ напомнила одна изъ аватарокъ Тимоѳея во «ВКОНТАКТЕ», гдѣ я обращался къ нему по поводу правилъ и прочихъ матеріаловъ по игрѣ. Требованія къ изображеніямъ другихъ картъ были не такими строгими и ихъ поискъ ограничился наиболѣе оптимальными результатами изъ выборки гугла. Я ихъ развѣ что потомъ редактировалъ въ фотошопе.
Къ тому моменту уже была готова первая тестовая версія программы и разыграна первая партія на двоихъ безъ картинокъ, но съ подписями на картахъ.
Когда же вышелъ полноцѣнный экземпляръ приложенія, онъ былъ незамедлительно пущенъ въ ходъ и добился всеобщаго одобренія и признанія, несмотря на случаи перебоевъ въ работѣ сѣти и обнаруженныя въ связи съ этимъ уязвимости въ программѣ. Какъ бы то ни было, къ концу года многія ошибки и недочеты были рѣшены. Версія была уже стабильной, но небольшія правки проводились и въ слѣдующемъ году, и даже въ слѣдующемъ за слѣдующимъ годомъ. За это время среда разработки смѣнилась болѣе новой версіей, которая позволяла, напримѣръ, использовать файлы PNG и вообще поддерживала регулировку прозрачности используемыхъ объектовъ и прочую незначительную, но пріятную косметику.
Объ игрѣ Cluedo къ тому моменту уже позабыли, игротека наша разрослась до циклопическихъ размѣровъ и внушала неподготовленнымъ адептамъ неописуемый ужасъ.
Поводомъ вспомнить о моей разработкѣ послужила трагедія. У меня сгорѣлъ жесткій дискъ съ исходниками актуальной версіи программы. Кое-какъ, при помощи стороннихъ инструментовъ, а также опираясь на болѣе ранніе экземпляры, сохранившіеся на рабочемъ компьютерѣ, мнѣ всё же удалось возстановить игру.
Сообщивъ объ этой радостной новости своимъ товарищамъ во время партіи уже не помню, въ какую игру, на сайтѣ BGA (навѣрное, играли въ «Борьбу за галактику»), я полушутя подѣлился мыслями о томъ, что собираюсь сдѣлать ботовъ для своей Cluedo. Ну, или мнѣ объ этомъ кто-то намекнулъ, а я уже подхватилъ. Въ общемъ, я взялся за данную авантюру съ особымъ азартомъ, способствовало мнѣ въ семъ предпріятіи то, что мы находились на карантинѣ по случаю COVID-19. Въ достаточно короткіе сроки ботъ подъ кодовымъ названіемъ Boris былъ готовъ, въ тестовыхъ и послѣдующихъ партіяхъ онъ показалъ себя весьма неплохо, я горжусь имъ.
Финальнымъ нововведеніемъ стала возможность совмѣстной игры черезъ сѣть Интернетъ. Данная технологія была опробована въ болѣе позднемъ проектѣ. Случилось сіе уже въ не столь далекомъ 2022-м году. Но это уже совсѣмъ другая исторія.
Идея создать электронную версію игры «Clue — The Great Museum Caper» родилась послѣ того, какъ мы съ ребятами сыграли нѣсколько партій въ настольную версію этой игры, сдѣланную Тимоѳеемъ. Играя охранниками, мнѣ была всегда интересна исторія хожденія вора2 и дѣйствія охранниковъ въ тотъ или иной моментъ времени. Поэтому всегда хотѣлось сохранить исторію дѣйствій въ игрѣ, чтобы можно было позже пересмотрѣть её какъ мультфильмъ. Основной причиной и условіемъ созданія игры было сохраненіе всѣхъ дѣйствій въ ОЗУ и послѣдующее сохраненіе дѣйствія въ файлъ послѣ окончанія игры. Работа была начала съ изученія протоколовъ обмѣна данными между компами по сѣти, а также съ придумыванія какимъ образомъ шифровать трафикъ между серверомъ и кліентами. Для разнаго трафика, а также для разныхъ состояній игры были придуманы разные алгориѳмы шифрованія какъ синхронные, такъ и асинхронные съ передачей публичныхъ и храненіемъ секретныхъ ключей. Также была реализована защита исполняемаго файла приложенія отъ измѣненій и запретъ одновременнаго запуска нѣсколькихъ копій программы. Послѣ чего началась реализація базовой механики игры. Это былъ также достаточно интересный этапъ въ разработкѣ игры. Послѣ реализаціи базовой механики, была реализована детальная механика согласно правиламъ игры, и почему-то послѣдній этапъ оказался самымъ скучнымъ.
Первая версія игры была 0.0.1 beta. Послѣ чего игра подвергалась нѣсколькимъ модификаціямъ, въ которыя входили какъ исправленіе ошибокъ, оптимизація, такъ и добавленіе различныхъ настроекъ, а также добавленіе графики, взятой съ просторовъ сѣти Интернетъ и съ игры Disciples II. Послѣдняя версія игры 0.1.2 alpha была создана спеціально для Александра, который попросилъ версію игры для тестированія, съ возможностью запуска нѣсколько копій игры на одномъ компе.
Огромнымъ недостаткомъ данной игры является то, что въ ней очень важна коммуникація между игроками охранниками. И хоть и былъ реализованъ механизмъ для указанія въ чате ссылокъ на ячейки игры, этого было катастрофически недостаточно для полноцѣнной игры. Въ этой игрѣ важно реальное общеніе и обсужденіе о возможныхъ дѣйствіяхъ вора.
Къ моему стыду, въ данной игрѣ не былъ реализованъ базовый механизмъ «рукопожатія» между кліентомъ и серверомъ 1.
Но въ цѣломъ процессъ разработки игры былъ очень интересенъ. Послѣ этой игры была начата разработка шаблона сѣтевой игры, которая включала въ себя механизмъ идентификаціи игры, а также элементарное «рукопожатіе», созданіе сервера, поискъ и подключеніе игроковъ. Но на какомъ-то этапѣ разработка этого шаблона была заброшена (въ основномъ изъ-за неудобства работы по сѣти въ Delphi7, а именно въ механизмахъ блокировки рессурсовъ игры разными потоками).
Когда Александръ показалъ намъ свою версію Cluedo, да еще написанную, какъ намъ казалось, на совсѣмъ не подходящемъ для этого языкѣ, а послѣ этого Саня сталъ программировать игру про ограбленіе музея, я почувствовалъ, что остался за бортомъ корабля, на борту котораго происходитъ много чего интереснаго. Досель настольныя игры я никогда не программировалъ, поэтому для собственнаго проекта рѣшилъ выбрать что-нибудь попроще. И выборъ палъ на игру «Черная Вена»3, которая одно время была у насъ весьма популярна.
Для начала немного исторіи. Игра была придумана въ далекомъ 1987 году австрійскимъ дизайнеромъ по имени Гилбертъ Обермайръ. Всего 63 карты въ довольно простомъ дизайнѣ. Какой-то любитель игры сдѣлалъ редизайнъ съ фотографіями въ стилѣ нуаръ, который я и напечаталъ, а первую партію мы сыграли въ августѣ 2015 года. По сюжету игры, въ городѣ Вена орудуетъ банда, трехъ членовъ которой надо разоблачить, используя имѣющуюся на рукахъ каждаго игрока информацію, кто не является членомъ банды. Очень похоже на Cluedo, въ самомъ дѣлѣ, только нѣтъ игрового поля, фишекъ и кубиковъ. Нѣсколько мѣсяцевъ игра была у насъ очень популярна (27 партій!), потомъ мы её на полгода отложили, чтобы сыграть еще десятокъ.
А потомъ пришла очередь компьютерной реализаціи. Языкъ программированія — Java, обмѣнъ данными между серверомъ и кліентами черезъ сокеты. Графическій интерфейсъ (строгъ и минималенъ, ничего лишняго), управленіе «мышью» — всё, какъ полагается. Бланкъ разслѣдованія, который я постарался сдѣлать максимально удобнымъ, кое-кому не понравился, и этотъ кое-кто продолжалъ использовать бумажный бланкъ собственнаго изготовленія. Вдобавокъ поддерживалась локализація — и въ кліентѣ поддерживаетъ англійскій и русскій интерфейсъ, благо, текстовыхъ строкъ въ игрѣ не такъ много.
Черезъ какое-то время я добавилъ неоффиціальныя карты, чтобы можно было играть впятеромъ, а такъ какъ столько игроковъ у насъ въ разслѣдованіи никогда не участвовало, пришлось программировать и ботовъ. Это оказалось несложно, такъ какъ сама игра очень проста, вся сложность въ разработкѣ алгориѳма нахожденія оптимальнаго хода. Врядъ ли я придумалъ оптимальный алгориѳмъ, но, такъ или иначе, компьютерные игроки тоже ходятъ и иногда даже выигрываютъ. Также я прикрутилъ къ программѣ исторію игръ и расчетъ рейтинговъ, что у насъ мало кто любитъ.
(Забавно, но въ программѣ ботовъ используется алгориѳмъ генератора перестановокъ. Когда я проходилъ собесѣдованіе на новую работу, одной изъ задачъ было написать такой генераторъ, впрочемъ, для заданія я использовалъ другой методъ.)
Потомъ я еще нѣкоторое время потратилъ на то, чтобы вычислить, какіе карты нужно добавить, чтобы можно было играть всемеромъ, но это былъ уже чисто теоретическій экспериментъ, который я не довелъ до конца.
Ссылку на скачиваніе программы я выложилъ на сайтѣ BGG (ну не зря же тамъ есть и англійскій языкъ!), но, кажется, такъ никто и не воспользовался моимъ дѣтищемъ.
Вотъ, въ общемъ-то, и всё!
1 Понятія не имѣю, что значитъ сіе слово; по всей видимости, какіе-то китайскія картинки. (Прим. ред.)
2 Редакція газеты ни въ коемъ случаѣ не поддерживаетъ идею ограбленія художественныхъ музеевъ въ какихъ бы то ни было цѣляхъ.
3 Было бы величайшей ошибкой думать, что названіе этой карточной игры связано съ венами наркомановъ, какъ предположилъ одинъ нашъ читатель. (Прим. ред.)