我正在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")
我的问题是我不知道如何代表其他能力。我已经考虑了属性,但我不确定这是不是要走的路或如何去做。
你们有什么建议吗?提前谢谢!
的问候,
安德里
答案 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中并执行以下操作: