1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【python教程入门学习】Python扑克牌21点游戏实例代码

【python教程入门学习】Python扑克牌21点游戏实例代码

时间:2021-05-30 20:14:23

相关推荐

【python教程入门学习】Python扑克牌21点游戏实例代码

大家好,本篇文章主要讲的是Python扑克牌21点游戏实例代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

废话还是说太多了 直接上代码

|

`import` `random``import` `sys``# 牌面列表``card_code` `=` `[``'A'``,` `'2'``,` `'3'``,` `'4'``,` `'5'``,` `'6'``,` `'7'``,` `'8'``,` `'9'``,` `'10'``,` `'J'``,` `'Q'``,` `'K'``]``# 花色列表``card_symbol` `=` `[``'♦'``,` `'♣'``,` `'♥'``,` `'♠'``]``# 游戏初始化``def` `init(player_count):``# 根据玩家数来生成玩家记牌器``player_group` `=` `[[]` `for` `_` `in` `range``(player_count)]``# 根据玩家数来生成玩家是否要牌``player_isWant` `=` `[``True` `for` `_` `in` `range``(player_count)]``# 生成元素1~52的列表 (去掉大小鬼的扑克牌[52张])``poker` `=` `list``(``range``(``1``,` `53``))``# 用random的shuffle函数对列表打乱顺序 (洗牌)``random.shuffle(poker)``# 返回玩家组 玩家是否要牌 乱序52张扑克``return` `player_group, player_isWant, poker``# 打印玩家点数``def` `print_player_point(player_group):``# 存放玩家点数``player_point` `=` `[]``# 遍历每一位玩家``for` `index` `in` `range``(``len``(player_group)):``# 打印每位玩家的牌和点数``print``(``"-------玩家"``+``str``(index``+``1``)``+``"------"``)``# 初始化玩家点数 如果含有牌A 因为A可视为1点或11点 则有两种点数``current_player` `=` `[``0``,` `0``]``# 遍历每位玩家的手牌``for` `card` `in` `player_group[index]:``"""``核心代码``由于牌面的数字是从1到52 所以牌面要先减1再求余才是牌面列表真正的下标``若玩家抽到牌为15 即牌面为15 - 13 = 2 且按花色顺序为♣ 即2♣``牌面 15 - 1 = 14 再 14 % 13 = 1 这个就是对应牌面列表的第二位元素 即2``花色 15 - 1 = 14 再 14 / 13 = 1 对应花色列表第二位元素 即♣``"""``# 获取牌面和花色下标``code_index` `=` `int``((card` `-` `1``)` `%` `13``)``symbol_index` `=` `int``((card` `-` `1``)` `/` `13``)``# 打印玩家牌信息``print``(card_code[code_index]` `+` `card_symbol[symbol_index], end``=``"\t"``)``# 如果牌面含有A 则添加不同点数1和11``if` `(code_index` `+` `1``)` `=``=` `1``:``current_player[``0``]` `+``=` `1``current_player[``1``]` `+``=` `11``# 如果牌面不含A 则添加相同点数``else``:``current_player[``0``]` `+``=` `code_index` `+` `1``current_player[``1``]` `+``=` `code_index` `+` `1``# 如果两个点数一致 则打印一个点数``if` `current_player[``0``]` `=``=` `current_player[``1``]:``print``(``"点数为"``+``str``(current_player[``0``])``+``"点"``)``# 否则打印两个点数``else``:``print``(``"点数为"``+``str``(current_player[``0``])``+``"点或"``+``str``(current_player[``1``]))``# 添加当前玩家点数``player_point.append(current_player)``# 返回所有玩家点数``return` `player_point``# 玩游戏``def` `play_game():``# 打印游戏规则``print``(``"-------21点游戏------"``)``print``(``"---A可看做1点或11点---"``)``# 死循环一直进行游戏``while` `True``:``# 初始化玩家数为0``player_count` `=` `0``# 当玩家数小于等于1或大于5时继续询问``while` `player_count <``=` `1` `or` `player_count >` `5``:``# 询问玩家数``print``(``"有多少位玩家?(2~5位)"``, end``=``"")``# 获取控制台输入的数字 无验证输入 若输入非数字 程序直接报错``player_count` `=` `int``(``input``())``# 初始化游戏 返回玩家组 玩家是否要牌 乱序52张扑克``player_group, player_isWant, poker` `=` `init(player_count)``# 开始发牌 先为每位玩家发两张牌 循环玩家数``for` `index` `in` `range``(player_count):``for` `i` `in` `range``(``2``):``# pop() 函数用于移除列表中的一个元素(默认最后一个元素)并且返回该元素的值。``player_group[index].append(poker.pop())``# 打印玩家点数 并获取当前玩家点数``player_point` `=` `print_player_point(player_group)``# 只要玩家继续要牌 且 还有剩余牌 则一直询问玩家是否要牌``while` `True` `in` `player_isWant` `and` `len``(poker) >` `0``:``# 遍历玩家``for` `index` `in` `range``(player_count):``# 判断玩家是否有可能还需要牌``if` `player_isWant[index]` `is` `True``:``# 询问玩家是否要牌``print``(``"玩家"``+``str``(index``+``1``)``+``",您再要一张?(y/n)"``)``# 获取控制台输入``isWant` `=` `str``(``input``())[``0``]``# 如果输入的字符为"n" 则将玩家标记为不再需要牌``if` `isWant` `=``=` `"n"``:``player_isWant[index]` `=` `False``# 如果不为字符"n" 默认为继续要牌 给该玩家发一张牌``else``:``player_group[index].append(poker.pop())``# 每轮询问结束 打印玩家点数 并获取当前玩家点数``player_point` `=` `print_player_point(player_group)``print``(``"\n"``*``5``+``"====本轮游戏结束===="``)``# 定义一个计分器``score` `=` `[]``# 要牌结束 遍历所有玩家的点数 判断哪位玩家胜利``for` `point_list` `in` `player_point:``# 如果两个两个点数相同 说明没有A``if` `point_list[``0``]` `=``=` `point_list[``1``]:``# 如果分数大于21 直接取负数 小于等于21 任意取一个作为分数``score.append(``-``point_list[``0``]` `if` `point_list[``0``] >` `21` `else` `point_list[``0``])``# 如果两个点数不想同 说明含有A 则继续判断``else``:``# 如果两个点数中大的那个点数还小于等于21``if` `max``(point_list) <``=` `21``:``# 去最大值为分数``score.append(``max``(point_list))``# 如果两个点数中大的那个点数大于21``else``:``# 如果小的点数大于21 直接取负数 小于等于21 取最小值为分数``score.append(``-``min``(point_list)` `if` `min``(point_list) >` `21` `else` `min``(point_list))``# 最高分``max_point` `=` `max``(score)``# 如果最高分的人数为1 直接认为最高分的玩家获胜 打印游戏结果``if` `score.count(max_point)` `=``=` `1``:``print``(``"玩家"``+``str``(score.index(max_point)` `+` `1``)``+``"获胜!"``)``# 否则最高分的分数有并列 认为有多个人获胜``else``:``# 获胜玩家列表``temp_list` `=` `[]``# 遍历分数``for` `index` `in` `range``(``len``(score)):``# 分数等于最高分 记录玩家``if` `score[index]` `=``=` `max_point:``temp_list.append(``"玩家"``+``str``(index``+``1``))``# 拼接获胜玩家列表 打印游戏结果``print``(``"恭喜"``+``","``.join(temp_list)``+``"获胜!"``)``# 询问是否继续游戏``print``(``"是否继续游戏?(y/n)"``)``# 如果控制台输入不为字符"y" 表示退出``if` `str``(``input``())[``0``] !``=` `'y'``:``sys.exit()``# 程序主入口``if` `__name__` `=``=` `'__main__'``:``# 玩游戏``play_game()`

|

运行结果如下

到此这篇关于Python扑克牌21点游戏实例代码的文章就介绍到这了,更多相关Python扑克牌游戏内容请搜索python教程入门学习以前的文章或继续浏览下面的相关文章希望大家以后多多支持python教程入门学习!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。