用python编写炸金花游戏程序

用python编写炸金花游戏程序

自己写一个程序,实现发牌、比大小判断输赢。

游戏规则:

一付扑克牌,去掉大小王,每个玩家发3张牌,最后比大小,看谁赢。

有以下几种牌:

豹子:三张一样的牌,如3张6.

顺金:又称同花顺,即3张同样花色的顺子, 如红桃 5、6、7

顺子:又称拖拉机,花色不同,但是顺子,如红桃5、方片6、黑桃7,组成的顺子

对子:2张牌一样

单张:单张最大的是A

这几种牌的大小顺序为, 豹子>顺金>顺子>对子>单张

需程序实现的点:
  1. 先生成一付完整的扑克牌

  2. 给5个玩家随机发牌

  3. 统一开牌,比大小,输出赢家是谁

import random


class ZhaJinHua:
    def __init__(self):
        self.poke = self.create_poke()
        self.card_sore = {'J': 11, 'Q': 12, 'K': 13, 'A': 14, '对子': 20, '顺子': 200, '顺金': 800, '豹子': 10000}

    def create_poke(self):
        """创建扑克"""
        poke = []
        flower_types = ['♣', '♦', '♥', '♠']
        card_values = [str(i) for i in range(2, 11)] + ['J', 'Q', 'K', 'A']
        for card_value in card_values:
            for flower_type in flower_types:
                poke.append(flower_type + card_value)
        return poke

    def distribute_poke(self, poke, player=5):
        """发牌"""
        result = []
        for i in range(player):
            one_group = random.sample(poke, 3)
            result.append(one_group)
            for item in one_group:
                poke.remove(item)
        return result

    def card_sort(self, cards):
        """排序"""
        card_score = []
        for card in cards:
            if card.isalpha():
                card_score.append((card, self.card_sore[card]))
            else:
                card_score.append((card, int(card)))
        res = sorted(card_score, key=lambda x: x[1])
        return res

    def calculate_score(self, cards):
        """计算分数"""
        card_values = [item[1:] for item in cards]
        flower_types = [item[0] for item in cards]
        card_score_list = self.card_sort(card_values)
        if card_score_list[0] == card_score_list[1] == card_score_list[2]:
            score = card_score_list[0][1] * self.card_sore['豹子']
        elif card_score_list[0] == card_score_list[1] or card_score_list[1] == card_score_list[2]:
            score = card_score_list[1][1] * self.card_sore['对子']
        elif card_score_list[1][1] - 1 == card_score_list[0][1] and card_score_list[1][1] + 1 == card_score_list[2][1]:
            if flower_types[0] == flower_types[1] == flower_types[2]:
                score = card_score_list[2][1] * self.card_sore['顺金']
            else:
                score = card_score_list[2][1] * self.card_sore['顺子']
        else:
            score = sum(item[1] for item in card_score_list)
        return score

    def run(self):
        result = self.distribute_poke(self.poke)
        score_list = []
        for i, v in enumerate(result, start=1):
            score = self.calculate_score(v)
            print(f'玩家{i}', v, score)
            score_list.append(score)
        player_num = score_list.index(max(score_list)) + 1
        print(f"玩家{player_num}获得胜利")


if __name__ == '__main__':
    zjh = ZhaJinHua()
    zjh.run()

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值