用python写一个扑克牌游戏-----21点玩法
用代码实现一个简单的21点扑克牌游戏
·
21点扑克牌游戏代码如下
import random # 导入随即模块 def shuffle(l): # 定义洗牌函数,将一副牌打乱 for i in range(len(l)): # 遍历整幅牌 j = random.randint(0, len(l) - 1) # 生成随机数 l[i], l[j] = l[j], l[i] # 交换当前牌和随机牌的位置 def deal(l): # 定义发牌函数 W = l[0:2] # 发玩家的前两张牌 Z = l[2:4] # 发庄家的前两张牌 i = 4 # 当前牌堆索引 print("当前玩家手牌:", W, "点数和为:", point(W)) # 输出当前玩家手牌和其点数和 print("当前庄家明牌:", Z[1]) # 输出当前庄家明牌 out = input("请选择是否继续拿牌(Y:拿牌,N:停牌):") # 获取玩家是否需要继续拿牌的输入 while out.lower() == "y" or out.lower() == "yes": # 当玩家输入Y或yes时进行循环 W.append(l[i]) # 玩家继续抽一张牌 i += 1 # 增加牌堆索引 print("当前玩家手牌:", W, "点数和为:", point(W)) # 输出当前玩家手牌和其点数 out = input("请选择是否继续拿牌(Y:拿牌,N:停牌):") # 获取玩家是否需要继续拿牌的输入 while point(Z) < 17: # 当庄家手牌点数小于17时抽牌 Z.append(l[i]) # 庄家继续抽牌 i += 1 # 增加牌堆索引 return [W, Z] # 返回发牌结果 def point(l): # 定义计算点数的函数 total_sum = 0 # 初始化总点数为0 num_ace = 0 # 记录牌堆中Ace的数量 for card in l: # 遍历整幅牌 if card == 1: # 如果当前牌为Ace,则num_ace加1 num_ace += 1 else: # 如果当前牌为2-10,则加上相应点数 total_sum += card max_sum = 0 # 初始化最大点数为0 for x in range(num_ace + 1): # 枚举Ace的个数 sum_Ace = x + (num_ace - x) * 11 # 计算当前Ace的点数和 if (sum_Ace + total_sum) <= 21 and sum_Ace > max_sum: # 如果当前点数和在21点以下且大于当前最大点数,则更新最大点数 max_sum = sum_Ace total_sum += max_sum return total_sum # 返回总点数 # 主函数调用 l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] * 4 # 定义 一副新牌 shuffle(l) # 洗牌(使用shuffle函数将牌堆打乱) [W, Z] = deal(l) # 发牌 print("最终玩家手牌:", W) # 输出最终玩家手牌、点数和 print("最终玩家手牌点数和为:", point(W)) print("最终庄家手牌:", Z) # 输出最终庄家手牌、点数和 print("最终庄家手牌点数和为:", point(Z)) if point(W) > 21: # 判断玩家的输赢情况,并输出相应结果 print("Boom! You died!(玩家点数大于二十一点,手牌报废,庄家赢了)") # 玩家点数大于21点,你输了 elif point(Z) > 21 or point(Z) < point(W): # 庄家点数大于21或小于玩家点数 print("You win!(玩家赢了)") # 玩家赢了 elif point(Z) == point(W): # 庄家点数等于玩家点数 print("It's a draw!(这局是平局!)") # 这是平局 else: print("You lost!(玩家输了!)") # 玩家输了
代码运行结果如下:
更多推荐
所有评论(0)