Problem z porównaniem atrybutów danej instancji kilku klas

0

Czesc, chciałem napisac gre na wzór gry karcianej "wojna". Mam kilka klas oraz tworzę talie kart, którą tasuje, a następnie rozdaje 10 losowych zakrytych kart graczom. Nie wiem jak teraz mam porównać pierwszą kartę gracza1 z pierwszą kartą gracza2. Np. pierwsza karta gracza1 jest większa od karty gracza2 to gracz1 otrzymuje 1pkt z 10 możliwych, bo jest rozdanych po 10 kart. Chciałbym to zrobić obiektowo, ale nie wiem jak.
Z góry dziękuje za jakąkolwiek pomoc.

class Card(object):
    """ Karta do gry. """
    RANKS = ["A", "2", "3", "4", "5", "6", "7",
             "8", "9", "10", "J", "Q", "K"]
    SUITS = ["c", "d", "h", "s"]

    def __init__(self, rank, suit, face_up=True):
        self.rank = rank 
        self.suit = suit
        self.is_face_up = face_up

    def __str__(self):
        if self.is_face_up:
            rep = self.rank + self.suit
        else:
            rep = "XX"
        return rep

    def flip(self):
        self.is_face_up = not self.is_face_up

class Hand(Card):
    """ Ręka - karty do gry w ręku gracza. """
    def __init__(self):
        self.cards = []

    def __str__(self):
        if self.cards:
           rep = ""
           for card in self.cards:
               rep += str(card) + "\t"
        else:
            rep = "<pusta>"
        return rep

    def clear(self):
        self.cards = []

    def add(self, card):
        self.cards.append(card)


    def give(self, card, other_hand):
        self.cards.remove(card)
        other_hand.add(card)

class Deck(Hand):
    """ Talia kart do gry. """
    def populate(self):
        for suit in Card.SUITS:
            for rank in Card.RANKS: 
                self.add(Card(rank, suit))

    def shuffle(self):
        import random
        random.shuffle(self.cards)

    def deal(self, hands, per_hand = 1):
        for rounds in range(per_hand):
            for hand in hands:
                if self.cards:
                    top_card = self.cards[0]
                    top_card.flip()
                    self.give(top_card, hand)
                else:
                    print("Nie mogę dalej rozdawać. Zabrakło kart!")

deck1 = Deck()
print("Utworzyłem nową talię.")
print("Talia:")
print(deck1)
deck1.populate()
print(deck1)
print()
deck1.shuffle()
print(deck1)
my_hand=Hand()
your_hand=Hand()
hands=[my_hand, your_hand]
deck1.deal(hands, per_hand=10)
print()
print(my_hand)
print()
print(your_hand)
print()
print(deck1)
0

Jak Chcesz porównywać karty, to musisz mieć __eq__, __gt__ i __lt__ jako metody Card, tej klasy nie widać, to przydało by się też wybieranie kart z Hand.

1

mógłbyś to prosze zaimplementować? bardzo by mi to pomogło w zrozumieniu tego

Tutaj:
https://rszalski.github.io/magicmethods/
Są magic methods, spróbuj, na zachetę __eq__:

class Card(object):
    """ Karta do gry. """
    RANKS = ["A", "2", "3", "4", "5", "6", "7",
             "8", "9", "10", "J", "Q", "K"]
    SUITS = ["c", "d", "h", "s"]

    def __init__(self, rank, suit, face_up=True):
        self.rank = rank 
        self.suit = suit
        self.is_face_up = face_up

    def __str__(self):
        if self.is_face_up:
            rep = self.rank + self.suit
        else:
            rep = "XX"
        return rep
    
    def __eq__(self, other):
        return self.rank == other.rank and self.suit == other.suit

    def flip(self):
        self.is_face_up = not self.is_face_up
0

Potrzebujesz jakiejś get_card na klasie Hand, będzie ona zdejmować kartę z self.card, jak puste, to koniec.

1 użytkowników online, w tym zalogowanych: 0, gości: 1