Запилил неделю назад и довёл до ума по фидбеку из b игру гибрид pxls.space и "Game Of Life". Вместо пикселей и клеток - эмоджи.
Игроки ставят эмоджи на онлайн доске, а игра каждую секунду проводит симуляцию. Если у эмоджи меньше 2 соседей он умирает от одиночества, если больше 3 - от перенаселения. Если вокруг пустой клетки ровно 3 змоджи, то в ней тоже спаунится эмоджи (определяется по большинству соседей).
Для защиты от вайпов у каждого игрока есть баланс эмоджи, которые он может поставить и который постепенно растёт пока вкладка с игрой открыта и активна.
Центр поля защищён от изменений игроками - проникнуть туда можно лишь строя всякие глайдеры и прочие паравозы (см. материалы по классической игре "Жизнь").
Есть статистика по количеству живых эмодзи на всей доске и отдельно в центре - открывается по кликам по соответствующим верхним углам страницы.
Есть возможность создавать свои шаблоны размещения змоджи и потом быстро их расставлять в один клик.
Поддерживаются и десктопы, и мобилки (только сегодня окончательно допилил зум на тачскрине, раньше работал совсем через жопу).
Бек написан на Rust и хостится на домашнем сервере (за CloudFlare), фронт написан на TypeScript, а обмениваются они данными по вебсокетам и протобафу. Спрашивайте свои ответы :-)
Хочу протестировать под реальной нагрузкой, а также открыт к любой критике и фидбеку.
Для защиты от вайпов используется механизм Proof Of Work. Скрипт пытается найти SHA-512 с N нулевых бит и от заданного сервером префиксом хешируемого значения. Сложность подобрана таким образом, чтобы на стандартном ноутбуке решение находилось быстрее, чем за 0.5-1 секунды.
Результат отправляется на сервер, он валидирует и при успехе выдаёт JWT токен. Клиент сохраняет полученные токены в список, пока не достигает максимума в 128 токенов.
Worker убивается, если теряется подключение с сервером или вкладка уходит в фон, чтобы не тормозить и не жрать зря батарейку.
При установке эмодзи клиент должен отправить столько токенов, сколько хочет поставить змодзи (использованные токены забываются клиентом). Сервер валидирует токены и добавляет их в список поюзанных (второй раз уже не примет) в Postgres. А затем ставит столько эмодзи из списка, сколько валидных токенов было приложено.
Таким образом нельзя написать бота, который будет ставить 100500 эмодзи в секунду и завайпает доску, ведь даже если открыть 1000 соединений с сервером всё равно нужно откуда-то брать токены, а скорость их производства упирается в количество CPU в распоряжении пользователя.
>>1046639 Но клетки то с трудом умирают, так что получается 26 это максимум, а судя по тому что можно ставить любые эмодзи, то юзеров меньше 26. ну итого где то 15 наверное уникальных
идея: СПАМ РЕЖИМ где мало того что шаблоны не сбрасываются после клика, так еще и майнинг облегченный т.е эмодзи копятся быстрее намного. чисто динамичный режим забрасывать шаблонами мид ибо заебешься каждый раз его в обычном нажимать но зато антиспам да
>>1046537 Так от чего зависит скорость восстановления то? Ну для глупеньких. Типа с момента захода на страницу начинается счетчик сколько эмодзи я ставлю и чем больше тем сложнее восстанавливатся будет? Тогда я перезапущу страницу не? не понял короче
>>1047098 Если что, браузер почти 2 года не обновлял. Но 99.99% сайтов работают без проблем пока что, поэтому обновляться не буду. Не верю, что для какой-то квадратно-гнездовой JS игрушки нужны самые последние обновления...
GUI работает - по крайней мере, частично. Окна справки, выбора эмодзи и пустые списки лидеров открываются. Ошибка возникает где-то в коде подключения к серверу, из-за чего веб-морда считает, что она оффлайн.
>>1047102 Я указывал адрес подключения веб-сокета относительно корня сайта. Заменил на полный адрес (с доменом, протоколом и т. п.). Может быть поможет. Попробуй обновить страницу.
>>1047108 Потому что поддержка относительных url подключений веб-сокетов появилась позже, чем сами веб-сокеты. Смотри вторую строчку в таблице. Если твой браузер старее, то там не работают относительные url для веб-сокетов, надо всегда указывать абсолютные.
>>1046537 >чтобы на стандартном ноутбуке решение находилось быстрее, чем за 0.5-1 секунды. >скорость их производства упирается в количество CPU в распоряжении пользователя. Несправедливая система... У меня один токен порой несколько секунд никак не сгенерируется, а тут кто-то спамит сотнями эмодзи в одну линию каждые несколько секунд. Какой смысл в такой защите, если она дискриминирует игроков по железу?
>>1047201 кто спамит сотнями в неск секунд? ни разу не видел. до обновления рисования точек и шаблонов даблкликером разве что рисовал линии, но это занимает тоже много время не пара сек
>>1047416 >раз кому-то даже 128 мало Ээээ?????? WTF?????
Я думал, этот лимит нужен для баланса сил игроков. Установка большого числа точек одновременно - это серьёзное преимущество перед установкой малого количества много раз. Зачем кто-то будет сам себя ограничивать, ставя лимит меньше максимального?
Алсо, ты используешь системный шрифт? Не лучше отдавать кастомный шрифт со своего сайта? На ПК множество эмодзи у меня неправильно выглядят. И разница во внешнем виде эмодзи может давать преимущество на отдельных платформах.
>>1047450 Баланс в том, что добыча эмодзи токенов занимает время. Ну поставишь ты даже 1024 точки за раз, но потом тебе придётся долго ждать, пока восстановится 1024 токена. Если на твоей системе 128 токенов добываются за 2 минуты, то 1024 токена будут добываться за 10 минут. С другой стороны, я заинтересован в том, чтобы игроки строили всякие сложные механизмы.
Ограничение количества эмодзи же нужно для экономии энергии, например, чтобы мобилка или ноут не высаживали зря батарейку майня бесконечно токены, когда ты просто посмотреть зашёл или не ставишь больше пары десятков эмодзи за раз.
Насчёт эмодзи, я использую шрифт Noto Color Emoji, который лежит рядом с HTML и прочими файлами сайта. Но некоторые браузеры позволяют отключать возможность переопределения шрифта сайтом и иногда проскакивают скрины с другими эмодзи. Но я не думаю, что это даёт преимущество. Noto Color Emoji достаточно контрастный. Если в системном шрифте однотипные эмодзи, это может сделать игру сложнее, но не проще. Но тот кто запретил кастомные шрифты сайтам, вероятно, готов к последствиям, либо добавит игру в исключения, если ему не понравится.
>>1047462 >потом тебе придётся долго ждать Тебе в любом случае ждать нужно, игра-то в реальном времени происходит. Поставить 1000 раз в 10 минут выгоднее в том плане, что можно сделать сложный механизм или разрушить сразу несколько чужих.
Ну и вообще. Какой практический максимум одной разновидности эмодзи на доске? Я видел около 5к максимум. С лимитом в 128 за раз добраться до 1к достаточно сложно. С лимитом 1к добраться до 1к возможно за один ход, а дальше будет ещё больше.
>>1047468 > Какой практический максимум одной разновидности эмодзи на доске чуть чуть до 10к не хватило ещё до последних обновлений. стояла цель наспамить их. а так 5к легко держится, если играешь само по себе