Python-100-days 面向对象编程-简单想法学习写21点游戏(三)

简单想法学习写21点游戏(三)

再就需要制造两个牌手:一个是电脑(庄家),一个是玩家。庄家和玩家的主要区别是:庄家在起手两张牌超过17点便不能要牌;要等玩家停牌后才能要牌等等。玩家是否要牌可以凭感觉,电脑是否要牌还得给它制定规则。那就还需要写两个类:庄家类、玩家类,有点麻烦啊。
简单想法:就写一个类吧,用不同的功能方法来实现二者区别,思维还连贯一些。电脑点数小于17点是否要牌可以简单想法处理:把剩下的牌一一匹配给手牌(反正电脑算的快,记性好),计算点数,超过21点爆牌计次,可以得到个爆牌率,爆牌率大于多少就不要牌。

class Player:
    def __init__(self, name):
        self.name = name
        self.point = 0
        self.handcards = []
        self.hit = 1   #是否要牌标记

    def name(self):
        return self.name

    def _point(self):
        self.point = Judge(self.handcards).counting()   #用Judge类方法算点数
        return self.point

    def player_bust(self):
        if self.point > 21:  #玩家爆牌不能要牌
            self.hit = 0
        else:
            self.hit = 1
        return self.hit

    @staticmethod
    def get_point(handcards):  #要多次算点,简单点弄个静态
        point = Judge(handcards).counting()
        return point

    def computer_bust(self, cards, current, role2_point):
        _point = Judge(self.handcards).counting()
        _bust = 0
        if role2_point > 21:  #玩家爆牌就不要牌
            _chance = float(1)
        else:
            if _point < 17:
                for _ in cards[current:]:  #剩下的牌一一匹配算点计爆牌次数
                    _a = self.handcards[:]
                    _a.append(_)
                    if Judge(_a).counting() > 21:
                        _bust += 1
                    else:
                        continue
                _chance = float('%.2f' % (_bust / (len(cards) - current))) #爆牌率
            else:
                _chance = float(1)
        if _chance <= 0.53:
            self.hit = 1
        else:
            self.hit = 0
        return self.hit

    def stand(self): #停牌
        self.hit = 0
        return self.hit

几个主要的类写出来了,也不知道效果如何?感觉写类并不复杂,关键还是类之间的相互关系、互相调用、接口,有点伤脑筋。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值