Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 19.09.2015, 15:35   #11
Smitt&Wesson
Профессионал
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Адрес: г. Киров
Сообщений: 13,937
Репутация: 815

skype: forwardbiznes
По умолчанию

Цитата:
Сообщение от Serg-Grin Посмотреть сообщение
Croessmah, подскажите а как сделать для каждого одинакового предмета свое состояние?
Ну, можно через структуры. Можно и через классы. Смотря, чего Вы хотите добиться. Я, вот сделал-бы класс. Там, хотя-б ы можно рализацию скрытую сделать. Но, в любом случае, Вам решать. Юзики в экзешнике всё равно копаться не будут. Работает и ладушки.
__________________
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума   Ответить с цитированием
Старый 19.09.2015, 22:29   #12
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,927
Репутация: 1937
По умолчанию

Давайте сначала узнаем какой язык...
waleri вне форума   Ответить с цитированием
Старый 19.09.2015, 22:45   #13
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,840
Репутация: 6850
По умолчанию

Цитата:
Давайте сначала узнаем какой язык...
В топе темы паскаль.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 11.12.2015, 02:27   #14
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Адрес: Украина, Черновцы
Сообщений: 388
Репутация: 47

icq: 499637481
skype: sergiytkach
По умолчанию

Сделайте несколько массивов. Один - база - у Вас уже есть. Теперь сделайте инвентарь скажем на 20 предметов. И в цикле каждому элементу присвойте предмет "нет предмета", то есть просто пусто. Когда покупаете или находите предмет просто копируете (присваиваете) его из базы в инвентарь. Аналогично для торговцев. Аналогично для куклы персонажа, чтобы одевать предмет.
__________________
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума   Ответить с цитированием
Старый 14.12.2015, 07:34   #15
phomm
personality
Профессионал
 
Аватар для phomm
 
Регистрация: 28.04.2009
Адрес: Тюмень
Сообщений: 2,855
Репутация: 1511

icq: 421049471
skype: phomm-
По умолчанию

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

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

Последний раз редактировалось phomm; 14.12.2015 в 07:38.
phomm вне форума   Ответить с цитированием
Старый 14.12.2015, 09:16   #16
Virtuallab
Пользователь
 
Регистрация: 03.08.2012
Сообщений: 38
Репутация: 10
По умолчанию

Предложение: если этого ещё нет, добавить в Predmets[] свойство, характеризующее на какую часть тела данный предмет одевается. Например: 0-голова (головной убор), 1-голова (корона, подшлемник), 2-Голова(для морды лица: маска, очки), 3-шея, 4-грудь, 5-спина (для плаща) и т.д. Здесь желательно определиться, будут ли рюкзаки, сумки, кошели привязываться к какой либо части тела. Будет проще с куклой. Про голову можно так не заморачиваться, если предполагается одевание на нее одной только вещи, но если думать о перспективе развития ...
Необходимо сразу определиться с вопросами:
1. Предполагается ли ремонт вещей?
2. Сдавать вещь торговцу только отремонтированную или можно изношенную?

Согласен с apromix'ом насчет массивов. Должен быть базовый массив вещей (эталонный) и те, что попадут в save: массивы торговцев (содержащие ограниченные перечни дескрипторов из базового массива) и для тех вещей, которые у игрока.
Понятно, что у предметов игрока со своими уникальными дескрипторами должна быть ссылка на дескриптор базовой вещи (для оценки процента износа её и, соответственно, цены сдачи торговцу или до какой величины восстанавливать её состояние при ремонте, если он предполагается). А после продаже торговцу конкретная вещь возвращает свой базовый дескриптор. Но тут возникает вопрос по сокетам, как предупреждал тов. phomm. Дефолтное обнуление сокетов при возврате к торговцу?
Virtuallab вне форума   Ответить с цитированием
Старый 15.12.2015, 15:38   #17
Serg-Grin
Дивиджей
Форумчанин
 
Аватар для Serg-Grin
 
Регистрация: 05.01.2009
Адрес: Добровеличковка
Сообщений: 84
Репутация: 10
По умолчанию

apromix, у меня по началу так реализовано как Вы написали.
Есть рынок, там я покупаю вещи, если ячейка рюкзака пуста то он добавляется туда. При создании формы создаются все предметы вещей в массиве, которые будут использоваться в игре.

Код:
Const
MaxThings = 128; // примерно
var
Things: array [1..MaxThings] of TBitmap;
Дальше в создании формы описываю каждый предмет с его характеристикой. Как написано в первом посту.
При покупке вещи на рынке пишу следующий код:

Код:
var
ID: integer; // номер вещи
begin
if (rukzak[i]=0) and (Hero.Gold>=Vesh[VeshID].Gold) then
Hero.Gold:=Hero.Gold-Vesh[VeshID].Gold;
rukzak[i]:=ID;
так в свободный слот добавляется вещь с определенной картинкой и состоянием.
Но проблема состоит в том, если я покупаю вещь допустим (Кожаный шлем) она у меня идет из базы текстур под номером 1. И есть состояние как для неё так и для всех остальных вещей.
Но если я куплю две одинаковые вещь этот же самый (Кожаный шлем), то при проигрыше в бою состояние уменьшится у двоих этих же вещей.
Так как писал Croessmah

Цитата:
Да тут, походу у ТС в инвентаре "дескрипторы" предметов, сами предметы лежат где-то в массиве, в единственном экземпляре, то есть если у персонажа два одинаковых предмета, то у них один и тот же дескриптор (например указатель на предмет или индекс в массиве), поэтому, если изменяется один предмет, то у него изменяются и другие такие же. Я так понял
И вот. Как можно сделать состояние вещей отдельным объектом?
Цитирую

Цитата:
Каждый купленный предмет должен быть отдельным объектом и тогда изменения его свойств не будет затрагивать другие копии этого предмета.
Заранее спасибо.
__________________
Впишите в google:
DVJ Serg-Grin
И вы услышите мои песни
Serg-Grin вне форума   Ответить с цитированием
Старый 15.12.2015, 21:02   #18
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Адрес: Украина, Черновцы
Сообщений: 388
Репутация: 47

icq: 499637481
skype: sergiytkach
По умолчанию

Если нужна прочность у предметов, то алгоритм модифицируется элементарно просто: добавляется 1 свойство durability, и при присваивании из базы в эту переменную заносится число из maxdurability записи предмета из базы (ну или там число немного меньшее maxdurability, если предмет не покупается у торговца, а, скажем, его нашли и он немного поврежден).

Я наведу примерный код:
Код:
type
  // Предмет-шаблон для базы
  TBaseItem = record
    ...
    MaxDurability: Byte; // Прочность целого предмета
    ...
  end;

type
  // Предмет в инвентаре, на полу или одетый на игрока
  TItem = record
    ...
    Durability: Byte; // Текущая прочность предмета
    MaxDurability: Byte; // Прочность целого предмета
    ...
  end;
Вот мы нашли предмет и решили взять себе, значит добавляем его в пустую ячейку инвентаря:

Код:
Inv[I] := BaseItems[ID]; // ID - это ID предмета в базе
Inv[I].Durability := BaseItems[N].MaxDurability - (BaseItems[N].MaxDurability div 10);
Обращайтесь в скайп - помогу с радостью!
__________________
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума   Ответить с цитированием
Старый 15.12.2015, 21:11   #19
Serg-Grin
Дивиджей
Форумчанин
 
Аватар для Serg-Grin
 
Регистрация: 05.01.2009
Адрес: Добровеличковка
Сообщений: 84
Репутация: 10
По умолчанию

apromix, спасибо Вам большое. Теперь мне всё стало ясно) +
__________________
Впишите в google:
DVJ Serg-Grin
И вы услышите мои песни
Serg-Grin вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет числа предметов в расписании уроков Polly_Panika Microsoft Office Access 5 27.03.2014 10:14
Сортировка предметов (Delphi) grongost Помощь студентам 1 07.09.2011 23:57
Разделение предметов по весу niki123 Общие вопросы C/C++ 13 04.04.2011 12:13
Структура данных для хранения предметов L_M Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 15.11.2010 22:08
Задача на С++. формирование выбора предметов Veina Помощь студентам 9 23.12.2009 01:39


19:31.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.