python实战之德州扑克第一步-发牌

一、前言

最近小编在做一个关于德州扑克的小游戏,当然已经做完了,才写的一系列文章来记录一下自己的开发经历

点击链接查看其他文章

python实战之德州扑克第二步-判断牌型

python实战之德州扑克第三步-比较大小

一系列文章主要包括:

1.发牌
2.判断牌型
3.比较牌的大小
4.开始游戏
5.总结

二、说明

制作的德州扑克仅供参考,提供源码,源码可运行
可满足基本操作,另外还有一些小功能,可先自行研究
和真正的德州扑克游戏相比,九牛一毛,可用来练练手
附:本源码可优化,如果有实力,有时间,可尽情修改代码
注:本源码在pycharm写的,使用python语言
每篇文章最后都有相关源码

三、准备工作

开始做之前我们必须了解德州扑克的基本规则!
  简单说一下:
  五张牌组合由大到小依次为:
  皇家同花顺>同花顺>四条>葫芦>同花>顺子>三条>两队>一对>高牌
  皇家同花顺:同一花色最大的顺子
  同花顺:同一花色的顺子
  四条:四张相同+1个单张
  葫芦:三张相同+1对
  同花:5张牌花色相同
  顺子:花色不同的顺子
  三条:三张相同+2单张
  两对:2对+1单
  一对:1对+3单张
  高牌:五个单张牌
  注:组合相同则比较牌大小(皇家同花顺除外)A1234为最小的顺子

四、开始工作

首先需要一副扑克牌,代码很简单(如下):

color=["♥", "♠", "♣", "♦"]
value=["2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10","J ","Q ","K ","A "]
pai = [co+va+"" for co,va in product(color,value)]

怎么样!很简单吧!这样就生成了一副不含鬼王的52张牌

五、效果

['♥2 ', '♥3 ', '♥4 ', '♥5 ', '♥6 ', '♥7 ', '♥8 ', '♥9 ', '♥10', '♥J ', '♥Q ', '♥K ', '♥A ',
 '♠2 ', '♠3 ', '♠4 ', '♠5 ', '♠6 ', '♠7 ', '♠8 ', '♠9 ', '♠10', '♠J ', '♠Q ', '♠K ', '♠A ',
 '♣2 ', '♣3 ', '♣4 ', '♣5 ', '♣6 ', '♣7 ', '♣8 ', '♣9 ', '♣10', '♣J ', '♣Q ', '♣K ', '♣A ',
 '♦2 ', '♦3 ', '♦4 ', '♦5 ', '♦6 ', '♦7 ', '♦8 ', '♦9 ', '♦10', '♦J ', '♦Q ', '♦K ', '♦A ']

按照正常思维,发牌之前都是先洗牌的,所以接下来就是洗牌了,先上代码:

random.shuffle(pai)

说明使用了random库里面的shuffle()函数,此函数的作用就是打乱顺序

洗好牌之后就是发牌了,小编使用一个二维列表来存储所有玩家的牌,可能就有人好奇了,二维列表咋存储,首先我们需要知道二维数组的结构,一个列表里面好几个列表,类似于a=[[],[],[]…,[]],我们可以往里面添加元素,就拿a这个二维列表来说,a[i]存储的是每名玩家的牌,例如a[0]存储的是第一位玩家的牌,以此类推,有多少玩家i就有多大,罗嗦了这么多,瞅一眼代码:

def deal_cards(number,num):
    pais=copy.deepcopy(pai)
    random.shuffle(pais)  # 洗牌
    players=[list() for x in range(number)]
    for pl in range(len(players)):
        players[pl]=[" " for x in range(num)]
    for numb in range(number):#同一副牌
        n=0
        while n<num:
            players[numb][n]=pais.pop(random.randint(0,len(pais)-1))
            n+=1
    return players

这个函数可以给n个人发m张牌

做一个简单说明:
   拷贝一副牌(为什么要拷贝,见下方解释1)
   洗牌
   创建一个number行num列的二维数组players,方便存储(为啥要创建,见解释2)
   双重循环,给players赋值(发牌)
   解释1:因为实现生成了一副牌,如果直接对原来生成的牌,进行操作,会破坏原来的牌,假如,需要给1个人发10万次牌,来统计牌型的话,就需要创建100万次的牌,随着发牌次数的增加,所创建的牌占的内存会越来越大,运行也会越来越慢,导致等待几分钟或几十分钟才会输出结果,进行一个深拷贝,就是赋值一副牌,复制一副牌的时间和空间花销,远远小于创建一副牌。通过实践可知,10万次发牌,通过不断创建牌时间花销大约为91秒,通过深拷贝的花销时间为大约为6秒,对比一下,差距多么大!
   解释2:我们需要一个容器来存储玩家的牌,可以使用列表,字典,使用列表的话就是二维列表(前面已经说明),是用字典的话,key为玩家i,value为对应玩家的牌。使用列表,字典的区别不大只是操作上略有不同,小编使用列表存储玩家的牌
   解释3: players[numb][n]=pais.pop(random.randint(0,len(pais)-1))  这一行代码,就是从一副牌中拿一张牌,存到 players[numb][n]中,使用random.randint(0,len(pais)-1)是为了增加随机性,最大可能的随即发牌,达到一个公平的效果,如果函数不理解的话,可自行搜索,也可查看小编的相关文章

当你看到这里就说明这一篇文章就马上完结了!

以下内容为个人观点,可跳过,查看下一篇文章

发牌程序可以使用很多方法来操作的,例如字典
只需要创建一副扑克牌,洗牌,发牌。完成这三步就成功了
非常感谢,非常感谢,非常感谢!
重要的事说三遍!
更过相关文章可关注我,会不断更新的哦!

六、发牌完整源码

import copy
import random
from itertools import product

color=["♥", "♠", "♣", "♦"]
value=["2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10","J ","Q ","K ","A "]
pai = [co+va+"" for co,va in product(color,value)]
print(pai)
random.shuffle(pai)
def deal_cards(number,num):
    pais=copy.deepcopy(pai)
    random.shuffle(pais)  # 洗牌
    players=[list() for x in range(number)]
    for pl in range(len(players)):
        players[pl]=[" " for x in range(num)]
    for numb in range(number):#同一副牌
        n=0
        while n<num:
            players[numb][n]=pais.pop(random.randint(0,len(pais)-1))
            n+=1
    return players

到此这篇关于python实战之德州扑克第一步-发牌的文章就介绍到这了,更多相关python实现德州扑克发牌内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实现扑克牌交互式界面发牌程序

    本文实例为大家分享了python实现扑克牌交互式界面发牌程序的具体代码,供大家参考,具体内容如下 注:图片自行在网上下载.替换即可 #coding=utf-8 class Card(): #扑克牌类 points=['1','2','3','4','5','6','7','8','9','10','11','12','13'] suits=['1','2','3','4'] #花色 def __init__(self,points,suits): self.points=points self.

  • 基于Python实现扑克牌面试题

    这篇文章主要介绍了基于Python实现扑克牌面试题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 据说是腾讯的面试题,以下是要求: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌.根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组. 实现思路: 1.首先定义一个2维数组,代表最后桌上的牌堆排列情况.内部数组flist[i][0], flist[i][1]分别表示牌堆的排序和牌面的序号. 2.分n为奇数或偶数2种情况,用

  • Python实现比较扑克牌大小程序代码示例

    是Udacity课程的第一个项目. 先从宏观把握一下思路,目的是做一个比较德州扑克大小的问题 首先,先抽象出一个处理的函数,它根据返回值的大小给出结果. 之后我们在定义如何比较两个或者多个手牌的大小,为方便比较大小,我们先对5张牌进行预处理,将其按照降序排序,如下: def card_ranks(hand): ranks = ['--23456789TJQKA'.INDEX(r) for r, s in hand] ranks.sort(reverse=True) return ranks 然后

  • 基于Python制作一副扑克牌过程详解

    整理一下通过本文分享给大家, 该案例是通过 Python 类属性创建一幅除去大王.小王之后的 52 张扑克牌,并实现随机抽牌.排序.洗牌等功能: 创建一个纸牌类 一副扑克除去大王小王之外,剩下的 52 张纸牌以花色为基准(梅花.方块.黑桃.红心)可分为 4 组,每组有 13 张牌组成:因此可创建两个列表一个来存储花色,一个存储 13 个字符:通过两个列表之间的随机组合来生成 52 张纸牌, 代码如下: ​ 代码中通过collections.namedtuple模块创建一个类来表示一幅纸牌,['r

  • python实现四人制扑克牌游戏

    本文实例为大家分享了python实现四人制扑克牌游戏的具体代码,供大家参考,具体内容如下 题目: 设计一个简单的四人制扑克牌游戏,能够完成以下功能: 1. 洗牌 2. 发牌 3.自定义规则,在每轮单张出牌时,判定赢家 4.自定义规则,判定最终的赢家 规则简化版: 仅能出单张牌,且出牌时,每个人出的是自己手中牌中刚好能压过上家的最小牌,最先出完的为赢家 import random from random import choice flower = ['\u2660','\u2663','\u26

  • python模拟实现分发扑克牌

    本文实例为大家分享了python分发扑克牌的具体代码,供大家参考,具体内容如下 52张扑克牌发个4个玩家,每人13张. 要求: 自动生成一幅扑克牌组:洗牌:发牌到玩家手中:将玩家手中扑克牌按花色大小整理好. 思路一 import random import operator def auto(): pokers=[] poker=[] for i in ['♥','♠','♦','♣']: for j in ['A','2','3','4','5','6','7','8','9','10','J

  • 华为校园招聘上机笔试题 扑克牌大小(python)

    本文为大家分享了华为校园招聘上机笔试题,供大家参考,具体内容如下 [编程题] 扑克牌大小 时间限制:10秒 空间限制:131072K 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张. 牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):)  3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER  输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-&quo

  • python实战之德州扑克第二步-判断牌型

    一.前言 现在到了,第二步,上一步我们已经做好了发牌模块,有了手牌,就需要判断牌型了,平时打扑克时,我们需要使用大脑进行判断自己手里的牌属于那种类型的,现在我们需要通过程序来进行判断! 在以下操作中,需要玩家手里的牌为五张,不然无法判断! 先给出发牌的一个效果图: 给2人发五张牌: 二.分析 通过观察可以看出每名玩家的牌是以字符串的形式存储的,每张牌的字符串长度时3(!!!) 判断牌型就需要熟悉牌型的组成了 皇家同花顺:同一花色最大的顺子 同花顺:同一花色的顺子 四条:四张相同+1个单张 葫芦:

  • Python用类实现扑克牌发牌的示例代码

    1. 题目 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌. 提示: 设计出3个类:Card类.Hand类和Poke类. Card类代表一张牌,其中FaceNum字段指出是牌面数字1~13,Suit字段指出的是花色,值"梅"为梅花,"方"为方块,"红"为红心,"黑"为黑桃. Hand类代表一手牌,可以认为是一位牌手手里的牌,其中cards列表变量存储牌手手里的牌.可以增加牌.

  • python实战之德州扑克第一步-发牌

    一.前言 最近小编在做一个关于德州扑克的小游戏,当然已经做完了,才写的一系列文章来记录一下自己的开发经历 点击链接查看其他文章 python实战之德州扑克第二步-判断牌型 python实战之德州扑克第三步-比较大小 一系列文章主要包括: 1.发牌 2.判断牌型 3.比较牌的大小 4.开始游戏 5.总结 二.说明 制作的德州扑克仅供参考,提供源码,源码可运行 可满足基本操作,另外还有一些小功能,可先自行研究 和真正的德州扑克游戏相比,九牛一毛,可用来练练手 附:本源码可优化,如果有实力,有时间,可

  • python实战之德州扑克第三步-比较大小

    一.前言 经过前面的两篇文章,整体工作已经完成了2/3了,剩下的1/3,将会在本片文章提及 前面两步文章链接 python实战之德州扑克第一步-发牌 python实战之德州扑克第二步-判断牌型 整体流程: 比较之前须得获取,牌型,牌值,这两部分在上一篇文章已经讲解了,不懂得小伙伴可私信我,乐意解答! 之后就是简单的遍历,通过两两比较,并排好序,就得到含有玩家按顺序从大到小拍好的数组,类似于[0,3,1,2] 然后就是翻译:玩家0>玩家3>玩家1>玩家2 说明:比较大小并排序有许多算法,小

  • 利用Python编写简易版德州扑克小游戏

    目录 德州扑克简要介绍 什么是德州扑克 游戏规则简要介绍 德州扑克游戏的python实现过程 游戏初始化 评选赢家 游戏主题函数 游戏体验与展示 模块不足与后续改进 德州扑克简要介绍 什么是德州扑克 德州扑克不知道大家是否玩过,它是起源于美国的得克萨斯州的一种博弈类卡牌游戏,英文名叫做Texas Hold’em Poker.玩法上又分为常规桌(Cash, 现金局),单桌赛(SNG)和多桌锦标赛(MTT).虽然扑克种类繁多,但基本的扑克规则通常保持一致.它是一种考验心态与谋略的游戏. 游戏规则简要

  • Python实战之实现康威生命游戏

    前言 康威生命游戏设计并不难,我的思路就是借助pygame进行外观的展示,最近一段时间的游戏项目都是使用pygame进行的,做起来比较顺利.内部代码的实现也比较简单根据他的规则我们需要的是多次的计算和判断,再刷新数组. 一.康威生命游戏规则 当周围仅有1个或没有存活细胞时, 原来的存活细胞进入死亡状态.(模拟生命数量稀少)当周围有2个或3个存活细胞时, 网格保持原样.当周围有4个及以上存活细胞时,原来的存活细胞亦进入死亡状态.(模拟生命数量过多)当周围有3个存活细胞时,空白网格变成存活细胞.(模

  • Python实战之画哆啦A梦(超详细步骤)

    一.写在前面 本文基于64位windows系统(鼠标右键点击桌面"此电脑"图标--属性可查看电脑系统版本).python3.x(pycharm自动安装的版本, 3.0以上).文中代码内容所使用的工具是pycharm-community-2020.1,实践中如有碰到问题,可留言提问. 前阵子有看到zh上有大神画了这个哆啦A梦的大头贴,自己也来试了一下,很简单,但长篇整段的代码对刚刚学会海龟绘图语法的初学者来说还是有一定难度,所以来做一个拆解版详细步骤讲解实现. 二.效果图 言归正传,先上

  • python实战之用emoji表情生成文字

    一.前言 昨夜刷b站的时候,看到了一条评论,形式如下图,于是心血来潮写了个python脚本,可以根据文字来生成这种由emoji拼接成的"文字". 二.思路 代码的思路极其简单,这种形式的"文字"可以理解为一张黑白图片,图中的白色使用一种emoji表情代替,黑色使用另一种emoji代替.那么想要生成这种"文字",则我们只需要两步即可,第一步是根据输入文字得到一张图,第二步则是遍历这张图片,当前像素的颜色为黑色时我们输出

  • Python实战项目用PyQt5制作漫画脸GUI界面

    目录 最终效果 前言 1.PyQt5的安装. 1.PyQt5库的安装. 2.qt designer 布局的使用. 1:打开这个设计师 2:创建一个窗口 3:设计界面,用鼠标拖动左边的控件. 4:ui转化为py 5:在python上面运行转化后的py文件 6:运行py文件 3.百度智能云api的调用. 4.调控界面的控件. 5.最终成果 6.总结 最终效果 前言 这是最近在学qt这个东西,然后又学会了调用api,然后就想了用pyqt5做一个GUI界面,后期也可以打包分享给其他人使用,所以就最近就写

  • Python实战之基于OpenCV的美颜挂件制作

    目录 基于 Snapchat 的增强现实 胡子挂件融合 完整代码 眼镜挂件融合 完整代码 基于 Snapchat 的增强现实 胡子挂件融合 第一个项目中,我们将在检测到的脸上覆盖了一个小胡子.我们可以使用从摄像头捕获的连续视频帧,也可以使用单张测试图像.在进行实际讲解程序的关键步骤前,首先查看应用程序预期输出的结果图像: 项目的第一步是检测图像中的人脸.如上图所示,使用青色矩形绘制图像中检测到的人脸的位置和大小:接下来迭代图像中所有检测到的人脸,在其区域内搜索鼻子,粉红色矩形表示图像中检测到的鼻

  • python实战之PyQt5实现漫画脸

    目录 最终效果 前言 1.PyQt5的安装. 2.qt designer 布局的使用. 3.百度智能云api的调用. 4.调控界面的控件. 5.最终成果 6.总结 最终效果 前言 这是最近在学qt这个东西,然后又学会了调用api,然后就想了用pyqt5做一个GUI界面,后期也可以打包分享给其他人使用,所以就最近就写了一个简便的gui界面,有点不好看,大家凑合看一下,主要是学思路的哈! 1.PyQt5的安装. 1.PyQt5库的安装. PyQt5的安装有两个办法. 1:pip install -x

随机推荐