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 3支持mysqldb的解决方法
Feb 14 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
Python编译为二进制so可执行文件实例
Dec 23 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 Python
python3 自动打印出最新版本执行的mysql2redis实例
Apr 09 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 Python
python程序需要编译吗
Jun 19 Python
python zip()函数的使用示例
Sep 23 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获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
php的一些小问题
2010/07/03 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
js 颜色选择插件
2017/01/23 Javascript
js+html制作简单验证码
2017/02/16 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
Python异常处理总结
2014/08/15 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
Python中动态创建类实例的方法
2017/03/24 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
python批量处理txt文件的实例代码
2020/01/13 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
销售主管的自我评价分享
2014/01/03 职场文书
探矿工程师自荐信
2014/01/24 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
情况说明书格式及范文
2019/06/24 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
mysql 索引合并的使用
2021/08/30 MySQL