Жиза, аж всплакнуть захотелось
Если вы помните, некоторое время я писал о том, что решил запилить свою веб-версию игры "Алиас" при помощи нейросетей. После предыдущего поста, я доработал игру: добавил функционал присоединения по ссылке, возможность изменять ник в игровой комнате и зрителей как тип участников, сделал возможность менять настройки игры, после окончания сессии её можно перезапустить, ну и, конечно же, пополнил словарь слов (сейчас в нём более 1000 слов). В настоящий момент я не добавил динамические команды (больше двух), так как для этого придётся серьёзно переписывать всю логику игры и не настроил правильную передачу лидерства внутри команды. Однако, эксперимент, могу точно сказать, удался: я успешно создал вполне работающую игру с расширенным функционалом практически полностью полагаясь на нейросети. Да, конечно же, я принимал решения по логике игры и её архитектуре, давал комментарии относительно принимаемых ИИ решений (если видел, что он делает не то, что мне надо) и где-то даже вручную подправлял небольшие детали кода, но в целом это "нейроигра" и "нейрокод".
Сегодня, помимо хвастовства, я бы хотел поделиться с вами своим небольшим опытом. Я считаю, что программирование с помощью ИИ - это уже вполне обыденная реальность. Он гораздо лучше разбирает код, чем человек (по крайней мере, человек с такими навыками, как у меня), знает множество методов решения проблемы от примитивного говнокода (если сам об этом попросишь) до довольно технологичных решений. Как я писал в прошлый раз, знание кода всё же сильно приветствуется - просто для того, чтобы понимать что тебе предлагает нейросеть, особенно если ты вносишь какие-то правки с её помощью, но виртуозно владеть кодингом уже не нужно.
Теперь относительно доступных решений. Я уже ссылался на такой инструмент, как openrouter.ai - интерфейс, позволяющий работать сразу с несколькими ИИ, однако в последнее время я не очень им доволен. Появились ошибки, связанные с историей общения (периодически ИИ перестаёт понимать ход действий и начинает как бы с нуля), некоторые нейросети оказываются недоступными, хотя работают в их родном интерфейсе и т.п. В общем, пришлось временно от него отказаться и перейти к Qwen. Он показался мне более надёжным, чем DeepSeek - меньше ошибается, стабильнее работает. В его интерфейсе есть один неприятный недостаток: для вопроса нельзя загружать файлы, отличные от txt. То есть, все файлы js, php, sql приходится предварительно переименовывать. Openrouter мне в своё время понравился ещё и тем, что в нём такой проблемы нет. Бесплатная версия Qwen обрабатывает довольно большой (для моих задач) объём информации, хотя и в рамках кодинга отвечает с ощутимой задержкой. Также мне нравится Grok, но он без VPN недоступен, а сам VPN я могу подключить далеко не всегда.
Как именно общаться с нейросетью? На самом деле, вопрос без точного ответа. ИИ хорошо понимает семантику запроса, умеет оперировать синонимами и образами. Например, у меня есть иконка короны для отображения статуса лидера - это текстовый символ, но если я называю его "короной", Qwen понимает о чём речь. Если вместо "лидер" (от leader в коде) я напишу "ведущий", она также распознает какую роль я имею в виду. В то же время, нужно очень аккуратно строить запрос: если пытаться разжёвывать сети задачу как человеку, ты скорее запутаешь её, но в то же время примеры логики могут оказаться полезными.
Важный момент: при появлении ошибок, ты можешь описать ему эти ошибки простым языком - что не так в твоём понимании. Да, это не отменяет необходимости скидывать логи, ошибки из консоли, иногда сильно помогает указание на статусы в базе данных - всё это нужно ИИ также, как и человеку-программисту для лучшего понимания ситуации. Также возможна ситуация, когда нейросеть заходит в тупик и не может решить задачу, гоняя один код по кругу - особенно этим раньше страдала DeepSeek. В таком случае приходится самому принимать решение: просить добавить дополнительную отладку, внимательно следить за исполнением логики кода и т.п. И ещё одно наблюдение: утром, часов до 12 по МСК нейросети загружены заметно меньше, потом, видимо, просыпаются китайцы и время ответа сильно увеличивается.
И тут вы, наверное, спросите: неужто всё так идеально? На самом деле, нет. Помните, я написал, что так и не победил проблему с передачей лидерства? Над ней мы с ИИ трудимся уже несколько дней и я так и не могу добиться получения корректного работающего кода. Отчасти это связано с особенностями архитектуры кода - как раз в силу того, что я хотел получить более-менее понятные самому себе скрипты. Отчасти с тем, что это решение требует достаточно комплексной правки, которую за раз нейросеть осилить не может, а при нескольких итерациях она начинает путаться и вся игра в итоге ломается.
Если бы я занимался таким своеобразным кодингом более плотно, то, конечно же, взял бы платную версию - для неё меньше время ожидания в очереди, больше объём запроса и ответа, в некоторых случаях более актуальные базы. Вероятно, и баг с лидерами я бы тогда уже решил. Однако простые задачи можно решать и так. Это довольно интересное занятие, к тому же какой-никакой опыт я всё же получаю даже при таком подходе, ведь у сети всегда можно попросить объяснить конкретное решение.
P.S. Кстати, смену лидеров починил в итоге, так что игра вполне рабочая на данный момент.
Всем здравия!
Был у меня раньше курс видео по этой теме. В целом оно всё ещё актуально, но я решил чуть обновить некоторые моменты и скомпоновать в виде текста, так как не у всех есть возможность смотреть видео.
План будет следующим:
Всё постараюсь сделать с актуальными на сегодняшних день скринами.
Если есть вопросы, предложения, пожелания, пишите. Если чувствуете, что в моём списке не хватает каких-то важных тем, тоже не забудьте мне об этом сказать.
Первый пост вывалю завтра.
Всем хороших игр!
В последнее время у нас стало слишком много нейросетей, однако причины понятны: их алгоритмы становятся всё более прогрессивными, а функционал доступным. Нет никакого смысла не пользоваться достижениями технологий, особенно если они так просты, да ещё и во многих случаях бесплатны. Помимо вездесущих картинок, большой интерес для меня представляют текстовые сети в части написания кода. Уже достаточно долгое время я скармливаю различные задачи по доработке своего сайта Дипсику и Квену (они оба имеют бесплатную версию и доступны без VPN), но в этот раз решил попробовать что-то большое.
Если вы помните, некоторое время назад я закидывал удочку насчёт совместных сессий в умные игры, в частности Алиас. В принципе, сайт с таким функционалом уже есть, но мне неудержимо захотелось получить собственную версию, не завязанную на чужой хостинг и с тем функционалом, какой хочу лично я. При этом, если PHP я хотя бы немного знаю, а в JS фрагментарно ориентируюсь, в остальных веб-языках вообще ноль. Поэтому задачей было сделать игру максимально простым способом: чтобы я мог хотя бы примерно понимать структуру проекта и в случае чего указывать нейросети где искать ошибки. В итоге, вооружившись openrouter (он позволяет через единый интерфейс давать задачи сразу разным сетям), я приступил к проектированию.
Для "Алиаса" по сути чего-то особо сложного и ненужно: игра просто должна выводить слова на экран для ведущего, а его команда угадывает их. Но команды меняются и ведущие в командах тоже меняются - это первое условие. Время на объяснение нужно ограничить - это вторая деталь. Угаданные слова нужно считать и суммировать очки за них - три. Наконец, 20 очков и более - это победа. Кажется, всё просто, однако далее начинаются хитрые детали.
В базе нас должна быть возможность пропустить слово и перейти к следующему - тут я решил извратиться и сделать две кнопки, чтобы ведущий мог сразу отмечать верно ли угадано слово или пропустить его. Кроме того, логично, что у других игроков должна быть возможность не просто видеть историю слов, но и отмечать их "угадывание" в обратное направление - на случай если ведущий ошибся кнопкой или нарушил правила. Система при этом должна работать параллельно, поэтому над структурой базы данных для хранения пришлось подумать самостоятельно. Я решил использовать две основные таблицы: комнаты и история слов. В таблице комнат содержится основная информация - список участников, количество очков, статус. В словах - собственно, все слова за игровую сессию. Хранить их все до окончания игры (а не только за отдельный раунд) нужно ещё и для того, чтобы контролировать неповторяемость слов.
В ряде моментов нейросеть, помимо обычных багов (вроде аварийной остановки при написании ответа), просто начинала тупить и раз за разом выдавала ошибочное решение. Приходилось самому пытаться понять, что может быть не так, допиливать структуру базы и прямо указывать на возможные пути решения. Благо, ИИ хорошо справляется, если скармливать ему логи ошибок - тогда он сопоставляет их с кодом и находит решение. Также очевидно, что моих навыков архитектора не хватает: определённые вещи нужно планировать сразу, чтобы потом не переписывать большие куски кода, как это, например, было с функцией выбора команды (изначально игра автоматически распределяла игроков). Долго пришлось посидеть над функцией выявления победителя, ведь важно не просто автоматически завершать игру как только одна команда достигнет 20 очков: нужно дать возможность завершить раунд обеим командам (в любом случае, если 20 и более набирает первая, у второй должен быть шанс отыграть свой). Сейчас игра определяет победителя после полного круга и даже умеет учитывать ничью.
Попутно была сделана система автоочистки базы данных при выходе из комнаты всех игроков, добавлена проверка готовности игроков перед началом игры, добавлена отметка с указанием кто в текущем раунде ведущий. С последней есть известный баг: отметка прыгает внутри команды - где-то дублируется функция, хотя сама смена игроков работает корректно. Ну и базу слов постарался наработать, хотя, думаю, она должна быть раза в два больше, чем сейчас, как минимум.
В итоге с перерывами на работу на создание работающего прототипа с большинством хотелок ушло около 3 дней. Результат вот он: https://alias.onlyfox.ru/alias.html
Есть в текущем "билде" места, которые нужно допилить. Пока что не реализована возможность подключаться к уже идущей игре, нужно предусмотреть создание больше трёх команд, дать возможность настраивать параметры комнаты (время на ответ, количество победных очков и т.п.). Но опыт в любом случае интересный: и в плане построения логики игры, и в плане работы с нейросетями. Я использовал их бесплатные версии с ограничением на длину ответа и количеством обрабатываемой информации, поэтому задания нужно выдавать кусками, а это в свою очередь означает, что сразу всё не напишешь, но думаю, в платной версии тоже всю игру за раз сеть не выдаст. В любом случае, результат есть и, что самое главное, на его примере понятно, что уже сейчас ИИ способна реализовывать хотелки даже таких профанов в коддинге, как я.
Раз уж я тут книжками занимаюсь, логично было, что мне надо как-то эти самые книжки верстать делать спуск полос.
Я знаю, что есть программы для этого, но ни одна из них мне не показалось достаточно простой и понятной. Не исключаю, что я криворучка и не разобрался, но я решил пойти по пути простоты: написать такую программу самому.
Второй причиной для такого решения было то, что я немного погуглил, нашёл несколько решений. Первые ссылки в гугле - платные приложения. Это мне не подходит.
Что ж, как и любой бесплатный аналог платного ПО, моя программа просто обязана была иметь убогий интерфейс. Я пошёл дальше, и решил, что не буду делать его вовсе. Это консольное приложение. Но мне искренне было впадлу рисовать кнопочки и поля, а потом писать под них обработчики, когда нам надо знать всего три параметра для работы.
1 параметр обязательный, второй и третий можно опустить, тогда начинать программа будет с первой страницы и верстать по 4 листа (16 страниц) в одной тетради.
А для первого параметра в винде есть "киллер фича": клацаем правой кнопкой мыши по файлу с зажатым при этом шифтом и там вот такая вот строчка будет
Пара скриншотов из цикла было-стало
С итоговым файлом нужно поступить следующим образом: просто отправить его на печать, поставив галочку двусторонней печати. Можно хоть на обычном принтере домашнем, хоть пойти в ближайшую типографию. Двусторонняя печать и вы получаете набор готовых к сшиванию тетрадей.
Сделал программку только для ПДФок, так как это универсальный формат для печати. В Ворде уже есть удобный встроенный инструмент брошюрования, а любой другой формат можно быстро перегнать в тот же ПДФ при желании.
Собстна, ссылка, кому вдруг надо https://disk.yandex.ru/d/kSXRul0yiX4pOQ
Ну а если кто-то найдёт какой-то баг, не стесняйтесь, пишите тут или мне на почту: nick(собака)variussoft.ru
P.S. Ах,да, забыл упомянуть. Эта программка собрана под дот нет кор, так что работать должна и на линуксах(но я не пробовал)
Пост удалён Автором. Причина: «Тестовый»
Всем доброго утра, дорогие друзья!
Как вы могли заметить, а если нет, то я вам рассказываю, вкладка Лучшее у нас показывает что-то не совсем поддающееся логике.
А всё по тому, что никакого Лучшего у нас ещё нет, мы ещё думаем над алгоритмом, и параллельно ведём споры о том, как должно работать горячее
Из чего некоторые из членов команды решили, что сейчас порог слишком высокий, поэтому я изменил формулу рассчёта и 18, которые стояли сегодня утром, превратились в 16.
Будем ещё наблюдать, возможно, математика ещё изменится.
Я хочу чтобы вы знали: порог горячего напрямую зависит от вашей активности. Не забывайте ставить оценки всему, что вам нравится и не нравится.
Не будьте равнодушны)
Всем доброго здравия, дорогие друзья!
Этим постом я начинаю серию публикаций о том, как я разрабатываю систему для ведения интерактивный НРИ. В тегах указана пятая редакция Подземелий, но на самом деле речь о любой НРИ. Привязки к конкретным правилам нет, подразумевается, что все необходимые действия (типа бросков кубиков) игроки будут совершать ручками за столом. А программа нужна только для визуализации перемещений, отображения карт и создания показательных боевых ситуаций. Ну и автоматическая выдача опыта, но это опционально и об этом потом.
И так, начнём с самых азов. На чём всё это безобразие будет работать?
На Unity. Почему? Да потому что на ней достаточно дёшево реализуется общение с ГПУ, а оно нам тут понадобится.
Полностью рассказывать о том, как и что я сделал смысла не вижу, но буду делиться какими интересными выкладками и, возможно, кусками кода, если они кому-то нужны.
Что мы сейчас имеем:
1. Система приключений
2. Внутри каждого приключения есть система игровых сессий
3. Внутри сессий и приключений есть возможность редактирования базы НИП, заданий, предметов и локаций
Кстати, UI в окне приключения реализован, как мне кажется, достаточно элегантно: он строится динамически, и в него легко буквально одной строчкой можно добавить новые разделы, которые сразу же отрисуются и кнопочкой и панелькой.
Для этого у меня создан класс SectionsManager, который висит в памяти приложения как Singleton. Он хранит в себе информацию о том, какие разделы мы будем использовать. Добавлять их туда можно через конфиги или через код, это уже вопрос того, кому как удобно.
А потом есть код, отвечающий чисто за UI и он ждёт от этого менеджера команду, когда тот всю необходимую информацию соберёт и скажет, что вот сейчас уже можно рисовать
private void Awake()
{
SectionsManager.GetInstance().IsReadyToRender += Render;
}
private void Render()
{
Sequence seq = DOTween.Sequence();
foreach (IMenuSection section in SectionsManager.GetInstance().Sections) {
SectionButton button = Instantiate(sectionButtonPrefab, transform);
RectTransform rt = button.GetComponent<RectTransform>();
CanvasGroup cg = button.GetComponent<CanvasGroup>();
cg.alpha = 0f;
button.transform.localScale = Vector3.zero;
button.Init(section.GetName(), () => { section.Show(transform.parent); });
seq.AppendCallback(() =>
{
cg.DOFade(1f, 0.3f).SetEase(Ease.OutQuad);
button.transform.DOScale(1f, 0.4f).SetEase(Ease.OutBack);
});
seq.AppendInterval(0.1f);
}
}
Конечно, каждую секцию нужно предварительно настроить и сохранить как префаб, совсем магии тут нет, но зато управление такими секциями становится максимально простым. Не захочет мастер пользоваться функционалом заданий, зачем ему занимать память приложения и заграмождать интерфейс ненужным функционалом. Он его отключит, приложение его выгрузит и забудет до тех пор, пока Мастер снова не захочет им воспользоваться.
Понятия не имею, интересно ли это вообще хоть кому-то, но я искренне надеюсь, что среди пользователей сайта есть люди неравнодушные к программированию, геймдеву и НРИ.
Посему жду комментариев, вопросов, критики, чего угодно.
Всем хороших игр!
Всем доброго здравия!
Если кто-то не знает, кто такое VariusSoft, то посмотрите пожалуйста справа под рандомными комментами в подвальчик)
Что это значит? Ну всё очень просто, есть я такой дофига Напалм, который тут картиночки с рассказиками постит. А есть команда разработки, которая занимается серьёзными программерскими штуками и я хочу делиться ими именно от имени команды.
1. Кто-то скажет: «мультиакк детектед»!
Я отвечу: да, но! Это такой способ «узаконить» мультиакк, наложив на него ряд ограничений. Самая главная проблема мультиакка в том, что наделав себе аккаунтов можно натыкать кучу плюсов и минусов, серьёзно обесценив рейтинговую систему. Ну так вот, такой аккаунт не может ставить оценки:
Второй нюанс в том, что на странице профиля такого акка будет прямым текстом написано, кто за него отвечает.
2. Кто-то скажет: «Корпоративный аккаунт детектед».
И тут ответ иной: нет, это не корпоративный аккаунт. И если вдруг к нам придёт какая-то мегакорпорация, которая захочет делиться тут своими новостями официально, тогда мы ей скажем: «Пожалуйста, регистрируйтесь на общих правилах и постите на здоровье».
Такой функционал дочерних аккаунтов нужен лишь чтобы разделить ленту по смыслу и по темам.
3. Дочерний аккаунт может быть только один и сам он поддаётся рейтинговым правилам. Если человек будет постить с него дичь и люди доведут такой акк до бана. Ну, значит доведут. Тут и сказочке конец.
Такие акки будут создаваться через админку ручками и по запросу.
Первый тематический журнал уже продуман и на подходе. Если ничего не изменится, то вы его скоро увидите.
А я пошёл дальше буковки писать!
Всем рабочего кода!
В браузере заходите в меню, там есть Добавить на главный экран. От браузера может разниться, но думаю что-то похожее
P.S. Пост опубликован уже через приложение