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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
Python中的生成器和yield详细介绍
Jan 09 Python
简单介绍Python的Django框架的dj-scaffold项目
May 30 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
Django 导出 Excel 代码的实例详解
Aug 11 Python
使用C++扩展Python的功能详解
Jan 12 Python
Python下载网络文本数据到本地内存的四种实现方法示例
Feb 05 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
PyTorch学习笔记之回归实战
May 28 Python
用python实现刷点击率的示例代码
Feb 21 Python
Python程序暂停的正常处理方法
Nov 07 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 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和ACCESS写聊天室(一)
2006/10/09 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
Python运用于数据分析的简单教程
2015/03/27 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
出纳员岗位职责
2014/03/13 职场文书
员工工作表现评语
2014/04/26 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server