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将多个list合并为1个list的方法
Jun 27 Python
利用python实现对web服务器的目录探测的方法
Feb 26 Python
Python实战之制作天气查询软件
May 14 Python
python 中pyqt5 树节点点击实现多窗口切换问题
Jul 04 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
Python numpy多维数组实现原理详解
Mar 10 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
零基础小白多久能学会python
Jun 22 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
PyTorch中的torch.cat简单介绍
Mar 17 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 时间日期操作实战
2011/08/26 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
简单的编程0基础下Python入门指引
2015/04/01 Python
Python import用法以及与from...import的区别
2015/05/28 Python
最大K个数问题的Python版解法总结
2016/06/16 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
python调用百度语音识别api
2018/08/30 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
Julep官网:美容产品和指甲油
2017/02/25 全球购物
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
某科技软件测试面试题
2013/05/19 面试题
甘南现象心得体会
2014/09/11 职场文书
护士年终考核评语
2014/12/31 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL