0

Python で基本的なカード ゲーム (ブラックジャック) を作成していhandます。2 回インスタンス化し、オブジェクトにそれぞれhand名前を付けたいクラスがあります。これらの「手の」名前はラウンドごとに再利用 (または削除して再割り当て) されるため、グローバルに宣言しています。dHandpHand

dHand = Hand()
pHand = Hand()

新しいラウンドが始まると、これらの手札には次のようなカードが置かれます。

def deal():
    global dHand, pHand

    dHand = Hand() #assigning a new object to forget about old cards
    pHand = Hand()

    dHand.add_card(deck.deal_card())
    dHand.add_card(deck.deal_card())
    pHand.add_card(deck.deal_card())
    pHand.add_card(deck.deal_card())

2 つの問題があります。

  1. 両手は常に同じカードを持ち、4 枚のカード (2 枚ではなく) を持っているように見えます。何らかの理由で と の両方が同じオブジェクトを指しているようpHandです。dHand
  2. もう一度呼び出すdeal()と、古いカードは失われadd_card()ません。新しいオブジェクトではなく、古いオブジェクトに追加されるだけです。

任意のポインタ(しゃれを許して)いただければ幸いです。

編集: Hand クラスは次のように定義されます。

class Hand:
    def __init__(self, cards = []):
        # create Hand object
        self.cards = cards
        self.value = 0       

    def __str__(self):
        # return a string representation of a hand
        s = "Hand contains: "
        for card in self.cards:
            s += str(card) + " "
        return s

    def add_card(self, card):
        # add a card object to a hand
        self.cards.append(card)
4

0 に答える 0