Ответы пользователя по тегу Разработка игр
  • Как рассчитать "нужды" NPC в числовом виде на основе его требований и инвентаря?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Есть персонаж с неким состоянием. Хорошо представить состояние как неизменное. Есть некий конечный автомат, который на вход принимает действие, а на выходе даёт новое состояние. Бездействие - это тоже действие. Поведение персонажа в прошлом - это журнал действий. Теперь нужно выбрать стратегию поведение персонажа на будущее. Обычно это делается с помощью деревьев решений. То есть у персонажа есть в каждый тик выбор из набора допустимых действий. Некоторые будут вести к нежелательным последствиям вроде смерти, такие ветки можно обрубать, а некоторые ещё позволят пожить какое-то время. Если дерево получается сильно ветвящееся, то можно ввести норма-функцию, которая будет давать эмпирическую оценку состояния. Персонаж должен выбрать путь в дереве допустимых решений с наименьшими рисками. Правильно понимаю. что помимо действий на судьбу персонажа влияет внешний Пуассоновский поток рандомных событий?
    Вот поэтому выбирается тот путь в дереве, который даёт максимальный запас живучести по каждому состоянию из всей цепочки прогнозируемого жизненного пути персонажа.
    При возникновении любого внешнего события дерево придётся очистить и перестроить заново. Можно кешировать его отдельные ветки по состоянию. Помним, что состояние у нас имеет смысл сделать иммутабельным (неизменным), тогда его можно использовать как простой бинарный хеш-ключ в кэше. Это может сэкономить много вычислительных ресурсов и памяти при сильно ветвящихся деревьях.

    Описаный подход позволил бы применять и нейросети и генетические алгоритмы и логические каркасные правила на том же прологе для оптимизации поиска пути в дереве решений. Можно, зная вероятности разных событий или накопив со временем статистику в прогнозы добавлять и события, тогда персонаж сможет целенаправленно учитывать риски или "надеяться" на позитивные случайные события.

    Звучит как игра, которую кто-то "джва года ждал"=)
    Ответ написан
    Комментировать
  • Как прекратить вращение тела в игре?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Поставь "трение" на угловую скорость. Ну, в смысле, можно домножать угловую скорость на коэффициент меньше 1, а когда станет ниже порога, то обнулить. Или просто обнуляй угловую скорость, когда объект ляжет на грунт и выровняется.
    Ответ написан
    Комментировать
  • Как отрисовывать Tileset'ы на Canvas?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Обычно такое получается из-за того, что тайлы сперва масштабируют, а потом размещают на канве. Нужно наоборот, масштабировать уже состыкованную из тайлов катинку.
    При ресайзе крайние пиксели получаются немного не того цвета.
    Короче, надо вставлять тайлы в исходном их размере на холст.
    Ответ написан
    Комментировать
  • Как в игровых движках реализованы отскоки?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А что вам не понравилось в приведенных формулах? Они совсем не сложные.
    Правда в векторной форме записать закон сохранения импульса можно гораздо компактнее, а некоторые языки вроде питона позволили бы в комплексных числах записать формулу прямо в векторной форме для плоского случая. Но можно записать и так, как здесь приведено у вас.

    У вас тут довольно простой случай столкновения точечных масс, но в физических движках обычно коллизии предусматривают более натуральные взаимодействия с вклчением вращения, как отдельной степени свободы. В этом случае играют важную роль размеры, формы и координаты центов масс сталкивающихся объектов. В этом случае формулы будут посложнее, но дифуры также по-прежнему считать не обязательно. Просто закон сохранения импульса и аккуратный учет всех составляющих.
    Оишите подробнее вашу задачу, потому что сейчас это можно сделать совсем просто, как в пинболле, или сложно с гравитацией и через дифуры.
    Ответ написан
    2 комментария
  • Как сделать мини консольную игру?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Рисуете на бумажке граф состояний вашей игры.
    Каждый узел этого графа - это вопрос. Из узла выходят стрелочки в другие узлы. Каждая стрелочка - это вариант ответа и реакция на нее игры.
    Так вы опишете граф состояний конечного автомата.
    Теперь этот граф вам нужно оформить для использования в программе.
    Обычно граф описывают с помощью матрицы состояний. Это матрица N*N, где N-это количество состояний игры. Каждая ячейка с координатами (i, j) такой матрицы определяет переход из i-ого в j-ое состояние. Если в ячейке ноль, то перехода нет, а если 1, то есть.
    Обычно в такой матрице нулей гораздо больше чем единиц, поэтому такую матрицу кодируют в виде перечисления всех стрелочек-переходов из исходного в следующее состояние.
    В исходном коде или в файле описываете N состояний, для каждого состояния перечисляете все варианты ответов, для каждого варианта ответа указываете какое состояние будет при его выборе.
    Такую структуру можно описать в виде json или yaml-файла, либо прямо в коде средствми выбранного языка программирования (словарь, или функция с switch-case, или много if-ов).
    Программа будет представлять цикл и переменную со ссылкой на текущее состояние.
    В цикле печатаете вопрос, который соответствует текущему состоянию и варианты ответов на него, запрашиваете ответ у пользователя, в зависимости от ответа присваете в качестве текущего новое состояние.

    Если вам что-то не понятно в этом тексте, то нет смысла задавать дополнительные вопросы, в этом случае вы гарантированно не справитесь с заданием. Следует искать информацию о ненакомых терминах в интернете.
    Удачи.
    Ответ написан
    Комментировать
  • Как разобрать mp3 файл?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Это слишком широкий вопрос, а вам следует разбить задачу на несколько более простых.
    Вот гуглите отдельно:
    - конвертация mp3 в midi - https://www.google.com/search?q=mp3+%D0%B2+midi&oq...
    - конвертация midi в нотные блоки - https://www.google.com/search?q=midi+to+minecraft+...

    Судя по постановке вопроса ваша задача еще не скоро будет вам подсилу. Учитесь декомпозировать и искать информацию. Без этих навыков вы ничего не добьётесь.
    Ответ написан
    Комментировать
  • Всё, что нужно знать о разработке собственной игры и где найти команду?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вилка может быть очень большая и она будет сильно зависеть от того, насколько точно вы понимаете чего именно хотите.
    Слаенная команда, которая уже писала такие вещи наверно может сделать такую игру за несколько месяцев по четкому детальному ТЗ. ТЗ делать может быть придётся даже дольше.
    В команду достаточно пары художников, дизайнер по интерфейсам (можно на оутсоросе взять на какое-то время, а не в штат), одного толкового синьора или пару растущих мидлов и джуна на бэке хватит. На фронте даже не знаю, не большой спец. Но думаю пару вротендеров хвтит, если браузерку делаете.
    Нужен ещё чел, который будет понимать про игровые механики, баланс и прочие такие премудрости. Это может быть кто-то из команды или вы (в чем я сомневаюсь, судя по постановке вопроса).
    Этоя описал самый минимум по команде, но сроки тут могут сильно-сильно плавать в зависимости от конкретного опыта разрабов.

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

    Самое мудрое - не писать снуля, а обратиться в студию, которая делает такого рода вещи на заказ. Ну а на сколько там договоритесь - это уже надо конкретно общаться.
    Ответ написан
    1 комментарий
  • Как делается такая гравитация в играх?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Это нулевой общий вектор гравитации для сцены.
    Ответ написан
  • Как реализовать честную игру в Угадай число?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваше решение волне валидно. Разве что некоторым игрокам придётся объяснять что такое md5 и рассказывать про сложность нахождения коллизий.
    Опять же, ушлый игрок сможет предположить, что кто-нибудь ввалил огромные мощности на поиск коллизий, а потом ему подсовывает нужную соль под ответ. Тем более не обяательно чтобы конкретное исло было в result, а достстоноч, чтобы там было не одно из выбранных 5.
    Короче, для надёжности я бы вам посоветовал добавить помимо своей соли, еще и соль, выбранную игроком. Ведь какая разница от чего считать md5, если вы играете по-честному. А вот найти коллизии при наличии гарантированно рандомной (или просто не подготовленной соли), да еще и так быстро (в рамках игры) - это куда сложнее.
    Ответ написан
    Комментировать
  • Какая физика нужна разработчику игр?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Щкольная физика нужна для ориентировочного понимания того, как устроен и работает наш мир.
    Когда вы будете разработчиком, то столкнётесь с очень разными задачами, в том числе далеко выходящими за рамки школьной физки. Но школа в целом и школьная физика в частности нужна в первую очередь не для получения конкретных знаний и заучивания конкретных формул, а для формирования УМЕНИЯ УЧИТЬСЯ, умения осваивать новые концепции, поступательно и планомерно разбираться в теоретических основах, ориентироваться в механике реального мира.

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

    Я уверен, что разработчик, а тем более разработчик в геймдеве, обязан лучше других понимать устройство нашего мира, чтобы успешно и эффективно решать работчие задачи. Да, сложные задачи требующие таких знаний встерчаются не каждый день, но если вы плохо понимаете физику, то вы просто не различите таких задач и не найдёте элегантных способов их решения.

    Визика важна.
    Ответ написан
    3 комментария
  • Стоит ли изучать Machine Learning если хочется создавать видеоигры?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Не волнуйтесь, специалистов ML ИИ заменит первым=). А ещё раньше все машины и самолёты будут исключительно с автопилотами, потому что водителей заменить проще, чем программистов.
    Программист должен быть готов постоянно учиться, если вы не готовы, то идите лучше водителем, они тоже не скоро будут вытеснены ИИ. На наш век любой работы хватит. Даже лифтёром или телеграфистом, я уверен, еще можно где-нибудь устроиться.
    Нравится ML - занимайтесь им, вы же в индустрии, вы в одиночку пилите инди-игры? Серьёзные игры пишут большая команда. Если б вы хотели быть строителем, то вы вполне могли бы не разбираться в устройстве черепичной кровли, если достаточно хорошо кладёте кирпич или штукатурите. Все работы хороши, выбирай на вкус те, в которых интересно будет развиваться.
    Ответ написан
    3 комментария
  • Где можно найти алгоритм шахмат?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    В общем случае такие задачи решаются перебором. Для этого строится дерево возможных состояний доски начиная с текущего состояния. Потомки текущего состояния в этом дереве - это результаты всех возможных ходов очередного игрока. Это сильно ветвящееся дерево, а значит буквально через несколько ходов количество элементов в нём станет слишком большим, чтобы перебирать и оценивать их по очереди. Тут и речи не жёт о спуске по дереву до финальных (листовых) состояний, по которым можно однозначно удить о выигрыше.
    Очевидно, что дерево можно усекать и не рассматривать заведомо проигрышные или слишком затратные ходы, можно сравнивать состояния с определёнными предварительно просчитанными ситуациями. Чем их больше в БД, тем быстрее будет работать ваш алгоритм.
    В любом случае более менее эффективно играть в шахматы компьютеры научились только недавно и для этого нужны очень мощные компьютеры, большая БД и нетривиальные алгоритмы распознавания типовых паттернов на доске.
    Нельзя просто так взять и переделать готовый хороший шахматный алгоритм под себя. Вернее можно, но сложно.
    Зато попробовать написать что-то своё - это хорошее упражнение для мозгов.

    Попробуйте реализовать класс для описания состояния доски (включает положения фигур и цвет хода). Опишите класс для дерева таких состояний. В узле дерева будет состояние доски и ссылки на возможные состояния.
    Для состояния можно давать примерную оценку его выигрышности. В самом простом случае - это взвесить фигуры силе и просуммировать очки. В более сложном - это понимать под боем фигура или нет, заблокирована ли и т.д.

    На всякий случай скажу, что в шахматы я играть не умею, знаю лишь правила и могу играть только на дилетантском уровне, так что могу нести чушь. Просто рассказываю ка кподходил бы к решению здачи наивно с нуля. При серьёзном решении этой задачи наука давно перешагнула далеко за порог сложности для самого талантливого новичка.
    Ответ написан
    Комментировать
  • В какой программе создать JSON для анимации?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Сделайте в любом текстовом редакторе.
    Ответ написан
  • Какими способами можно отображения чужую гео локацию в режиме 24 на 7?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    питнашки

    Вам нужно арендовать самую дешевую VDS, купить какой-нибудь домен, настроить на vds nginx и заиметь сертификат через letsencrypt.
    Так у вас будет 24/7 cервер с https в инете.
    Потом деплоите на сервер своё приложение на каком-нибудь flask'е. Можно подготовить шаблон проекта с помощью так называемого кукикаттера, например такого.
    На выходе у вас получится "рыба" полноценного RESTful API приложения с готовым CI/CD и почти всем, что необходимо для нормальной жизни.
    Вам останется лишь реализовать пару своих методов:
    • push_me - запостить свою позицию
    • all - взять актуальные координаты всех юнитов

    Это минимум. По-хорошему, конечно, желательно сделать это всё на asunc-io и использовать веб-сокеты для обновления координат цели.
    Ещё, исходя из специфики вашей задачи, можно задействовать RTSP.
    Ответ написан
    6 комментариев
  • Скорость или ширина(незнаю как правильно) канала для онлайн игр?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вопрос действительно наивный. Складывается впечатление, что вы решили писать игру с миллионным онлайном и это первый вопрос, который у вас возник. Хостинг-то надо выбрать вот прям сейчас и на вырост, так чтобы не менять потом, ага...

    Посчитать-то не сложно, но количества игроков онлайн не достаточно. Есть большая разница во что они все будут играть: в какие-нибудь шахматы - это одно, в шутер - другое.
    Ваш показатель (игроков онлайн - N) нужно умножить на средний размер пакета и число пакетов в секунду. С последним не всё так просто. В шахматах это число пакетов будет порядка N, а в некоторых игровых механиках эти коэффициенты могут и квадратично зависеть от числа взаимодействующих юнитов. Тут нужно глубже смотреть уже не в то, какой нужен канал, а как построить архитектуру и подпилить фичи геймплея, чтобы влезть в разумные рамки.

    Короче, не с того конца пошли.
    Ответ написан
    Комментировать
  • Есть ли смысл делать свой движок?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вопрос неоднозначный.
    Судя по этому вопросу и вашему прогрессу, никакой коммерческой выгоды из этой работы вы не получите, поскольку формулировка выглядит наивной даже в свете столь скудных сведений, что вы предоставили.
    Однако все мы в начале пути писали свои движки. Если вы нашли в этом свой интерес и этот интерес побуждает вас программировать, самосовершенствоваться, учиться новому, то любая такая деятельность только на пользу.
    Не питайте, однако, особых иллюзий по этому поводу.
    Ответ написан
    Комментировать
  • Сервис для создания своих карт?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    В QGIS можно сделать самую обычную карту как с нуля, так и взяв куски из OSM.
    Ответ написан
  • Насколько плохая идея использовать Python для создания браузерных игр?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В качестве бэкенда - норм.
    На фронте питона нет. Разве что рассматривать какие-нибудь кустарные транспиллеры вроде такого: https://github.com/replit-archive/empythoned
    Но с ними вы намучаетесь так намучаетесь. Вернее, судя по тому какой и где вы задаёте вопрос, ничерта у вас не получится.
    Ответ написан
    Комментировать
  • Каков смысл скалярного произведения в Cel Shading?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Для реализации Cel Shading вычисляется скалярное произведение между нормалью поверхности(полигона) и источником света.
    какой именно луч света, падающий на поверхность(полигон), используется для вычисления угла?

    Для каждой точки поверхности этот луч свой. Соответственно для каждой точки можно рассчитать своё скалярное произведения луча на источник и нормаль.
    Есть ещё так называемые карты нормали, когда на гладкую полигональную модель накладывают особый слой текстуры, каждая точка которой - это вектор нормали в соответствующей точке модели. Так можно гладкую коробку снабдить фактурой, которая будет по-разному выглядеть при разном напр....
    В этом случае у плоского полигона в каждой точке будет своя нормаль, и они все могут быть разные. Соответственно в каждой точке поверхности и направление на источник своё.

    какая длина у вектора нормали полигона, от чего она зависит?

    Ну по определению нормаль - это прямая, перпендикулярная (в данном случае) поверхности. У прямой нет длины. А вот вектор нормали - это уже единичный вектор. Технически ничто, наверно, не мешает ВЗЯТЬ не единичный, а вектор любой произвольной длины. Наверно можно даже придумать для чего бы это кому-то могло понадобиться. Если вам для чего-то нужно -- используйте.
    Наверно интересно поиграться домножив вектора нормали на значения второй производной в соответствующих точках поверхности. Будет своеобразная мера кривизны поверхности в точке.
    Ответ написан
    Комментировать