Форум сайта python.su
Пишу игру. Архитектура проекта такова. Есть какой-то основной герой на выбор. У каждого героя есть своя уникальная книга юнитов и заклинаний. Так же есть одна общая для всех книга. В каждой книге допустим по 20 уникальных карт (либо юнитов либо заклинаний). В начале игры игрок может составить себе уникальный отряд из 20 юнитов либо заклинаний. Выбрать юниты или заклинания из той или иной книги.
Пока кажется что можно все описать имея класс Карты (юнит либо заклинания) и Книги которая содержит в себе простой список карт. Проблема в том, что не все карты могут быть изначально открыты. То еть у одного игрока эти юниты уже развиты и доступны для сборки в отряд у другого еще нет. Также каждой карты может быть по три экземпляра, соответсвенно у одного игрока может быть в коллекции все три экземпляра этой карты а у другого не одного. Как поступать в этом случае? Создавать для каждого игрока отдельные экземпляры Книг и Карт или можно как-то оставить Книги и Карты как библиотеки, а для игрока создавать модель его конкретного набора? Не могу пока придумать как сохранить единственные экземпляры книг и карт и не плодить тысячи одинаковых инстансов, у которых будет отличаться только foreignkey на юзера и их доступное количество дляя конкретного игрока, тогда как все остальные свойства будут идентичны.
Пока модель условно такая:
class Hero (model:Model): eptitude = model.IntegerField () class Book (model.Model): hero = model.ManyToManyField (Hero) class Card (model.Model): attack = model.IntegerField () health = model.IntegerField () book = model.ForeignKey (Book)
class Collection (model.Model): cards = model.ManyToManyField (Card)
Отредактировано in (Авг. 3, 2014 22:21:48)
Офлайн
Решил поступить следующим образом. Оставляю Карты и Книги как есть (библиотеками возможных юнитов и заклинаний). При инициализации создаю коллекцию карт игрока. Вместо карт она хранит список UserCard которвый в свою очередь хранит ссылку на оригинальную карту (свою модель) а также те возможные свойства, которые касаются отдельного игрока (количество одинаковых карт, доступна ли карта сразу или ее необходимо крафтить и.т.п) Также добавил класс маску, которая описывет каким образом конфигурирется коллекция при открытии новых книг. С помощью маски в коллекцию добавляются UserCard на все карты книги, но в свойствах описываются уже их конректные настройки.
Офлайн
доступна ли карта сразу или ее необходимо крафтитьЗачем это хранить сразу в коллекции игрока?
Офлайн
scopichol
“доступна ли карта сразу или ее необходимо крафтить”
Зачем это хранить сразу в коллекции игрока?
Отредактировано in (Авг. 5, 2014 03:04:37)
Офлайн
inИ что? Это проблема? У конкретного игрока есть конкретная курица - всё естественно.
получится что для 10 000 игроков придется создать 10 000 одинаковых куриц.
Офлайн
Shaman
И что? Это проблема? У конкретного игрока есть конкретная курица - всё естественно.
Офлайн
inХорошо проектируйте систему и потребность в модификации структуры БД будет возникать редко. Само обновление БД распространено повсеместно и обычно проходит без эксцессов.
Да если потребуется внести изменения в характеристики карты, придется менять параментры не в одной карте а в 10 тысячах.
Офлайн
И это всего лишь один единственный экземпляр для всех без исключения игроков. Если же запихивать в нее свойства amount (количество доступных экземпляров для отдельного игрока), и флаг о том скрафтил ее игрок или еше не успел то получится что для 10 000 игроков придется создать 10 000 одинаковых куриц.
Офлайн