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开发之thread线程基础实例入门
Nov 11 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
Jun 29 Python
Python时间的精准正则匹配方法分析
Aug 17 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
pandas 两列时间相减换算为秒的方法
Apr 20 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
Dec 12 Python
python实现二维插值的三维显示
Dec 17 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
php获取一个变量的名字的方法
2014/09/05 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
常用PHP框架功能对照表
2014/10/23 PHP
Yii配置文件用法详解
2014/12/04 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
jquery实现简易的移动端验证表单
2015/11/08 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
python处理json数据中的中文
2014/03/06 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
Python探索之pLSA实现代码
2017/10/25 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
详解Python中is和==的区别
2019/03/21 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
python实现三壶谜题的示例详解
2020/11/02 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
运行时异常与一般异常有何异同?
2014/01/05 面试题
厂长岗位职责
2014/02/19 职场文书
公司财务部岗位职责
2015/04/14 职场文书
护士2015年终工作总结
2015/04/29 职场文书
员工加薪申请报告
2015/05/15 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
python状态机transitions库详解
2021/06/02 Python
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python