首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为一副纸牌赋值时遇到问题

为一副纸牌赋值时遇到问题
EN

Stack Overflow用户
提问于 2012-07-31 06:36:57
回答 3查看 924关注 0票数 1

(编号为2-10的卡片应分别从2-10取值。J、Q和K应该是10,A应该是1或11,这取决于手的值)。

如何将这些值分配给卡片组?此外,游戏需要是3轮。我做的方式只有一轮。我如何让游戏进行三次,同时跟踪玩家的输赢?

有没有人能解释一下我是如何用一种简单的方法做到这一点的?

EN

回答 3

Stack Overflow用户

发布于 2012-07-31 07:05:28

下面是一个完整的实现

看看hand.Score

代码语言:javascript
复制
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()
票数 1
EN

Stack Overflow用户

发布于 2012-07-31 06:52:03

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

代码语言:javascript
复制
card = ('D', 11, 10)  # card is queen of diamonds

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

代码语言:javascript
复制
class Card(object):
    def __init__(self, suit, number):
        self.suit = suit
        self.number = number
        self.value = (number if 2 <= number <= 9 else 10)

当然,你必须对王牌的价值进行特殊处理。

票数 0
EN

Stack Overflow用户

发布于 2012-07-31 06:56:24

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11730723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档