Loading

Python - 棋牌游戏11点

需求

作业需求:
1、生成一副扑克牌(自己设计扑克牌的结构,小王和大王可以分别用14、15表示 )

2、3个玩家(玩家也可以自己定义)
user_list = ["zhangkai","likai","wangkai"]

3、发牌规则
默认先给用户发一张牌,其中 J、Q、K、小王、大王代表的值为0.5,其他就是则就是当前的牌面值。
用户根据自己的情况判断是否继续要牌。
    要,则再给他发一张。(可以一直要牌,但是如果自己手中的牌总和超过11点,你的牌就爆掉了(牌面变成0))
    不要,则开始给下个玩家发牌。(没有牌则则牌面默认是0)
如果用户手中的所有牌相加大于11,则表示爆了,此人的分数为0,并且自动开始给下个人发牌。

4、最终计算并获得每个玩家的分值,例如:
result = {
    "zhangkai":8,
    "likai":9,
    "wangkai":0
}

必备技术点:随机抽排
import random

total_poke_list = [("红桃", 1), ("黑桃", 2), ......,("大王", 15), ("小王", 14)]

# 随机生成一个数,当做索引。
index = random.randint(0, len(total_poke_list) - 1)
# 获取牌
print("抽到的牌为:", total_poke_list[index])
# 踢除这张牌
total_poke_list.pop(index)

print("抽完之后,剩下的牌为:", total_poke_list)

# 采分点

请补充完善你的代码
result = {}    # 存储最终各位玩家的得分
user_list = ["zhangkai","likai","wangkai"]
# 补充代码


print(result)

实现

注意,因为下面的代码包含cls清屏指令,所以,请在Windows的终端中执行,在pycharm中右键运行清屏代码不生效。

import os

poke_type = ('红桃', '黑桃', '梅花', '方块')
poke_set = set()
poke_set.update({('小王', 0.5), ('大王', 0.5)})
poke_set.update({(k + i, 0.5) for k in poke_type for i in ['J', 'Q', 'k', 'A']})
poke_set.update({(k + str(i), i) for k in poke_type for i in range(2, 11)})
print(poke_set)

user_dict = {
    "zhangkai": {'poke': [poke_set.pop()], 'score': 0, 'msg': ''},
    "likai": {'poke': [poke_set.pop()], 'score': 0, 'msg': ''},
    "wangkai": {'poke': [poke_set.pop()], 'score': 0, 'msg': ''},
}
# print(user_dict)

for i in user_dict:
    while True:
        user_dict[i]['score'] = sum([i[1] for i in user_dict[i]['poke']])
        choice = input('尊敬的用户[{}],你现在手里有牌[{}],得分[{}],要牌y/不要n\n请根据需求输入: '.format(
            i,
            ' '.join([i[0] for i in user_dict[i]['poke']]),
            sum([i[1] for i in user_dict[i]['poke']])
        )).strip()
        if not choice:
            continue
        if choice.upper() == 'N':
            os.system('cls')  # windows 清屏指令,Linux请使用 clear
            break

        user_dict[i]['poke'].insert(0, poke_set.pop())
        user_dict[i]['score'] = sum([i[1] for i in user_dict[i]['poke']])
        if user_dict[i]['score'] > 11:
            print('尊敬的用户[{}],你手里有牌[{}],得分是[{}],大于11点,爆掉了,根据规则,我们不带你玩了!!!'.format(
                i,
                ' '.join([i[0] for i in user_dict[i]['poke']]),
                user_dict[i]['score']
            ))
            user_dict[i]['msg'] = '实际得分[{}],大于11点,爆掉了'.format(sum([i[1] for i in user_dict[i]['poke']]))
            user_dict[i]['score'] = 0
            break

print('选牌完毕,正在计算得分.....')
for i in user_dict:
    print('尊敬的用户[{}],你的总得分是[{}]'.format(i, user_dict[i]['score']), user_dict[i]['msg'])

# 计算出赢家
winner_user = max(user_dict, key=lambda x: user_dict[x]['score'])
print("最后的赢家是: {},得分是: {}".format(winner_user, user_dict[winner_user]['score']))

欢迎斧正,that's all
posted @ 2019-03-28 11:58  听雨危楼  阅读(654)  评论(3编辑  收藏  举报