Python で基本的なカード ゲーム (ブラックジャック) を作成していhand
ます。2 回インスタンス化し、オブジェクトにそれぞれhand
名前を付けたいクラスがあります。これらの「手の」名前はラウンドごとに再利用 (または削除して再割り当て) されるため、グローバルに宣言しています。dHand
pHand
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 つの問題があります。
- 両手は常に同じカードを持ち、4 枚のカード (2 枚ではなく) を持っているように見えます。何らかの理由で と の両方が同じオブジェクトを指しているよう
pHand
です。dHand
- もう一度呼び出す
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)