您的位置:首页技术文章
文章详情页

python实现21点小游戏

浏览:80日期:2022-06-21 09:59:03

用python实现21点小游戏,供大家参考,具体内容如下

from random import shuffleimport randomimport numpy as npfrom sys import exit# 初始化扑克牌playing_cards = { '黑桃A': 1, '黑桃2': 2, '黑桃3': 3, '黑桃4': 4, '黑桃5': 5, '黑桃6': 6, '黑桃7': 7, '黑桃8': 8, '黑桃9': 9, '黑桃10': 10, '黑桃J': 10, '黑桃Q': 10, '黑桃K': 10, '红桃A': 1, '红桃2': 2, '红桃3': 3, '红桃4': 4, '红桃5': 5, '红桃6': 6, '红桃7': 7, '红桃8': 8, '红桃9': 9, '红桃10': 10, '红桃J': 10, '红桃Q': 10, '红桃K': 10, '梅花A': 1, '梅花2': 2, '梅花3': 3, '梅花4': 4, '梅花5': 5, '梅花6': 6, '梅花7': 7, '梅花8': 8, '梅花9': 9, '梅花10': 10, '梅花J': 10, '梅花Q': 10, '梅花K': 10, '方块A': 1, '方块2': 2, '方块3': 3, '方块4': 4, '方块5': 5, '方块6': 6, '方块7': 7, '方块8': 8, '方块9': 9, '方块10': 10, '方块J': 10, '方块Q': 10, '方块K': 10}# 扑克牌面poker_name = list(playing_cards.keys())# 扑克牌的数量poker_count = 1poker_list = poker_count*poker_name# 用于判断手中的牌是否有A,再根据牌面判断A是否取值1还是11four_a = {’黑桃A’, ’红桃A’, ’梅花A’, ’方块A’}# 计分器total_score = np.array([0, 0])# 记录回合数game_round = 1def random_cards(poker_name_list): ''' 定义洗牌函数:重新对牌进行随机排列 ''' shuffle(poker_name_list)def score_count(hand_poker): ''' 计算手中牌的分数 :param hand_poker:一个含有牌名的列表 :return: 手中牌 的分数poker_score ''' # 声明一个变量,记录牌的总分数 poker_score = 0 # 标记:判断是否有A的标记,默认没有 have_a = False # 计算手中牌的分数 for k in hand_poker:poker_score += playing_cards[k] # 判断手中的牌是否含有A,再根据A的规则进行分数的计算 for i in hand_poker:if i in four_a: have_a = True breakelse: continue if have_a:if poker_score + 10 <= 21: poker_score = poker_score + 10 return poker_scoredef who_win(your_score, pc_score): ''' 判断游戏的胜负 :param your_score: 玩家分数 :param pc_score: 电脑分数 :return: 胜负的数组 ''' if your_score > 21 and pc_score > 21:print(’平局’)return np.array([0, 0]) elif your_score > 21 and pc_score <= 21:print(’对不起,玩家输了’)return np.array([0, 1]) elif your_score <= 21 and pc_score > 21:print(’恭喜!!玩家胜利了’)return np.array([1, 0]) elif your_score <= 21 and pc_score <= 21:if your_score > pc_score: print(’恭喜!!玩家胜利了’) return np.array([1, 0])elif your_score < pc_score: print(’对不起,玩家输了’) return np.array([0, 1])else: print(’平局!!’) return np.array([0, 0])def if_get_next_poker(): ''' 是否继续要牌 ''' if_continue = input('是否继续要下一张牌?(Y/N)>>>>:') if if_continue.upper() == 'Y':return get_one_poker() elif if_continue.upper() == 'N':print(’玩家停止叫牌’)return False else:print('输入有误,请重新输入')return if_get_next_poker()def get_one_poker(): ''' 发牌函数:随机将poker_list里的牌取出一张 :return: ''' return poker_list.pop(random.randint(0, len(poker_list)-1))def continue_or_quit(): ''' 一轮游戏结束后,询问玩家是否进行下一轮 ''' if_next_round = input('是否进行下一轮游戏(Y/N)>>>>:') if if_next_round.upper() == ’Y’:# 判断扑克牌是否玩的了下一轮if len(poker_list) <= 15: print(’对不起,剩余牌数不足,无法进行下一轮,游戏结束。’) exit(1)else: return True elif if_next_round.upper() == 'N':print('玩家不玩了。游戏结束!!')exit(1) else:print('输入有误,请重新输入')return continue_or_quit()def start_game_init_two_poker(poker_database): ''' 初始化游戏,给玩家和电脑随机发两张牌 :param poker_database: 牌堆 :return: 玩家和电脑的初始牌面列表 ''' return [poker_database.pop(random.randint(0, len(poker_list)-1)), poker_database.pop(random.randint(0, len(poker_list)-1))]def every_round(porker_list): ''' 每一轮游戏的流程 :param porker_list:牌堆 :return:游戏的获胜者 ''' # 声明一个变量,代表玩家手里的牌 your_hand_poker = [] # 声明一变量,代表电脑手里的牌 pc_hand_poker = [] # 游戏开始,先从牌堆中取两张牌 you_init_poker = start_game_init_two_poker(porker_list) pc_init_poker = start_game_init_two_poker(porker_list) # 展示玩家获得的扑克 print(f'玩家所获得的牌是:{you_init_poker[0]}和{you_init_poker[1]}') print(f'电脑所获得的第一张牌是:{pc_init_poker[0]}') # 玩家和电脑得到所发的两张扑克牌 your_hand_poker.extend(you_init_poker) pc_hand_poker.extend(pc_init_poker) # 计算初始扑克的分数 your_score = score_count(your_hand_poker) pc_score = score_count(pc_hand_poker) # 根据初始牌面分数,判断是否能有21点,如果有直接使用判断输赢函数 if your_score == 21 or pc_score == 21:print('初始牌中有21点了。')return who_win(your_score, pc_score) # 如果没有,根据自己手中的牌,判断是否要牌。 else:while True: get_new_poker = if_get_next_poker() # 玩家要牌 if get_new_poker != False:# 将新牌拿到手里并重新计算手里的牌的分数your_hand_poker.append(get_new_poker)print(f'玩家手里的牌是{your_hand_poker}')your_score = score_count(your_hand_poker)if your_score > 21: print('玩家的牌已经超过21点') print(f'电脑手里的牌是{pc_hand_poker}') return who_win(your_score, pc_score)else: continue # 玩家停止要牌,则电脑开始要牌 elif get_new_poker == False:# 电脑要牌规则一:只要比玩家分数就要牌# while pc_score < your_score:# pc_new_poker = get_one_poker()# pc_hand_poker.append(pc_new_poker)# # 重新计算电脑手中的牌的分数# pc_score = score_count(pc_hand_poker)# 电脑要牌规则二:当电脑的手中牌的分数落在区间[1:18]时,就一直要牌while pc_score in range(1, 19): pc_new_poker = get_one_poker() pc_hand_poker.append(pc_new_poker) # 重新计算电脑的分数 pc_score = score_count(pc_hand_poker)print(f'电脑手里的牌为{pc_hand_poker}')return who_win(your_score, pc_score) else:continue'''游戏调用主程序'''while True: print('游戏即将开始,祝你好运!!!') input('按下【enter】开始游戏>>>') print(f'现在是第{game_round}轮游戏') # 洗牌 random_cards(poker_list) # 游戏开始 score = every_round(poker_list) # 计算总分 total_score = np.add(total_score, score) print(f’此轮游戏结束,目前比分:{total_score[0]}:{total_score[1]}’) game_round += 1 continue_or_quit()running result

python实现21点小游戏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持好吧啦网。

标签: Python 编程
相关文章: