2010-08-26 23 views
2

Je fais un jeu de cartes à base de texte multijoueur pour Django où chaque carte permet à chaque joueur de faire des actions standard (Dessiner plus de cartes, obtenir de l'or, obtenir des points, etc.) et peut-être d'autres capacités (comme détruire une carte d'une main adverse, donner à un adversaire moins de points et beaucoup plus).Structure de jeu de cartes de stratégie Django

J'ai créé une classe de la carte:

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") 

Mon problème est que je ne sais pas comment représenter les autres capacités. J'ai pensé aux propriétés mais je ne suis pas sûr que ce soit le chemin à parcourir ou comment s'y prendre.

Avez-vous des suggestions? Merci d'avance!

Cordialement,
Andri

+0

Aww, j'espérais que vous vouliez dire un jeu de cartes de stratégie À PROPOS DU Django ... :) –

+0

Quels sont quelques exemples de « autres capacités "? Cela implique-t-il des données qui doivent être conservées ou des choses qui se produisent en fonction des données dont vous disposez déjà? –

+0

@Nathan Long Eh bien, j'espérais que le premier commentaire serait quelque chose d'une aide pour moi: D Donc je suppose que nous sommes même;) – AndriJan

Répondre

0

Si vous voulez beaucoup de propriétés complexes pour votre modèle et ne pas besoin de tout type de recherche ou filtration par leurs valeurs, vous pouvez mettre en œuvre quelque chose comme class CardPropetry(object): ... qui contiendra toutes les valeurs nécessaires.

Ensuite, vous pouvez linéariser/désérialiser (django docs) instances de cette classe dans/de db.TextField

Mis à jour:

Je ne testons pas ce code, mais quelque chose de similaire devrait fonctionner

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() 
+0

Je n'ai jamais rien fait de tel, mais comment cela fonctionnerait-il? Pourriez-vous peut-être me donner un exemple? – AndriJan

+0

J'ai mis à jour mon post, ce code devrait démontrer l'idée principale. Vous pouvez également stocker des propriétés dans dict et les enregistrer au format json ou yaml. – Tiendil

0

Cette réponse est beaucoup trop tard pour être d'une quelconque utilité directe, je suppose, mais pour quelqu'un d'autre d'essayer de faire quelque chose de similaire ...

Je vous faisiez une regardez-mise en œuvre du Dominion, et vous êtes essayer de représenter les capacités de texte des cartes. Évidemment, vous ne voulez pas implémenter les mécanismes de chaque carte dans le moteur principal, vous devez donc stocker des scripts pour les effets de cartes et les exécuter à la place.

Vous pouvez stocker le code dans un champ de texte et faire:

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