Структура стратегической карточной игры Django - PullRequest
2 голосов
/ 26 августа 2010

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

Я создал класс карты:

class Card(models.Model):
    name = models.CharField(max_length=255, verbose_name="Name")
    description = models.TextField(verbose_name="Description")
    victory = models.BooleanField("Victory Card")
    action = models.BooleanField("Action Card")
    reaction = models.BooleanField("Reaction Card")
    treasure = models.BooleanField("Treasure Card")
    attack = models.BooleanField("Attack Card")

    plus_action = models.IntegerField(max_length=2, verbose_name="Plus actions", null=True, blank=True)
    plus_card = models.IntegerField(max_length=2, verbose_name="Plus cards", null=True, blank=True)
    plus_buy = models.IntegerField(max_length=2, verbose_name="Plus buy", null=True, blank=True)
    plus_gold = models.IntegerField(max_length=2, verbose_name="Plus gold", null=True, blank=True)
    plus_victory = models.IntegerField(max_length=2, verbose_name="Plus victory", null=True, blank=True)

    cost = models.IntegerField(max_length=2, verbose_name="Cost")

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

Ребята, у вас есть предложения? Заранее спасибо!

С уважением,
Андри

Ответы [ 2 ]

0 голосов
/ 18 февраля 2011

Этот ответ слишком поздно, чтобы иметь какое-либо прямое использование, я думаю, но для всех, кто пытается сделать что-то подобное ...

Я считаю, что вы выполняли Dominion, и вы пытаетесь изобразить текстовые способности карт. Очевидно, что вы не хотите реализовывать механику каждой карты в основном движке, поэтому вам нужно хранить скрипты для эффектов карт и выполнять их вместо этого.

Вы можете сохранить код в TextField и сделать это:

Как мне выполнить строку, содержащую код Python в Python?

0 голосов
/ 26 августа 2010

Если вам нужно много сложных свойств для вашей модели и вам не нужен какой-либо поиск или фильтрация по их значениям, вы можете реализовать что-то вроде class CardPropetry(object): ... , которое будет содержать все необходимые значения.

Затем вы можете сериализовать / десериализовать ( django docs ) экземпляры этого класса в / из db.TextField

Обновлено:

Я не тестирую этот код, но что-тоаналогично должно работать

models.py:

import yaml
import pickle
from django.db import models

class CardProperties(onbject):
    pass

class Card(models.Model):

    properties = models.TextField()

    def set_properties(self, obj):
        self.properties = pickle.dumps(obj)

    def get_properties(self):
        return pickle.loads(self.properties)

views.py:

def view(request):

    card = Card.objects.get(pk=key)
    properties = card.get_properties()

    properties.god_mode = True

    card.set_properties(properties)

    card.save()
...