В течение почти года я работал (с любезной помощью друзей!) На веб -реализации настольной игры, Имперский Анкет Из многих моих попыток боковых проектов это тот, который добился наибольшего прогресса. Поэтому я хотел воспользоваться возможностью, чтобы подумать о том, что прошло хорошо, что не так хорошо, и что я продолжаю двойным.
В качестве введения проект представляет собой веб-приложение с открытым исходным кодом с игровым двигателем JavaScript на переднем конце, который работает в журнале игры. Журнал игры представляет собой серию действий, и весь журнал потребляется фронт -концом Vuejs, который затем делает хорошую карту и цифры, среди прочего, в игровом интерфейсе. До недавнего времени не было никакой базы данных или системы аутентификации, но с тех пор я добавил очень тонкое приложение для выполнения этих обязанностей. Проект также прошел период, когда был сервер веб -окетов GO (теперь полностью заменен Rails и ActionCable).
Что прошло хорошо
Оно работает! (в основном)
Моя имперская реализация более или менее добросовестно воспроизводит правила игры и играется. В каком-то смысле это конец части «изобретения из-за эфира» процесса разработки программного обеспечения, и теперь я вступил в ту часть, где я на самом деле проверяю ее на реальных людях. Конечно, игра с реальными играми с реальными людьми показала еще гораздо больше краев и правил игры, которые я не ожидал и правильно закодировал с самого начала. Но в целом это работает.
Один урок из этого опыта, который я взял, заключается в том, что правила настольных игр гораздо более сложны, логически, чем логика, которая поддерживает ваше среднее веб -приложение. Тестирование становится гораздо более сложным, потому что некоторые ситуации, в которых вы окажетесь, очень конкретны. Но я доберусь до тестирования, а позже.
Я узнал тонну
Я никогда не использовал, прежде чем работать над этим проектом. Я никогда не сталкивался с «архитектурой на основе событий». Я никогда не работал с веб -питаниями серьезным образом. Я никогда не использовал Vuejs. Действительно, единственная знакомая вещь для меня была компонент Rails, и это было в самом конце.
Правда о том, как мне удалось сделать любой Прогресс вообще заключается в том, что у меня были руководство и помощь от друзей. Я не думаю, что курсы или сообщения в блоге могли бы передать мне некоторые из нюансов, которые мне удалось учиться у друзей, которые были более опытными, чем я, и которые были готовы дать мне свое время. Большая часть самых сложных частей этого кода была написана во время программирования пар.
Некоторые люди играют в это
Долгое время этот проект был только для обучения, и я никогда не думал, что другие люди могут играть в него. Как только он начал обретать форму и кажусь правдоподобным, что я мог бы на самом деле поместить его в производство и позволить другим играть тоже, мой аппетит рос с моими амбициями.
Я был очень воодушевлен энтузиазмом, как в играх, так и в сообществах по программированию. Некоторые люди очень Заинтересован в том, чтобы увидеть эту игру в Интернете, в то время как другие заинтригованы некоторыми техническими решениями, которые я принял на этом пути. Я бы хотел охватить более повседневных геймеров, и я думаю, что мне понадобится еще несколько раундов тщательного тестирования, прежде чем игра станет железом, достаточно для более широкой привлекательности.
Что не так хорошо:
Я стал навязчивым об этом
Боковые проекты опасны для личной жизни, и они становятся еще более опасными, если они каким-либо образом успешны. Я обнаружил, что мое настроение колеблется с состоянием программы. Если мне удалось получить определенное действие правильно, я был в восторге, но если бы я застрял на какой -то чепухе для веб -пакетов , Я впал в депрессию.
У меня было тяжелое время несколько месяцев назад, но все вышло и стало лучше. Честно говоря, у меня нет отличного ученых из этого, потому что я думаю, что мне было бы оправдано отказаться от этого раньше, когда дела идут не очень хорошо. Это становится очень личным решением, и я думаю, что моя терпимость к эмоциональному хнупшн, возможно, была слишком высокой.
Тестирование и TDD
Я всегда был сильным защитником TDD с нюансом, что это имеет смысл, только если я вроде знает, что я делаю Анкет Если я не знаю, что я делаю, то я эффективно пишу код Spike, и он должен быть одноразовым. Это прекрасно работает в обычной рабочей обстановке, где мне более комфортно с языками и парадигмами в игре, но это должно быть иммобилизацией на Империале.
Результат? Некоторые из кода хорошо проверены и разумны. Другие части-это код спагетти, который я не знаю, как распутать (и это неудивительно, что он не проверяется). Существует настоящее искусство для работы над проектом и только концептуально (или лингвистически) новые идеи в измеренных дозах. Слишком мало, и ты ничего не учишь. Слишком много, и вы пишете разочаровывающий код, который, вероятно, не потерпит слишком много изменений. Больше имперского кода является последним видом, чем я хотел бы признать.
Еще один компромисс, который я сделал с точки зрения тестирования, но я думаю, что это хорошо,-это то, чтобы технически оставить игровой логику не все протестированные, но некоторые сквозные тесты охватывают пробелы между логикой и пользовательским интерфейсом. Я недавно представил Cypress в проект, и настройка была, к счастью, проста. Тесты занимают некоторое время, чтобы бежать, но они дают мне больше уверенности в том, что все работает.
В чем я амбивалентно:
Архитектура
С самого начала я играл с идеей сделать это какой-то одноранговой игрой без централизующего сервера. После начала кодирования игры (включая идею о том, что игровая логика будет жить в JavaScript с браузером, но не будет «кодом фронта смысл иметь централизованный сервер для тех веб -приложений, которые мы все полюбили (база данных, аутентификация и т. Д.). Это означает, что у меня теперь есть игровая логика, необъяснимо, живущая в браузере, которая, вероятно, сбивает с толку других разработчиков, которые могут захотеть принять участие. Но, по правде говоря, это нормально И я не верю, что для этого решения что -то хуже.
Куда пойти отсюда?
Я хочу помочь в этом проекте. Я хочу, чтобы другие разработчики, которые заинтересованы, связались со мной. Я рад помочь им внести свой вклад в кодовую базу. Я также хочу, чтобы больше людей играли в игру!
Github Repo Здесь И это можно сыграть в производстве в https://www.playimperial.club Анкет
Оригинал: “https://dev.to/thrillberg/porting-a-board-game-to-the-web-51d6”