python扎金花

import random


# 创建牌面
def createPk():
    colors = ["♠", "♥", "♦", "♣"]
    pks = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
    pk_list = []
    card = []
    for color in colors:
        count = 2
        for pk in pks:
            pm = color + pk
            pk_list.append([pm, count])
            card.append(pm)
            count += 1
    print("*" * 25 + "已经洗牌完成" + "*" * 25)
    print(card)

    return pk_list


players = []


def fp(pk_list, players, num):
    print("*" * 25 + "生成玩家" + "*" * 25)
    for i in range(num):
        player = input(f"请输入玩家{i + 1}的姓名:")
        players.append(player)
    play_dic = {}
    for name in players:
        pm = random.sample(pk_list, 3)
        cards = []
        for card in pm:
            pk_list.remove(card)
            cards.append(card[0])
        play_dic[name] = pm
        print(f"为玩家{name}生成牌面:{cards}")
        # print(play_dic)
    return play_dic


def sort_list(datalist):
    # 冒泡法
    length = len(datalist)
    for i in range(length):
        # swapped = False
        for j in range(length - i - 1):
            if datalist[j][1] > datalist[j + 1][1]:
                datalist[j], datalist[j + 1] = datalist[j + 1], datalist[j]
            #     swapped = True
            # if not swapped:
            #     break
    return datalist


def pd_danzhang(p_cards, score):
    p_cards = sort_list(p_cards)
    level = [0.1, 1, 10]
    count = 0
    for card in p_cards:
        # print(card)
        score += card[1] * level[count]
        count += 1
    print(f"计算单牌的得分是:{score}")
    return score


def pd_duizi(p_cards, score):
    p_cards = sort_list(p_cards)
    card_val = [i[1] for i in p_cards]
    if len(set(card_val)) == 2:
        if card_val[0] == card_val[1]:
            score = (card_val[0] + card_val[1]) * 50 + card_val[2]
        else:
            score = (card_val[2] + card_val[1]) * 50 + card_val[1]
        print(f"计算对子的得分是:{score}")
    return score


def pd_shunzi(p_cards, score):
    p_cards = sort_list(p_cards)
    card_val = [i[1] for i in p_cards]
    a, b, c = card_val
    if b - a == 1 and c - b == 1:
        score *= 100
        print(f"计算顺子的得分是:{score}")
    return score


def pd_tonghua(p_cards, score):
    p_cards = sort_list(p_cards)
    color_val = {i[0][0] for i in p_cards}
    if len(color_val) == 1:
        score *= 1000
        print(f"计算同花的得分是:{score}")
    return score


def pd_tonghuashun(p_cards, score):
    card_val = [i[1] for i in p_cards]
    a, b, c = card_val
    color_val = {i[0][0] for i in p_cards}
    if len(color_val) == 1:
        if b - a == 1 and c - b == 1:
            score *= 0.1
            print(f"计算同花顺的得分是:{score}")
    return score


def pd_baozi(p_cards, score):
    card_val = {i[1] for i in p_cards}
    if len(card_val) == 1:
        score *= 100000
        print(f"计算豹子的得分是:{score}")
    return score


pd_jihe = [
    pd_danzhang,
    pd_duizi,
    pd_shunzi,
    pd_tonghua,
    pd_tonghuashun,
    pd_baozi
]
pk_list = createPk()
num = int(input("请输入参加游戏人数:").strip())
score = 0
play_dic = {}
play_dic = fp(pk_list, players, num)

playscores = []
for name, p_cards in play_dic.items():
    print("*" * 25 + f"计算{name}玩家结果:" + "*" * 25)
    score = 0
    for pd_val in pd_jihe:
        score = pd_val(p_cards, score)
    playscores.append([name, score, p_cards])
winner = sort_list(playscores)[-1]
print(f"最后获得胜利的是{winner[0]},得分是{winner[1]},牌型是{[i[0] for i in winner[2]]}!")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值