Dreamer Unlimited — казуальная веб-игра — моё творение

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

Изначальная идея была посмеяться, в первую очередь, со встречающихся на нашем пути сомнительных индивидуумов. Основной персонаж игры должен был быть один — Penetrator — на который они и должны были падать. В другую очередь — с кого-либо другого, например, камрадов, чтобы разбавить рабочие будни.

Стиль исполнения — OOP. Мейнстримовые фреймворки не использовал — написал свой.

Ссылка игры: dreamunlim.github.io
Исходный код: github.com/...​nlim/dreamunlim.github.io

Персонаж Penetrator в игре изначально скрыт. Чтоб его открыть, поделите экран меню на четыре квадрата. Их нумерация слева направо, сверху вниз: 1, 2, 3, 4. Тапайте по квадратам в порядке: 1, 2, 3, 4, 1, 4. Если не открывается, дайте 3 секунды на сброс паттерна, и пробуйте по новой. Альтернативно, через дев-консоль браузера:

gameStateMachine.stack[0].characterSelector.hiddenChars = 0;
и выбирайте Пенетратора из списка персонажей. Далее открывайте Скайп и загружайте понравившиеся фотки в игру.

Спасибо за внимание 🙇‍♂️!

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Решил взгялнуть на код... Станислав, вы не думали о релокации в Индию? Просто в здешних диких краях за такое дают премию Дарвина, ежели это где в коммерческом коде попадётся.

Переменные должны либо объявляться, там где ты их пользуешь, либо передаваться в явном виде. Никаких глобальных зон видимости! И тем более никаких предположений в методах о наличии где-то таких переменных, если они не относятся к твоему объекту.

Нет ничего криминального если весь код будет в одном файле, если он между собой связан какими-то общими переменными. Как только ты выносишь часть кода в отдельный файл, ты должен явно указывать, что откуда берётся. Если это совсем уж не поддаётся понятному кодированию, пишешь коммент: когда, как и что должно пройти инициализацию.

Даже если зона видимости глобальная, ты не пишешь xez=1, ты пишешь document.xez=1. Иначе рано или поздно найдётся другой Вася, который создаст переменную xez в более близкой зоне видимости. Дальше больше, в момент оптимизации кода не факт, что такая переменная в глобальной зоне окажется, и движок честно создаст локальную переменную.

Если тебе нужно связываться через глобальную зону, не плоди сотен переменных, плоди один объект, с длинным именем, и уже через него работай. Но вообще это крайне редко нужно, как правило, всё что нужно в методах — есть в самом объекте, а для этого методы должны объявляться внутри него.

Алексей, спасибо за ревью и дельные советы 👍! В целом понял сильно не ругаете.

Что смущает меня в JS, так что переменные находятся в public доступе, даже если объявлены в классе — подставляй значения как кому вздумается. Хотя по draft синтаксису JS можно объявлять переменные как private — не экспериментировал. Насколько понял, к private переменным все равно возможно получить доступ через setter-ы или вызовы методов класса со своими значениями.

По поводу Индии, так они со своим качеством кода вполне конкурируют в мире с нами. Я бы сказал, настолько удачно, что они к нам уже давно сами приехали, вытеснив количеством проектов над которыми работают, что и ехать к ним не нужно 🙂.

Доступы — это защита «от дурака». То есть грубо говоря, против хакера это всё бесполезно, все данные лежат на виду. И если ты допустил к себе сторонний скрипт, то этот скрипт будет делать всё что захочет, и даже eval ему толком не запретишь.

Проблема же твоего кода — в том, что он не читаемый. И компилятор его понимает не факт что правильно. Чем ближе к месту использования ты объявляешь переменную, тем понятнее твой код. Даже если значение надо взять откуда-то издалека, лучше объявить свою переменную в начале и провести взятие значений. Замедлит код это не сильно, зато сильно улучшит читаемость (и потому снизит количество ошибок).

Лично я вообще к геттерам и сеттерам отношусь с нескрываемым презрением. Если переменная не защищена, то что мешает ТУПО присвоить ей значение, ВМЕСТО того чтобы засирать весь код мусором? Если в каком-то редком случае требуется особый способ присвоения, тогда и делать сеттер. В остальном же... просто тонны мусора, усложняющие понимание кода.

Присвоение значения при чтении кода понятно моментально. А вот вызов сеттера.... а хер знает, что в том сеттере на самом деле происходит. Не говоря уж о том, что если действительно что-то делается существенное, нужно называть метод соответственно этому действию, а не просто делать апдейт.

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

Проблема же твоего кода — в том, что он не читаемый. И компилятор его понимает не факт что правильно.

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

Особенно весело, когда часы этот цирк возвращают. Ну вот undefined сейчас время суток, 31-е мать его июня. Притом июнь — это пейсатель кода.

Серый экран с квадратиком Ad посредине. Чтобы увидеть остальное, нужны грибы?

Нет. Нужен хотя бы Chrome на Android/Windows — на чем сам тестировал. На других связках платформа+браузер поведение не могу предсказать. По идее, во всех браузерах, основанных на Chromium, должно запускаться.

Слова истинного фронтендщика

Chrome на маке тоже самое, только кружочек и сверху. Отключил adblock, заработало

С включенным adblock, какие ошибки в дев-консоли Chrome показывает? Можно скрин?

Какая-то мутная шняга...так и не загрузилась. С включеным блокировщиком рекламы показывала только серый экран. С выключенным блокировщиком вечный «Loding assets».
MacOS, браузер chrome.

Реклама не привязана к успешности загрузки. Что включённый блокировщик, что выключенный — разницы не должно быть. Игра весит 3.5МБ. Если вечный Loading — пробуйте обновить страницу пару раз. На MacOS не было возможности проверить. Спасибо за тест 👍!

Да как бы пробовал. В Safari рекламу показывает и серый экран. Как-то так.

та же проблема в Android Opera. В Android Chrome всё норм.

Теперь должно грузится норм, спасибо 👍!

Да кстати, на телефоне норм открылось

Онлайн симулятор iPhone показал где была ошибка. Похоже фикс сработал. Но взамен появился новый баг, который нагружает процессор на 100% и фризит браузер ПК/телефона при двух открытых вкладках с игрой.

проблема в том что в имени файла есть ads...js

Насколько я понял, одна проблема была в том, что некоторые браузеры в анонимных вкладках блокируют доступ к localStorage, как Sаfari и Edge, из-за чего выкидывало DOMException, и исполнение кода прекращалось.
Если переименовать ads...js, это будет достаточным решением проблемы загрузки?

да, если переименовать то это решит проблему с адблокерами

Подписаться на комментарии