Гибкая/модульная система базы данных для RPG(не RPG)

Программирование на Юнити.

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение samana 01 ноя 2017, 18:47

Я ведь и сам не представляю как вы планируете манипулировать этим всем, что откуда вызывать и где что назначать. Я лишь сделал некий пример по вашему условию - добавлять в объект разные свойства и всё.
Абстрактный класс сделал чисто для того, чтобы контролировать методы создания и получения свойств. Чтобы в них нельзя было передать какой-то посторонний класс. Это было просто для красоты (в моём понимании) архитектуры кода. Хотя это совершенно и не обязательно и абстракцию можно убрать на ваше усмотрение.

Ваш последний пример выглядит вполне нормально, если вам удобно им пользоваться. Вот например я не знал, что в каждом свойстве вы планируете некий конкретный метод GeneralMethod, который должен делать что-то особенное. Сложно подсказать, так как я не знаю ваших замыслов :-??
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение KoteKotovK 01 ноя 2017, 18:59

samana писал(а):Я ведь и сам не представляю как вы планируете манипулировать этим всем, что откуда вызывать и где что назначать. Я лишь сделал некий пример по вашему условию - добавлять в объект разные свойства и всё.
Абстрактный класс сделал чисто для того, чтобы контролировать методы создания и получения свойств. Чтобы в них нельзя было передать какой-то посторонний класс. Это было просто для красоты (в моём понимании) архитектуры кода. Хотя это совершенно и не обязательно и абстракцию можно убрать на ваше усмотрение.

Ваш последний пример выглядит вполне нормально, если вам удобно им пользоваться. Вот например я не знал, что в каждом свойстве вы планируете некий конкретный метод GeneralMethod, который должен делать что-то особенное. Сложно подсказать, так как я не знаю ваших замыслов :-??

Самое смешно то, что я даже сам точно не знаю свой замысел XD, но вам спасибо за помощь! В общем, буду писать некий RoadMap для системе, ведь всего в голове не удержишь. Кстати, если говорить глобально, то мне просто не нравятся повторения всяких переменных и функций, я пытаюсь от этого избавиться, опять же, зачем нам что-то эдакое, где этого "чего-то эдакого" быть не должно? Возможно для компуктера это нормально, но лично мне не удобно, хотя мне кажется это одно из правил хорошего программирования и не просто хорошего, а продуктивного и понятного.
KoteKotovK
UNITрон
 
Сообщения: 267
Зарегистрирован: 20 июн 2014, 06:41

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение Cr0c 01 ноя 2017, 23:02

samana, а почему бы динамическую типизацию не сделать? Проще, легче, быстрее.
Синтаксис:
Используется csharp
public class SimpleProp {
 public int ID;
 public float valueAdd;
 public float valueMult;
 public SimpleProp(int _ID, float _valueAdd, float _valueMult)
 {
  ID = _ID;
  valueAdd = _valueAdd;
  valueMult = _valueMult;
 }
 public SimpleProp(PropID.Prop _ID, float _valueAdd = 0f, float _valueMult = 1f)
 {
  ID = (int)_ID;
  valueAdd = _valueAdd; // для добавления
  valueMult = _valueMult; // для множителя
 }
}
public static class PropID {
 public static enum Prop {
  health = 0,
  mana = 1,
  strength = 2,
  damage = 3,
  block = 4,
  hunger = 5
}
 

А потом просто в свойстве ID указывать и значение:
Синтаксис:
Используется csharp
SimpleProp[] props = new SimpleProp[2];
props[0] = new SimpleProp(PropID.props.damage, 20f, 1f);
props[1] = new SimpleProp(PropID.props.block, 10f, 1f);
 

Ну и у самого перса эти параметры полями держать, не обязательно все.
В результате надо складывать и умножать поля с одинаковым ID, можно любые характеристики давать предметам. Оборачивая массив таких свойств в отдельный класс можно сделать временные эффекты.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение samana 01 ноя 2017, 23:23

Cr0c писал(а):samana, а почему бы динамическую типизацию не сделать? Проще, легче, быстрее.

Да, ваш вариант мне нравится намного больше! Сам бы я не додумался до него, так как видимо мало опыта, а чем меньше опыта, тем сложнейшими путями решаются простые задачи. Спасибо за подсказку!
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение Cr0c 03 ноя 2017, 22:17

samana писал(а):Спасибо за подсказку!

Это я искал расширяемую систему без наследования ))) Это только база, там ещё можно добавить пару полей для расчета процента, расчета от базы, поле одно оставить, а булевой указывать множитель/аддитив и метод расчета внутрь встроить, чтобы сохранить инкапсуляцию и уменьшить связность. Дел ещё много до рабочего вида.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение KoteKotovK 12 ноя 2017, 08:25

Попробую объяснить к чему я стремлюсь.
Представим у нас есть игровой интерактивный объект с разными характеристиками. 2 вида характеристик: Глобальная и Локальная. Глобальная нужна для того, чтобы не повторялись переменные.
Пример. Представим что у нас используется дополнительные приставки к объектам, типа "старый" или "молодой". Например: "Старая сосна", "Старая ель", "Молодой дуб", "Молодая секвойя". На практике мы можем задать каждому классу массивы с набором тех или иных переменных, но мне кажется что это будет лишнее повторение, особенно с массивами. Для этого и есть один общий глобальный массив переменных, тип object. В случае со словами "старый" и "молодой", у них есть склонения что можно легко учитывать, просто придется вывести их в отдельные переменные. "старый" - корень "-стар-", окончание "-ый". Таким образом придется заготовить окончания, суффиксы, корни, приставки, но есть ли в этом смысл? В теории такая система будет занимать меньше памяти, но на практике на производительность может не повлиять. Просто если представить что у меня будут одни и те же значения переменных, то смысл мне их плодить? Можно ли придумать как-нибудь иначе, или все таки пофиг на такое повторение?
Для идентификации буду использовать ushort, он в два раза легче нежели uint, если есть смысл всего этого.
KoteKotovK
UNITрон
 
Сообщения: 267
Зарегистрирован: 20 июн 2014, 06:41

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение Anonymyx 12 ноя 2017, 12:33

deleted
Не понял походу...
Последний раз редактировалось Anonymyx 12 ноя 2017, 12:59, всего редактировалось 1 раз.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение Cr0c 12 ноя 2017, 12:57

Я бы сделал id префикса и суффикса, к которым изменение статов было бы привязано, а сами суффиксы-префиксы из словаря брались по id - никаких проблем с локализацией и расширением. Как в террарии, например.
А в описании можно int gender {0, 1, 2} и суффикс-префикс как string[3] = {"male", "female", "things"} чтобы пол правильно выбирать
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение KoteKotovK 13 ноя 2017, 10:56

Cr0c писал(а):Я бы сделал id префикса и суффикса, к которым изменение статов было бы привязано, а сами суффиксы-префиксы из словаря брались по id - никаких проблем с локализацией и расширением. Как в террарии, например.
А в описании можно int gender {0, 1, 2} и суффикс-префикс как string[3] = {"male", "female", "things"} чтобы пол правильно выбирать

Появился повод подучить русский язык =)
А в общем это интересно. Получается у меня будет несколько массивов для разных языков, а у объектов ID на разные позиции для каждого массива?
Синтаксис:
Используется csharp
    public string[][] Trees =
    {
        new string[]{"сосна", "пихта", "дуб", "секвойя"},
        new string[]{"pine", "fir", "oak", "sequoia"},
    };

    public string[][] AgeType =
    {
        new string[]{"молод", "стар"},
        new string[]{"young", "old"},
    };

    public string[][] InflectionalSuffixes = //Типа окончания
    {
        new string[]{"а", "я", "о", "е", "ь", "и", "ы", "а", "й"},
        new string[]{"s", "ed", "t", "ing", "en", "s", "en", "er", "est", "n't"}, //Там ещё есть другой тип суффиксов, но это прсото пример
    };

    public byte LanguageID = 0;

    public string TypeTree;

    public ushort IDTypeTree = 2;
    public ushort IDTypeAge = 1;
    public ushort[][] InflectionalSuffixesID =
    {
        new ushort[]{2, 8},
        new ushort[]{},
    };

    void Start()
    {
        TypeTree = Trees[LanguageID][IDTypeTree];

        string ending = "";
        for (int i = 0; i < InflectionalSuffixesID[LanguageID].Length; i++)
        {
            ending += InflectionalSuffixes[LanguageID][InflectionalSuffixesID[LanguageID][i]];
        }

        TypeTree = AgeType[LanguageID][IDTypeAge] + ending + " " + TypeTree;
        print(TypeTree);
    }
 

Как-то так. Код кривой, потому что лень, все будет немного иначе, если не сказать намного.
KoteKotovK
UNITрон
 
Сообщения: 267
Зарегистрирован: 20 июн 2014, 06:41

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение Cr0c 13 ноя 2017, 11:02

Я имел в виду, что слова целиком вставлять.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение KoteKotovK 13 ноя 2017, 11:15

Cr0c
Да, я это понял, просто написал немного другую систему.
KoteKotovK
UNITрон
 
Сообщения: 267
Зарегистрирован: 20 июн 2014, 06:41

Re: Гибкая/модульная система базы данных для RPG(не RPG)

Сообщение Cr0c 13 ноя 2017, 11:44

Синтаксис:
Используется csharp
public class BaseName {
 public string name;
 public byte gender; // 0 - male, 1 - female, 2 - none
}
public class AddName {
 public string[3] name = string["", "", ""]; // 0 - male, 1 - female, 2 - none
}
////////////
public Dictionary<int, BaseName> baseNames; // имя
public Dictionary<int, AddName> prefNames; // префиксы
public Dictionary<int, AddName> suffNames; // суффиксы
//////////
int i = Random.Range(0, baseNames.count);
int j = Random.Range(0, prefNames.count);
int k = Random.Range(0, suffNames.count);
string name = baseNames[i].name;
name = prefNames[j].name[baseNames[i].gender] + " " + name + " " + suffNames[k].name[baseNames[i].gender];
Debug.Log(name);
//////////
 
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Пред.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10