私はこれに非常に慣れていないので、問題を解決する方法がわかりません。ディーラーがいて、最初に何人のプレイヤーがプレイするかを尋ねます。次に、各プレイヤーとディーラーはデッキから 2 枚のカードを割り当てられます。問題は、たとえば、3 人のプレイヤーがいる場合、コードは 1 人のプレイヤーの前の 2 枚のカードを次のプレイヤーにもリストすることです。
5 に答える
おそらく、プレーヤーごとのリストが必要です。辞書はおそらく次のような仕事をします:
hands = {}
...
for player in players:
hand = hands[player] = []
for j in range(2):
c = deck.pop()
hand.append(c)
for player in players:
print('{}: {}'.format(player, ', '.join(hands[player])))
import random
class Cards(object):
suit = ['H', 'D', 'S', 'C']
value = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
def __init__(self):
self.deck = [v+s for s in Cards.suit for v in Cards.value]
def shuffle(self):
random.shuffle(self.deck)
def deal(self, n):
res, self.deck = self.deck[:n], self.deck[n:]
return res
show_hand = ' '.join
def main():
num_players = 3
deck = Cards()
deck.shuffle()
dealer = deck.deal(2)
players = [deck.deal(2) for i in xrange(num_players)]
print('Hands:')
print(' Dealer: {}'.format(show_hand(dealer)))
for i in xrange(num_players):
print('Player {}: {}'.format(i+1, show_hand(players[i])))
if __name__=="__main__":
main()
結果は
Hands:
Dealer: JH 9H
Player 1: AS 2D
Player 2: QD 8H
Player 3: 10H 6D
コードの問題 (現在は削除されています) は、各プレイヤーの手札を同じリストに追加していたことです。簡単な修正は、ループの先頭で変数をリセットすることです。
ゲームのプレイ中にすべてのハンドを追跡する必要がある可能性が高いため、ディーラーのハンド用の 1 つのサブリストと、各プレイヤー用の別のサブリストを含む別のリストのリストを作成することは理にかなっています。これらは、必要に応じてリストとインデックスのリストに格納できます。
プレーヤーを呼び出します: プレーヤー 1、プレーヤー 2 など、実質的に 1 から番号を付けます。そのため、ディーラーのハンドをインデックス 0 に保存し、プレーヤー 1 のカードをハンド [プレーヤー + 1] に入れることができます。すぐ。サンプルコードは次のとおりです。
#### testing scaffold #######################
import random
class Cards(object):
def __init__(self):
deck = self._deck = []
for rank in "A23456789JQK":
for suit in "CDHS":
deck.append(rank+suit)
def deck(self):
return self._deck
def hand_display(self, player_num):
return ' '.join(hands[player_num])
cards = Cards()
players = 3
##########################################
deck = cards.deck()
random.shuffle(deck)
hands = [[]] # for dealer's hand
hands.extend([] for player in range(players)) # for each player's hand
DEALER = 0
CARDS_PER_HAND = 2
print "Hands:"
for i in xrange (CARDS_PER_HAND):
cd = deck.pop()
hands[DEALER].append(cd)
print "Dealer: " + cards.hand_display(DEALER)
for player_num in [player+1 for player in range(players)]:
for j in xrange(CARDS_PER_HAND):
c = deck.pop()
hands[player_num].append(c)
print "Player " + str(player_num) + ":"
print "Cards: " + cards.hand_display(player_num)
出力:
Hands:
Dealer: 6H 5H
Player 1:
Cards: 7H 3H
Player 2:
Cards: 4D JD
Player 3:
Cards: 3S 4S
各プレイヤーの手札をリセットする必要があります。したがって、2 番目のループは次のようになります。
for i in range(players):
hand = []
for j in range(2):
c = deck.pop()
hand.append(c)
print "Player " + str(i+1) + ":"
print "Cards: " + cards.hand_display(cards)
それ以外の場合hand
は、引き続き追加されます。
あなたの手は単一の配列であるため、新しいカードを同じ配列に追加するだけです。手を印刷するたびに、同じ配列を印刷しています。最初は2枚のカードのみで、次に4枚、次に6枚です。
あなたがすべきことは、辞書または配列の配列を使用することです。