Браузерная стратегическая игра в Django / GAE.Модельные предложения? - PullRequest
3 голосов
/ 28 октября 2010

Я создаю в Django игру на основе текста и поворотов на Google App Engine с патчем app-engine-patch. Упрощенная концепция заключается в том, что каждый игрок может построить несколько разных юнитов и зданий, чтобы улучшить свою базу и сражаться с другими игроками за очки.

Мой вопрос касается проектирования моделей Джанго, мне кажется, что здания и подразделения, которые будут иметь различную силу атаки, срок службы и т. Д., Должны быть своими собственными моделями, например:

class Unit(db.Model):
    name = db.StringProperty()
    type = db.ReferenceProperty(UnitType)
    targets = KeyListProperty(UnitType)
    attack = db.IntegerProperty()
    life = db.IntegerProperty()
    price = db.IntegerProperty()

Тогда моя проблема заключается в том, как проще всего установить количество игроков для конкретного юнита / здания. Например, игрок должен иметь возможность купить, скажем, 15 самолетов.

Тогда я мог бы просто установить «самолет» как IntegerProperty в модели игрока и использовать имя отряда в качестве идентификатора при получении силы атаки и срока службы самолета. Это, однако, не было бы очень динамичным дизайном, так как модель игрока еще не знает, присутствует ли на самом деле «самолет». Я бы хотел, чтобы модель игрока каким-то образом отражала существующие модели юнитов / зданий.

Это моя первая попытка создать сетевую игру, так что я могу быть совершенно не в курсе, есть ли у кого-нибудь мнение по этому поводу? Есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 28 октября 2010

Как насчет наследования от класса Unit?

class Airplane(Unit):
    owner = db.ReferenceProperty(User)

Таким образом, ваш класс User автоматически получит коллекцию plane_set (ну, на самом деле, запрос) согласно документации

Редактировать

В качестве альтернативы вы можете реализовать класс Airplane следующим образом:

class Airplane(db.Model):
    unit = ReferenceProperty(Unit)
    amount = IntegerProperty()
    user = db.ReferenceProperty(User)
...