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

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

  • 扑克牌制造好了,下一步就想要做一个裁判出来,我觉得起码应该能计算手牌的点数,能裁判输赢。玩家知道规则可以自行计算手牌点数,但是电脑还是要靠代码才能计算,输赢结果也由电脑来判断。
  • 有点难啊,主要在于“A”的计算上。试想过以总数不大于21的最大值来实现对A为1还是11的判断,但是有多个A时有点难办。以我这可怜的基础知识,实在有点捉襟见肘。
  • 简单想法来做:反正不管有多少个A,最多只能有一个为11点,其他都只能是1点。那就先排序,把A统统放到最后,只要不是最后一个A,全部计为1点。反正程序是由上到下一句一句执行的,轮到最后一个A时,前面点数和大于10,A就计为1;小于等于10,A就计为11. 圆满解决问题,难道这就是传说中的“算法”?
  • 先写写看吧:
 class Hand:
    def __init__(self, handcards):
        self.handcards = handcards
        self.point = 0

    @staticmethod     #这又是个装饰器,好像是静态方法
    def get_values(_):   #取得点数
        values = _[1:]
        return values

    def arrange(self):  #排序,把A统统放到最后去
        for _ in self.handcards:
            value = self.get_values(_)

            if value == 'A':
                self.handcards.remove(_)
                self.handcards.append(_)
        return self.handcards

    def counting(self):
        self.arrange()
        for _ in self.handcards:
            value = self.get_values(_)
            if value != 'A':
                if value == 'J':
                    self.point += 10
                elif value == 'Q':
                    self.point += 10
                elif value == 'K':
                    self.point += 10
                else:
                    self.point += int(value)
            else:
                if self.handcards.index(_) < len(self.handcards) - 1:
                    self.point += 1    #只要不是最后一个A,算为1
                else:
                    if self.point <= 10:
                        self.point += 11
                    else:
                        self.point += 1
        return self.point 
  • 好像还没有判断输赢的功能,继续添加上去。提醒自己:要留好接口,这是判断两个人的输赢。
class Judge:
    def __init__(self, handcards):
        self.handcards = handcards
        self.point = 0

    @staticmethod
    def get_values(_):
        values = _[1:]
        return values

    def arrange(self):
        for _ in self.handcards:
            value = self.get_values(_)

            if value == 'A':
                self.handcards.remove(_)
                self.handcards.append(_)
        return self.handcards

    def counting(self):
        self.arrange()
        for _ in self.handcards:
            value = self.get_values(_)
            if value != 'A':
                if value == 'J':
                    self.point += 10
                elif value == 'Q':
                    self.point += 10
                elif value == 'K':
                    self.point += 10
                else:
                    self.point += int(value)
            else:
                if self.handcards.index(_) < len(self.handcards) - 1:
                    self.point += 1
                else:
                    if self.point <= 10:
                        self.point += 11
                    else:
                        self.point += 1
        return self.point

    @staticmethod
    def judgement(role1_point, role2_point):
        if role1_point <= 21 < role2_point:
            var = '张老三赢了!'
            score = np.array([1, 0])
        elif role1_point > 21 >= role2_point:
            var = '你赢了!'
            score = np.array([0, 1])
        elif role1_point > role2_point:
            var = '张老三赢了!'
            score = np.array([1, 0])
        elif role1_point < role2_point:
            var = '你赢了!'
            score = np.array([0, 1])
        elif role1_point > 21 and role2_point > 21:
            var = '平局!'
            score = np.array([0, 0])
        else:
            var = '平局!'
            score = np.array([0, 0])

        return var, score

  • 感觉最难的一段写出来了,头发又白了好几根,还是很开心的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值