吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1879|回复: 6
收起左侧

[Python 转载] python实现棋牌游戏11点

  [复制链接]
miracle2016 发表于 2021-7-25 10:52
[Python] 纯文本查看 复制代码
# coding:utf-8

"""
本脚本是棋牌游戏11点的游戏
- 发牌规则
#
# - 默认先给用户发一张牌,其中
# J、Q、K、小王、大王代表的值为0.5
# 其他就是则就是当前的牌面值。
# - 用户根据自己的情况判断是否继续要牌。
# - 要,则再给他发一张。
# - 不要,则开始给下个玩家发牌。
# - 如果用户手中的所有牌相加大于11,则表示爆了,此人的分数为0,并且自动开始给下个人发牌。
#
# - 最终计算并获得每个玩家的分值,例如:
"""
import random

# --------------1.游戏初始设置---------------------------
# 定义一个结果输出字典
result = {}
# 定义一个玩家列表
user_list = ["alex", "武沛齐", "李路飞"]
# 定义一个分数的字典以便计算分数
score = {'2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '10': 10, "J": 0.5, "Q": 0.5, "K": 0.5, "A": 1, "大王": 0.5, "小王": 0.5}
# --------------2.生成一副扑克牌 54张---------------------------
# 定义一个空的扑克牌列表
pork_list = []
# 先生成一个2-10 的列表作为牌的牌面
num_list = []
for i in range(2, 11):
    num_list.append(str(i))
# 将["J", "Q", "K", "A"]加入牌面值列表里
num_list.extend(["J", "Q", "K", "A"])

# 将每张牌配上花色
colour = ('梅花', '方块', '红桃', '黑桃')
for j in colour:
    for i in num_list:
        pork_list.append((i, j))
# 加上大王小王两张牌,这里要注意一定要元组,否则后面会有问题
pork_list.extend([("大王", ), ("小王", )])

# --------------------------3.开始发牌---------------------------

# -----------3.1开始每人发一张牌,并打印-------------
# 每个人先初始得到一张随机发牌random方法 每发一张牌则去把这张牌从牌堆中删除 列表的pop方法
# 建立一个字典放置每个用户得到的牌,key就是用户名,value就是牌堆
gamer_dict = {}
for user in user_list:
    # 从牌堆里取值,pop方法取的是列表的index,而randint是包含右边的数值的,所以必须列表长度减去1,否则会超出范围
    gamer_dict[user] = [pork_list.pop(random.randint(0, len(pork_list)) - 1)]
for gamer in gamer_dict:
    print(f"{gamer} 当前的牌为 {gamer_dict[gamer]}    ", end='')
print(f"\n抽完之后剩下的{len(pork_list)}张牌为:\n{pork_list}")


# -----------3.2开始单独给一个人发牌,并计算每人的牌面值-------------
# 最外层循环,每个玩家
for user in user_list:
    print(f"{user}手里的牌为{gamer_dict[user]}")
    # 单个玩家,计算牌跟分值
    while True:
        choice = input(f"{user}是否需要发一张牌:(Y/N)")
        # 不需要发牌
        if choice.upper() == "N":
            # 循环单个玩家手里的牌,并计算牌面值
            gamer_score = 0
            for i in gamer_dict[user]:
                gamer_score += score[i[0]]
            print(f"{user}当前的牌为{gamer_dict[user]},得分为{gamer_score}")
            break
        # 需要发牌
        draw_pork = pork_list.pop(random.randint(0, len(pork_list)) - 1)
        # 给玩家字典里面单个玩家的牌堆里放入抽到的牌
        gamer_dict[user].append(draw_pork)
        print(f"{user}抽到的牌为{draw_pork} \n 手里的牌为{gamer_dict[user]} \n抽完之后剩下的{len(pork_list)}张牌为:\n{pork_list}")
        # 循环单个玩家手里的牌,并计算牌面值
        gamer_score = 0
        for i in gamer_dict[user]:
            gamer_score += score[i[0]]
        if gamer_score > 11:
            gamer_score = 0
            print(f"{user}当前的牌为{gamer_dict[user]},得分为{gamer_score}")
            break
    result[user] = gamer_score

# -----------4 输出结果-------------
print("result = {")
for i in result:
    print(f"{' ' * 10}{i} : {result[i]}")
print("}")

免费评分

参与人数 1吾爱币 +5 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wdztimo 发表于 2021-7-25 11:17
很强势啊,大兄弟
龍謹 发表于 2021-7-25 13:28
大酒鬼 发表于 2021-7-25 14:08
lxy444 发表于 2021-7-25 14:40
感谢分享 之前玩过实体的纸质卡牌 可惜玩的不好
QZGF 发表于 2021-7-25 18:38
好家伙,要不来个多人在线的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-14 19:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表