2011-12-14 19 views
4

我打算做一个纸牌游戏,目前我正在开始它的工作。我感到困惑的是,他们根据自己的级别对牌进行排序,然后很适合,并且很多时候如何减少重复。目前我可能会为组织卡片做一个循环,然后对每种可能性都有52种不同的选择,但是我想知道他们是否是一种更简单的方法来完成这个任务,还有很多其他的重复任务。谢谢:d我把下面的代码:排序一手牌,按照排名和适合在python

from random import shuffle 

class deckOfCards: 
    def __init__(self): 
    self.rank = ['2','3','4','5','6','7','8','9','T','J','Q','K','A'] 
    self.suit = ['C', 'S', 'H', 'D'] 
    self.deck = [r+s for r in self.rank for s in self.suit] 
    shuffle(self.deck) 

    def setValue(self, deck): 
    cnt = 1 
    self.value = {} 
    for i in self.deck: 
     self.value[i] = cnt 
     cnt += 1 

class Deal: 
    def __init__(self, deck, position): 
     self.hand = deck[position::4] #divides the deck into 4 hands 
     hand = self.hand 
    def value(self, key): # Gives each card that the player has a value 
     newHand = {} 
     for i in self.hand: 
     if i in key: 
      newHand[i] = key[i] 
     return newHand 

deck = deckOfCards() 

player1 = Deal(deck.deck, 0) ####################################### 
player2 = Deal(deck.deck, 1) # Example of repetition that I wanted # 
player3 = Deal(deck.deck, 2) # to get rid of if possible   # 
player4 = Deal(deck.deck, 3) ####################################### 

编辑:我认为这非常有效的排序卡,但我仍然对如何消除一些重复的困惑。感谢所有帮助:d

def sortHand(player): 
hand = player.hand 
for i in hand: 
    for i in hand: 
    index = player1.hand.index(i) 
    if index != 12: 
     if deck.value[i] > deck.value[hand[index+1]]: 
     hand.insert(index+1, hand.pop(index)) 

回答

5

我可能简化这个有点:

from random import shuffle 

class Hand(list): 
    pass 

class Deck(object): 

    rank = '23456789TJQKA' 
    suit = 'CSHD' 

    def deal(self, n): 
    deck = [r+s for r in Deck.rank for s in Deck.suit] 
    shuffle(deck) 
    return [Hand(sorted(deck[i::n], key=Deck.cmpkey)) for i in xrange(n)] 

    @staticmethod 
    def cmpkey(card): 
    return Deck.rank.index(card[0]), Deck.suit.index(card[1]) 

print Deck().deal(4) 

通过这种安排,deal()的结果是四手的名单。每只手都按等级排序然后套装。

(我没有完全理解“价值”的逻辑,所以我离开了它从我的例子。)

+0

的值是什么每张卡是值得的,在比赛中我做AA 3C的价值低于5D。最终,当我完成比赛时,一名球员将打一张牌,然后下一名球员必须打一张价值更高(具有更高价值)的牌。感谢您的回应,非常有帮助:D – GnarGnar 2011-12-14 23:18:05