Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2010, 18:20   #1
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию Структура данных для хранения предметов

Здравствуйте. Есть игра, в ней разные предметы по типу(оружие, броня, бижутерия и пр.). Кроме того предметы делятся по классам игроков, то есть, например, есть топор для воина, а есть топор для мага. И так все предметы. Ну и конечно же все предметы делятся по уровням(то есть отдельно посох для мага 1-го уровня, и отдельно для мага 2-го). Кроме того, предмет можно улучшать. То есть для предметов необходимо хранить:
1) уровень
2) класс персонажа
3) название
4) ссылку на картинку
5) характеристики(несколько, причем набор для всего разный)
6) характеристики, которые предмет получит после улучшения

Про последний пункт - он нужен из-за разности классов, уровней, и типов предметов. Собственно подскажите структуру данных для хранения.
P.S. может разделом ошибся?
Упс...
L_M вне форума Ответить с цитированием
Старый 14.11.2010, 23:10   #2
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Двухмерный массив - удобно и быстро.
У меня по крайне мене в проекте так реализовано, не жалуюсь.
Виталий Желтяков вне форума Ответить с цитированием
Старый 15.11.2010, 00:25   #3
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

L_M, создай собственный тип для предметов, и привяжи к динамическому массиву, например так:

Код:
type
  TGItems = packed record
    TGType:           Byte;           // тип вещи (0 - меч, 1 - лук, 2 - посох, 3 - броня, 4 - шлем и т.д.)
    TGPType:         Byte;           // подтип вещи (класс, 0 - простой, 1 - первого уровня, 2 - второго, ...с вложенной магией и пр.) 
    TGName:         PChar;         // название вещи
    TGImgIndex:   Word;          // номер картинки в банке текстур
    
    // тут записи, полный набор, какие могут быть у вещей
    // заполняться будут по значению TGType самим движком
    // некоторые будут не задействованы
  end;


Var
  ItemMas: array of TGItems;     // это динамический массив вещей
...все в принципе, по ходу будешь добавлять новые необходимые записи в тип. Сам массив расширяется командой SetLength:

Код:
SetLength(ItemMas, N * SizeOf(TGItems));
N - количество ячеек, т.е. вещей в игре.

Также можно создать массив конкретно для персонажа (игрока), там будут в ячейках индексы, указывающие на общий массив вещей.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 15.11.2010 в 00:29.
Beermonza вне форума Ответить с цитированием
Старый 15.11.2010, 09:54   #4
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию

То есть хранить в объекте или массиве требования предмета, а для использования проходить весь массив и сравнивать допустимые свойства? То есть если нужен топор, то просматривается весь массив, сравнивается свойство "тип", "уровень" и "класс".
Я просто предполагал сделать индексами уровень для простоты обращения. Ну и класс собственно(m[1]="предмет1 класса1 уровня1", m[2]="предмет1 класса2 уровня1", m[3]="предмет1 класса1 уровня2", m[4]="предмет1 класса2 уровня2"...). То есть меня волнует вопрос, как бы это сделать быстро. Но для разных предметов создавать разные массивы? Или придумать какую-нибудь извращенную схему поиска и запихнуть все в 1 массив? Например создать дополнительный массив границ типов предметов...
Хотя мне сейчас пришла идея генерировать ключи, т.е. использовать ассоциативный массив. Попробую так, поиск должен стать линейным тогда...
Упс...
L_M вне форума Ответить с цитированием
Старый 15.11.2010, 20:34   #5
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Поиска по всему массиву быть в принципе не может. Вот на карте клетка, в ней написано, например: {3}{25}{138} - это в байтах, первый указывает, что это какая-то вещь (все динамические массивы игровых объектов должны иметь номера, чтобы движок сразу обращался к нужному массиву), второй и третий - это Word цифра (после преобразования 0-65535), она указывает на конкретную вещь в массиве всех вещей. Поиска нет, сразу конкретный предмет. Так же он будет отмечаться в магазине на прилавке, в инвентаре, только там первый байт уже не нужен, поскольку в инвентаре только вещи, объектов нет.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 15.11.2010, 21:08   #6
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию

Beermonza, да, спасибо, я пришел примерно к такому же виду.
Упс...
L_M вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура данных для кубика Рубика Gut Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 07.11.2010 15:48
Структура для хранения произвольной мелодии LordotU Помощь студентам 5 02.10.2010 22:21
оптимальное решение для хранения данных D.O.G БД в Delphi 8 16.09.2010 15:16
найти программу для хранения базы данных t@sh@ Софт 5 29.11.2009 00:27
Структура хранения МАТЕМАТИЧЕСКИХ функций Levsha100 Общие вопросы Delphi 2 02.05.2009 22:47