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提示No module named images的解决方法
Sep 29 Python
在Python程序中进行文件读取和写入操作的教程
Apr 28 Python
python去掉行尾的换行符方法
Jan 04 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
python如何实现int函数的方法示例
Feb 19 Python
如何用python写一个简单的词法分析器
Dec 18 Python
解析Python的缩进规则的使用
Jan 16 Python
python 字典操作提取key,value的方法
Jun 26 Python
使用pickle存储数据dump 和 load实例讲解
Dec 30 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 Python
python如何实现word批量转HTML
Sep 30 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 number_format() 函数定义和用法
2012/06/01 PHP
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
高三自我评价
2014/02/01 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
文明单位汇报材料
2014/12/24 职场文书
辞职书格式样本
2015/02/26 职场文书
家庭贫困证明
2015/06/16 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android