2010-08-26 3 views
2

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

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

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

Какие примеры «другое способности "? Включает ли это данные, которые необходимо сохранить или что происходит на основе имеющихся у вас данных? –

+0

@Nathan Long Ну, я надеялся, что первый комментарий будет для меня чем-то вроде: D Итак, я думаю, что мы даже;) – AndriJan

ответ

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

Я никогда не делал ничего подобного, но как это работает? Не могли бы вы привести мне пример? – AndriJan

+0

Я обновил свой пост, этот код должен продемонстрировать основную идею. Вы также можете хранить свойства в dict и сохранять их в json или yaml-форматах. – Tiendil

0

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

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

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

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

Смежные вопросы