Django策略卡游戏结构

时间:2010-08-26 13:34:59

标签: django data-structures playing-cards

我正在Django做一个多人游戏基于文本的纸牌游戏,每张牌允许每个玩家做出一些标准动作(抽出更多牌,获得金牌,获得积分等)以及其他一些能力(如从对手手中摧毁一张牌,给对手减去分数等等。

我创建了一个Card类:

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 :(得分:0)

如果您想为模型提供大量复杂属性,并且不需要按其值进行任何类型的搜索或过滤,则可以实现类似 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()

答案 1 :(得分:0)

这个答案为时已晚,无法直接使用我猜,但对于其他任何试图做类似事情的人来说......

我认为您正在实施Dominion,并且您正在尝试表示卡片的文本功能。显然你不想在主引擎中实现每张卡的机制,因此你需要的是存储卡片效果的脚本并执行它们。

您可以将代码存储在TextField中并执行以下操作:

How do I execute a string containing Python code in Python?