Soy extremadamente nuevo en la programación orientada a objetos, y estoy tratando de comenzar a aprender en Python haciendo un juego de cartas simple (¡como parece ser tradicional!). He hecho el siguiente ejemplo, que funciona bien, y me enseña a hacer varias instancias de la PlayingCard()
clase para crear una instancia de la Deck()
clase:
class PlayingCard(object):
def __init__(self, suit, val):
self.suit = suit
self.value = val
def print_card(self):
print("{} of {}".format(self.value, self.suit))
class Deck(object):
def __init__(self):
self.playingcards = []
self.build()
def build(self):
for s in ["Spades", "Clubs", "Diamonds", "Hearts"]:
for v in range(1,14):
self.playingcards.append(PlayingCard(s,v))
deck = Deck()
Quiero hacer algo ahora con cartas más complejas, no solo un mazo estándar de 52 (que tiene valores que se incrementan muy bien). El mazo que tengo en mente es el juego de cartas Monopoly:
Hay 3 tipos fundamentales de tarjetas: tarjetas de ACCIÓN, TARJETAS DE PROPIEDAD y tarjetas de DINERO. Las tarjetas de acción realizan diferentes acciones, las tarjetas de propiedad pertenecen a diferentes conjuntos de colores y las tarjetas de dinero pueden tener diferentes valores. Además, las tarjetas de propiedad pueden ser "comodines" y pueden usarse como parte de uno de los dos conjuntos. Finalmente, cada tarjeta también tiene un valor monetario equivalente (indicado en la esquina superior de cada tarjeta). En las tarjetas de acción de alquiler, la tarjeta solo puede aplicarse a la propiedad de color indicada en la tarjeta.
Mi pregunta es, en general, cómo manejar una situación como esta, y ¿cuál sería una buena manera de incluir estas diferentes tarjetas en un programa de Python basado en clases? ¿Debo mantener mi PlayingCard()
clase individual y solo tener muchas entradas, como PlayingCard(type="PROPERTY", value="3M")
. ¿O sería mejor crear clases separadas tales como ActionPlayingCard()
, PropertyPlayingCard()
, etc.? ¿O hay un mejor camino? Como digo, estoy al comienzo de mi aprendizaje aquí, y cómo organizar este tipo de situaciones en términos del diseño de nivel superior.
Muchas gracias.