python实战:打牌小游戏,注意别玩上瘾了

Posted 程序员_宇宁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实战:打牌小游戏,注意别玩上瘾了相关的知识,希望对你有一定的参考价值。

快点吧我等到花儿都谢了”这句话应该耳熟能详吧。嘿嘿,要不要用python帮你们提前复习一下呢?也不至于到时候没有心理准备。

遇见你如果要花光我所有运气!那我请你离我远点,我过年可是要打牌的人。

在牌桌上,自己是自己的主任,自己的命运真正地掌握在自己手中,通过打牌,感到自己真实地存在。

小游戏

打牌人特质:常常站在高手后面点头微笑,学习自己想要的东西,说明善于学习别人的长处。

打牌人特质:手气差的时候洗个手,昂,运气就来了😏

🛒代码:

from random import sample
from collections import Counter


def get_pk_lst(pls, pks):  # 发牌
    result = []
    for p in pls:
        pk = sample(pks, 3)
        for _pk in pk:
            pks.remove(_pk)
        result.append("name": p, "poker": pk)
    return result


def calculate(_score_map, pk_lst):  # 返回得分和牌型
    n_lst = list(map(lambda x: _score_map[x], pk_lst))  # 点数映射
    same_suit = len(set([pk[:2] for pk in pk_lst])) == 1  # 是否同花色
    continuity = sorted(n_lst) == [i for i in range(min(n_lst), max(n_lst) + 1)] or set(n_lst) == 14, 2, 3  # 是否连续
    check = len(set(n_lst))  # 重复情况
    if not same_suit and not continuity and check == 3:
        return sum(n_lst), "单张"
    if not same_suit and check == 2:
        w = [i for i in n_lst if n_lst.count(i) == 2][0]
        single = [i for i in n_lst if i != w][0]
        return w*2*2 + single, "对子"
    if same_suit and not continuity:
        return sum(n_lst)*9, "金花"
    if continuity and not same_suit:
        return sum(n_lst)*81, "顺子"
    if check == 1:
        return sum(n_lst)*666, "豹子"
    if continuity and same_suit:
        return sum(n_lst)*999, "同花顺"


def compare(_score_map, pk_grp):  # 比大小
    for p in pk_grp:
        p["score"], p["type"] = calculate(_score_map, p["poker"])
    print("开牌结果------")
    for p in pk_grp:
        print(p)
    print("赢家是------")
    best = max(pk_grp, key=lambda x: x["score"])["name"]
    print(best)
    return pk_grp


def show(_score_map, _players):   # 开局
    pokers = list(_score_map.keys())
    poker_grp = get_pk_lst(_players, pokers)
    return compare(_score_map, poker_grp)


def start_game(_score_map, _players, freq=1):   # 游戏和统计
    type_lst = []
    for i in range(freq):
        grp = show(_score_map, _players)
        type_lst = type_lst + [t["type"] for t in grp]
    c = Counter(type_lst)
    print(c)
    total = sum(c.values())
    for item in c.items():
        print(f"item[0]频率:item[1]/total:.2%")


if __name__ == '__main__':
    # 准备扑克牌
    suit = ["黑桃", "红心", "方块", "梅花"]
    num = [str(i) for i in range(2, 11)] + ["J", "Q", "K", "A"]
    score_map =   # 单张点数映射表
    for s in suit:
        count = 2
        for n in num:
            score_map[f"sn"] = count
            count += 1
    # 5个玩家入场
    players = [f"pi" for i in range(1, 6)]
    # 开始游戏
    start_game(score_map, players, freq=100000) 

结尾

【打牌要诀】:打牌已经成为大家所喜爱的娱乐项目,给大家总结了一点小的要诀,祝大家多赢哈!

好啦文章就分享到这里就结束啦~

以上是关于python实战:打牌小游戏,注意别玩上瘾了的主要内容,如果未能解决你的问题,请参考以下文章

用python开发一个炸金花小游戏,注意别玩上瘾了

用python开发一个炸金花小游戏,注意别玩上瘾了

Pygame实战:这种“欢乐打地鼠”小游戏让几亿人“上瘾“?不玩绝对是你的损失

Pygame实战:这年头塔除了拆还能干什么?这款好玩上瘾的塔防游戏,了解一下嘛

Pygame实战:记忆差怎么办?别急,增强记忆力的小游戏送给你~越玩越上瘾

学编程太枯燥,整理11个边玩游戏边学编程网站,越学越上瘾