1

(编号为 2-10 的牌的值应分别为 2-10。J、Q 和 K 应为 10,A 应为 1 或 11,具体取决于手牌的值)。

我如何分配这些值?此外,游戏需要进行 3 轮。我这样做的方式只有一轮。如何让游戏进行三遍,同时跟踪玩家的赢/输?

有人可以解释一下我如何以简单的方式做到这一点吗?

4

3 回答 3

1

这是一个完整的实现给你

看看hand.score

import random

class Card:
    def __init__(self,rank,suite):        
        self.rank = rank
        self.suite = suite
    def Rank(self):
        return "Ace Two Three Four Five Six Seven Eight Nine Ten Jack Queen King".split()[self.rank]
    def Suite(self):
        return "Hearts Spades Clubs Diamonds".split()[self.suite]
    def __str__(self):
        #print "Get Self:",type(self)
        #print "Dir:",dir(self)
        #return "OF"
        return self.Rank()+" of "+ self.Suite()


class Hand:
    def __init__(self):
        self.cards = []
    def Score(self):
        aces_ct = 0
        score = 0
        for c in self.cards:
            if c.rank == 0:
                aces_ct += 1
                score += 11
            if 0 < c.rank < 9:
                score += c.rank+1
            else:
                score += 10
        while score > 21 and aces_ct > 0:
            score -= 10
            aces_ct -= 1
        return score
    def add(self,card):
        self.cards.append(card)
    def Show(self,show_only=None):
        if not show_only:
            for k in self.cards:
                print "%s"%k
        else:
            if isinstance(show_only,int):
                print "%s"%self.cards[show_only]
            elif isinstance(show_only,(list,tuple)):
                for idx in show_only:
                    print "%s"%self.cards[idx]


class deck:
    def __init__(self):
        self.cards = []
        for i in range(4):
            for j in range(13):
                self.cards.append(Card(j,i))
        random.shuffle(self.cards)
    def shuffle(self):
        random.shuffle(self.cards)
    def pop(self):
        return self.cards.pop()

if __name__ == "__main__":
    d = deck()
    player_hand = Hand()
    dealer_hand = Hand()
    player_hand.add(d.pop())
    dealer_hand.add(d.pop())
    player_hand.add(d.pop())
    dealer_hand.add(d.pop())
    print "Player Score :",player_hand.Score()
    player_hand.Show()
    print "\n\nDealer Score :",dealer_hand.Score()
    dealer_hand.Show()
于 2012-07-30T23:05:27.777 回答
0

您可以将汽车表示为元组:一个表示西装的字符和一个表示值的数字。我还将向元组添加第三个值,它的二十一点值(例如,国王和王后都算作 10)。

card = ('D', 11, 10)  # card is queen of diamonds

您还可以创建自己的类来表示卡片。

class Card(object):
    def __init__(self, suit, number):
        self.suit = suit
        self.number = number
        self.value = (number if 2 <= number <= 9 else 10)

当然,您必须对 ace 的值进行特殊处理。

于 2012-07-30T22:52:02.560 回答
0

您可能应该动态计算总数。此外,您需要某种方式来存储每个玩家的钱。现在,没有办法知道钱的分配,因为你只有一个总数。

于 2012-07-30T22:56:24.313 回答