miracle2016 发表于 2021-7-25 10:52

python实现棋牌游戏11点

# 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 =
for gamer in gamer_dict:
    print(f"{gamer} 当前的牌为 {gamer_dict}    ", end='')
print(f"\n抽完之后剩下的{len(pork_list)}张牌为:\n{pork_list}")


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

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

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

好家伙,要不来个多人在线的
页: [1]
查看完整版本: python实现棋牌游戏11点