2016-04-13 3 views
0

こんにちは、単純なテキサスホールデムのシミュレーターで作業しています。私はPythonの初心者で、ここでのクラスの使用について助言を得ることを望んでいました。できるだけ効率的に使用しているような気がします。特に、選手カードを扱うときは特にそうです。具体的には、def deal(self, n_players)は、playercard1とplayercard2を使用する代わりに簡略化して、「デッキ」からアイテムを削除することができますか?ここでは、コードは次のとおりです。Pythonクラスの例texas holdemの効率

from random import shuffle 

class TexasHoldem: 
    #create deck 
    def __init__(self): 
    values = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King'] 
    suites = ['Heart', 'Spade', 'Club', 'Diamond'] 
    self.deck = [j + " " + i for j in values for i in suites] 

    #shuffle deck 
    def shuffle(self): 
     shuffle(self.deck) 

    #deal for players 
    def deal(self, n_players): 
     count = 0 
     #card 1 list (will be shuffled, delt 'around the table' as if a real stack) 
     playercard1 = list() 
     while count < n_players: 
      card1 = self.deck[count] 
      playercard1.append(card1) 
      count += 1 

     #remove cards from deck that were delt 
     for i in playercard1: 
      self.deck.remove(i) 

     count = 0 
     #card 2 list 
     playercard2 = list() 
     while count < n_players: 
      card2 = self.deck[count] 
      playercard2.append(card2) 
      count += 1 

     #remove cards from deck delt for 2nd card 
     for i in playercard2: 
      self.deck.remove(i) 

     #merge cards of playercard1 and playercard2 into set  
     self.playerhand = zip(playercard1, playercard2) 

    #define the flop  
    def flop(self): 
     #burn a card 
     del self.deck[0] 
     #lay down three 
     self.flopcards = self.deck[0:3] 
     #delete flop from deck 
     for i in self.flopcards: 
      self.deck.remove(i) 

    #same as flop for turn and river   
    def turn(self): 
     del self.deck[0] 
     self.turncard = self.deck[0:1] 

     for i in self.turncard: 
      self.deck.remove(i) 

    def river(self): 
     del self.deck[0] 
     self.rivercard = self.deck[0:1] 

     for i in self.rivercard: 
      self.deck.remove(i) 

#create instance of Cards class    
c = TexasHoldem() 
#shuffle for this instance 
c.shuffle() 

#deal for n players 
c.deal(9) 

print 'Player Hands:' 
for i in c.playerhand: 
    print i 

#flop 
c.flop() 
print 'Flop:' 
print c.flopcards 

#turn 
c.turn() 
print 'Turn:' 
print c.turncard 

#river 
print 'River:' 
c.river() 
print c.rivercard 
+3

私はあなたの代わりにhttp://codereview.stackexchange.com/をしたいと思います。これは、Stack Overflowのトピックではないようです。 – LawfulEvil

+0

ありがとう、私はそこに投稿します! – jason

答えて

1

いくつかの簡単なコメント:

  • flopturnriverはすべて、ほぼ同じことをやっています。デッキの上部からカードのリストを返す方法があります
  • この方法では、カードを最初に取り出してから取り除くのではなく、同時にlist.popを呼び出すことができます。それで間違った金額を間違って削除することは決してありません。
  • さらに安全になるために、ゲームのさまざまな状態を表す異なるクラスを持つことができます。それはあなたのメソッドを呼んでいる人が誰かを間違った順序で呼び出さないようにします。 ShuffledDeckDealtDeckなどがあり、各メソッドは次のクラスのインスタンスを返します。複数の戻り値を利用すると、コードは次のようになります。

    deck = new Deck() # fresh deck 
    deck = deck.shuffle() # a shuffled deck 
    deck, hand = deck.deal() # a deck without dealt cards