python编写扎金花小程序的实例代码


Posted in Python onFebruary 23, 2021

游戏规则:

一付扑克牌,去掉大小王,每个玩家发3张牌,最后比大小,看谁赢。

有以下几种牌:

豹子:三张一样的牌,如3张6.

顺金:又称同花顺,即3张同样花色的顺子, 如红桃 5、6、7

顺子:又称拖拉机,花色不同,但是顺子,如红桃5、方片6、黑桃7,组成的顺子

对子:2张牌一样

单张:单张最大的是A

这几种牌的大小顺序为, 豹子>顺金>顺子>对子>单张

程序需要实现的点:

  1. 先生成一付完整的扑克牌
  2. 给5个玩家随机发牌
  3. 统一开牌,比大小,输出赢家是谁

主要思路:

 把各种牌用积分来计算,最后加上三张牌的基础积分。即:最终积分=基础积分+牌型积分。最后比较最红积分,谁的积分大,谁排名就靠前。 附上源码:

# -*- coding: utf-8 -*-
"""
# @Time   : 2021-01-07 14:55
# @author  : jianwei
# @Software : PyCharm
"""

import random
import operator

puke = [] # 存储扑克牌
num_list = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
hua_list = ['梅花', '红桃', '黑桃', '方块']
sotr_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


# 对数字的牌型进行排序
def sotr(num):
  new_num = []
  sort_list2 = []
  list1 = []
  for i in num:
    new_num.append(sotr_dic[i])
  new_num = sorted(new_num)
  for new in new_num:
    sort_list2.append([k for k, v in sotr_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 = sotr_dic[num[0]] + sotr_dic[num[1]] + sotr_dic[num[2]]
  if num[0] == num[1] and num[1] == num[2]:
    paixing = '豹子'
    a = base_count + sotr_dic[paixing]
    # print(paixing, a)
  elif (sotr_dic[num[0]] + 1 == sotr_dic[num[1]] and sotr_dic[num[2]] - 1 == sotr_dic[num[1]]) and (huase[0] == huase[
    1] and huase[1] == huase[2]):
    paixing = '顺金'
    a = base_count + sotr_dic[paixing]
    # print(paixing, a)
  elif (sotr_dic[num[0]] + 1 == sotr_dic[num[1]]) and (sotr_dic[num[2]] - 1 == sotr_dic[num[1]]) and (
      huase[0] != huase[
    1] or huase[1] != huase[2]):
    paixing = '顺子'
    a = base_count + sotr_dic[paixing]
    # print(paixing, a)
  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 + sotr_dic[paixing]
    # print(paixing, a)
  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():
  # print(key,value)
  num, huase = paixing(value)
  # print(num,huase)
  num = sotr(num)
  # print(num, huase)
  count1 = count(num, huase)
  # print(count1)
  count_dic[key] = count1
  print(key + "的牌为:" + str(value))
  count_new_list = compare(count_dic)
# print(count_new_list)
print('最终排名:' + "\t" + count_new_list[0][1] + "第一名" + "\t" + count_new_list[1][1] + "第二名" + "\t" + count_new_list[2][
  1] + "第三名" + "\t" + count_new_list[3][1] + "第四名" + "\t" + count_new_list[4][1] + "第五名")

到此这篇关于python编写扎金花小程序的文章就介绍到这了,更多相关pytho扎金花小程序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中转换角度为弧度的radians()方法
May 18 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
Jun 25 Python
python实现爬取百度图片的方法示例
Jul 06 Python
python基于Selenium的web自动化框架
Jul 14 Python
在Django下测试与调试REST API的方法详解
Aug 29 Python
Python用5行代码实现批量抠图的示例代码
Apr 14 Python
Python实现动态循环输出文字功能
May 07 Python
Python下划线5种含义代码实例解析
Jul 10 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
Python项目实战之使用Django框架实现支付宝付款功能
Feb 23 #Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 #Python
python利用opencv实现颜色检测
Feb 23 #Python
详解Python中openpyxl模块基本用法
Feb 23 #Python
python爬虫今日热榜数据到txt文件的源码
Feb 23 #Python
如何用Python和JS实现的Web SSH工具
Feb 23 #Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 #Python
You might like
PHP XML备份Mysql数据库
2009/05/27 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
JavaScript闭包实例详解
2016/06/03 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python中的引用和拷贝浅析
2014/11/22 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
Python和Sublime整合过程图示
2019/12/25 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
Python实现画图软件功能方法详解
2020/07/28 Python
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
考试没考好检讨书
2015/05/06 职场文书
小学同学聚会感言
2015/07/30 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电
Python实现简单的猜单词
2021/06/15 Python
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android