Переменные как база данных
От: Рома Мик Россия http://romamik.com
Дата: 15.06.16 09:06
Оценка:
Я буду писать про программирование игр, но в целом это может относится и к другим областям точно так же. Состояние игры — это значения переменных. Отладчики позволяют просматривать эти значения, но в достаточно тупом режиме, вот переменная, вот ее значение. Если это указатель, то вот значение того что по указателю, если массив, то вот все 100500 элементов массива, а если это связанный список, то дебаггер про это вообще не знает и ходи сам по указателям. А хотелось бы, вытащить из массива или списка элементы соответствующие какому-то критерию, смотреть только нужные сейчас поля, вытащить какие-то поля из связанных переменных. Возможно поменять какие-то значения прямо в рантайме.

Можно через какой-нибудь рефлекшн собирать значения всех переменных и отдавать их вовне. Ну самый простой вариант сервер внутри себя запускать, к которому подключаться браузером, и в js создавать переменные с теми же именами и значениями и для отладки в консоли браузера на js писать всякие запросы.

А можно изначально хранить все переменные описывающие состояние игры, не как просто члены классов, а в спец.хранилище типа базы данных с универсальным интерфейсом. Тогда можно делать клиент, позволяющий работать с этой "базой данных", эта же база пригодится при создании всяких интерфейсов, чтобы прямо в описании интерфейса писать какие данные в нем должны быть показаны.

Наверняка такое сто раз уже придумано и сделано. Где посмотреть и почитать про такое?
Re: Переменные как база данных
От: LuciferSaratov Россия  
Дата: 15.06.16 09:14
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Наверняка такое сто раз уже придумано и сделано. Где посмотреть и почитать про такое?


мне на ум приходят только скрипты для GDB, ими как раз можно заставить отладчик понимать специфику конкретной программы.
Re: Переменные как база данных
От: akasoft Россия  
Дата: 18.06.16 11:47
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Я буду писать про программирование игр, но в целом это может относится и к другим областям точно так же. Состояние игры — это значения переменных.


Только конкретная игра и автор игры знает, как интерпретировать переменные и их значения в конкретной игре, как их сгруппировать для удобства использования, и в чём конкретно это удобство заключается.
Поэтому логично написание отдельного UI и/или журналирования параллельно основному UI игры. Ведь обычно цель этого — разработка, доработка и оптимизация игровой логики и ИИ игры.
Всякие консоли по тильдам — это один из вариантов реализации такого, если этого достаточно.

Использовать БД в косынке — это одно, а вот в какой-нибудь ММОРПГ без этого может быть не обойтись.

Переменные хороши компактностью, доступностью и производительностью. Прикручивание к ним БД хорошо бьёт по этим и другим качествам.

Кроме того, главная функция игры — играть, а просмотр и изменение переменных, настройка логики не должны тратить ресурсы во время выполнения главной функции, т.е. попросту отключаться, а то и отсутствовать.
... << RSDN@Home 1.2.0 alpha 5 rev. 76>> SQL DE 2016
Re: Переменные как база данных
От: wildwind Россия  
Дата: 18.06.16 14:39
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Наверняка такое сто раз уже придумано и сделано


Конечно придумано. Консоль называется. Там и переменные все доступны, и делать с ними можно что хочешь. А еще для прикладной части игры язык берут такой, на котором все это делать удобно. Тот же JS или Lua.
Re: Переменные как база данных
От: meadow_meal  
Дата: 22.06.16 08:46
Оценка:
Здравствуйте, Рома Мик, Вы писали:

А какова цель, сценарии использования, собственно пользователи?

Что мы используем из того что более менее подходит под ваше описание:

1) Отладка
Современные движки много всего умеют при запуске из редактора. В Unity3d или UE4 вы можете найти игровой объект и поменять значения свойств прямо в редакторе (с ограничениями, в которые легко уложиться).

2) Дизайн
Мы храним все дизайн-данные (т.е. данные, которые не меняются самой игрой, но определяются дизайнерами) в CouchDB. Дизайнеры редактируют данные в специальном редакторе. Игровые сервера подписаны на изменения CouchDB и уведомляют клиентов. Так, стоит дизайнеру поменять, например, базовую скорость юнита, как она автоматически и моментально применится для всех юнитов этого типа для всех подключенных клиентов. Ну и да, в редакторе есть поддержка js и много всего.

3) Комьюнити менеджмент
Чтобы CM могли просматривать и редактировать состояния игроков (в том числе онлайн) — игровые сервера предоставляют json rest сервис. CM используют веб-фронтенд.

4) Игроки
Консоль, дебажное UI. Вообще нужно очень хорошо подумать, прежде чем давать что-то игрокам.

Разные сценарии использования — разные подходы.

РМ>... прямо в описании интерфейса писать какие данные в нем должны быть показаны.


Это верная и важная мысль. Все, что нужно инфраструктуре должно быть либо помечено метаданными прямо в коде, либо в IDL (из нашего IDL мы генерируем очень много — код типов для таргет-языков, методы сериализации, сетевые сервисы, схемы для редакторов, xsd для xml, в ближайших планах — sql-миграции, так как источник генерации один то и вся инфраструктура не теряет актуальности). Если где-то добавить лишние шаги, необходимые для поддержания актуальности инфраструктуры (схемы данных, консольных комманд, чего бы то ни было) — и она моментально устаревает.
Re: Переменные как база данных
От: Kingofastellarwar Украина  
Дата: 07.07.16 15:14
Оценка:
Здравствуйте, Рома Мик, Вы писали:

посмотри , мож пригодится http://www.gamedev.ru/code/forum/?id=212475
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.