基于Python制作炸金花游戏的过程详解

  # -*- coding: utf-8 -*-

  import random

  puke = [] # 存储扑克牌

  num_list = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']

  hua_list = ['梅花', '红桃', '黑桃', '方块']

  sort_dic = {'2': 0, '3': 1, '4': 2, '5': 3, '6': 4, '7': 5, '8': 6, '9': 7, '10': 8, 'J': 9, 'Q': 10, 'K': 11, 'A': 12,

  '对子': 15, '顺子': 30, '顺金': 60, '豹子': 100}

  count_new_list = [] # 存储玩家分数和排序后排名

  count_dic = {} # 存储玩家分数

  # 准备52张扑克

  for hua in hua_list:

  for num in num_list:

  a = hua + num

  puke.append(a)

  player_dic = {'玩家1': [], '玩家2': [], '玩家3': [], '玩家4': [], '玩家5': []}

  # 随机给五个玩家发牌

  # print(len(puke))

  for key, value in player_dic.items():

  for i in range(3):

  plate = random.sample(puke, 3)

  player_dic[key] = plate

  for i in plate:

  puke.remove(i)

  print(player_dic)

  # 获取玩家的牌型

  def paixing(list1):

  num = []

  huase = []

  for i in list1:

  a = i[2:]

  b = i[:2]

  num.append(a)

  huase.append(b)

  return num, huase

  # sort_dic = {'2': 0, '3': 1, '4': 2, '5': 3, '6': 4}

  # 对数字的牌型进行排序

  def sort(num):

  new_num = []

  sort_list2 = []

  list1 = []

  for i in num:

  new_num.append(sort_dic[i])

  new_num = sorted(new_num) # 排序后是[2, 4, 7]

  for new in new_num:

  sort_list2.append([k for k, v in sort_dic.items() if v == new])

  for m in sort_list2:

  for n in m:

  list1.append(n)

  return list1

  # 对玩家的牌形统计分数

  def count(num, huase):

  a = 0

  base_count = sort_dic[num[0]] + sort_dic[num[1]] + sort_dic[num[2]]

  if num[0] == num[1] and num[1] == num[2]:

  paixing = '豹子'

  a = base_count + sort_dic[paixing]

  elif (sort_dic[num[0]] + 1 == sort_dic[num[1]] and sort_dic[num[2]] - 1 == sort_dic[num[1]]) and (huase[0] == huase[

  1] and huase[1] == huase[2]):

  paixing = '顺金'

  a = base_count + sort_dic[paixing]

  elif (sort_dic[num[0]] + 1 == sort_dic[num[1]]) and (sort_dic[num[2]] - 1 == sort_dic[num[1]]) and (

  huase[0] != huase[

  1] or huase[1] != huase[2]):

  paixing = '顺子'

  a = base_count + sort_dic[paixing]

  elif (num[0] == num[1] and num[1] != num[2]) or (num[1] == num[2] and num[0] != num[1]) or (

  num[0] == num[2] and num[1] != num[0]):

  paixing = '对子'

  a = base_count + sort_dic[paixing]

  else:

  a = base_count

  return a

  # 对存储玩家分数的字典进行排序

  def compare(count_dic):

  d = list(zip(count_dic.values(), count_dic.keys()))

  return sorted(d, reverse=True)

  for key, value in player_dic.items():

  num, huase = paixing(value)

  num = sort(num)

  count1 = count(num, huase)

  count_dic[key] = count1

  print(key + "的牌为:" + str(value))

  count_new_list = compare(count_dic)

  # print(count_new_list)

  print('最终排名:' + " " + count_new_list[0][1] + "第一名" + " " + count_new_list[1][1] + "第二名" + " " + count_new_list[2][

  1] + "第三名" + " " + count_new_list[3][1] + "第四名" + " " + count_new_list[4][1] + "第五名")