python模拟斗地主发牌

本文实例为大家分享了python模拟斗地主发牌的具体代码,供大家参考,具体内容如下

题目:趣味百题之斗地主

扑克牌是一种非常大众化的游戏,在计算机中有很多与扑克牌有关的游戏。例如,在Windows操作系统下自带的纸牌、红心大战等。在扑克牌类的游戏中,往往都需要执行洗牌操作,就是将一副牌完全打乱,使其排列没有规律。

要求:

1、54张扑克牌发个3个玩家,农民17张,地主20张。
2、自动生成一幅扑克牌组;洗牌;发牌到玩家手中;将玩家手中扑克牌按花色大小整理好。**

'''
趣味百题-发扑克牌-斗地主
请编程实现发扑克牌

Version: 0.1
Author: jasn
Date: 2020-01-01

主要知识点:random的用法,类的定义和调用
主要功能点:用Python的类实现斗地主的初始化、洗牌、发牌、抢地主、理牌、花色对应。代码如下
'''
import random

class doudizhu:
 #定义54张牌
 def __init__(self):
  self.a=[]
  for i in range(54):
   self.a.append(i)
 #洗牌
 def xipai(self):
  random.shuffle(self.a) #洗牌
  n = random.randint(1, 54)
  b = self.a[:n] # 从n的位置切牌
  c = self.a[n:]
  self.a = b + c

  #发牌
 def fapai(self):
  self.user1=self.a[0:-3:3] #玩家1,获得牌的顺序为 0,3,6,9...
  self.user2=self.a[1:-3:3] #玩家2,获得牌的顺序为 1,4,7,10...
  self.user3=self.a[2:-3:3] #玩家3,获得牌的顺序为 2,5,8,11...
  self.user4=self.a[-3:] #底牌 ,顺序为51,52,53
 #抢地主
 def qiangdizhu(self):
  i=random.randint(1,3)
  self.dizhu=i #定义一个地主的实例
  if i == 1:
   self.user1+=self.user4
  if i == 2:
   self.user2+=self.user4
  if i == 3:
   self.user3+=self.user4
 #码牌
 def mapai(self):
  self.user1.sort(reverse=True) ##从小到大码牌
  self.user2.sort(reverse=True)
  self.user3.sort(reverse=True)
 #牌序和花色一一对应
 def yingshe(self):
  huase = [(0, '方片3'), (1, '梅花3'), (2, '红桃3'), (3, '黑桃3'),
     (4, '方片4'), (5, '梅花4'), (6, '红桃4'), (7, '黑桃4'),
     (8, '方片5'), (9, '梅花5'), (10, '红桃5'), (11, '黑桃5'),
     (12, '方片6'), (13, '梅花6'), (14, '红桃6'), (15, '黑桃6'),
     (16, '方片7'), (17, '梅花7'), (18, '红桃7'), (19, '黑桃7'),
     (20, '方片8'), (21, '梅花8'), (22, '红桃8'), (23, '黑桃8'),
     (24, '方片9'), (25, '梅花9'), (26, '红桃9'), (27, '黑桃9'),
     (28, '方片10'), (29, '梅花10'), (30, '红桃10'), (31, '黑桃10'),
     (32, '方片J'), (33, '梅花J'), (34, '红桃J'), (35, '黑桃J'),
     (36, '方片Q'), (37, '梅花Q'), (38, '红桃Q'), (39, '黑桃Q'),
     (40, '方片K'), (41, '梅花K'), (42, '红桃K'), (43, '黑桃K'),
     (44, '方片A'), (45, '梅花A'), (46, '红桃A'), (47, '黑桃A'),
     (48, '方片2'), (49, '梅花2'), (50, '红桃2'), (51, '黑桃2'),
     (52, 'BlackJoker'), (53, 'RedJoker')]
  zdpai = dict(huase)
  paiuser1=''
  for i in range(len(self.user1)):
   paiuser1+=zdpai[self.user1[i]]+' ' #以字符串的形式将牌储存起来
  paiuser2 = ''
  for i in range(len(self.user2)):
   paiuser2 += zdpai[self.user2[i]] + ' '
  paiuser3 = ''
  for i in range(len(self.user3)):
   paiuser3 += zdpai[self.user3[i]] + ' '
  paiuser4 = ''
  for i in range(len(self.user4)):
   paiuser4 += zdpai[self.user4[i]] + ' '

  self.user1 = paiuser1 #把花色对应好的牌的序列重新赋给三个玩家的实例属性
  self.user2 = paiuser2
  self.user3 = paiuser3
  self.user4 = paiuser4

if __name__ == '__main__':
 Player=doudizhu() #将类辅助给playes,方便调用
 Player.xipai()
 Player.fapai()
 Player.qiangdizhu()
 Player.mapai()
 Player.yingshe()

print('本局地主是:玩家{}'.format(Player.dizhu))
print('底牌:',Player.user4)
print('玩家一:',Player.user1)
print('玩家二:',Player.user2)
print('玩家三:',Player.user3)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

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

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

  • 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模拟实现斗地主发牌

    题目:趣味百题之斗地主 扑克牌是一种非常大众化的游戏,在计算机中有很多与扑克牌有关的游戏.例如,在Windows操作系统下自带的纸牌.红心大战等.在扑克牌类的游戏中,往往都需要执行洗牌操作,就是将一副牌完全打乱,使其排列没有规律. 要求: 1.54张扑克牌发个3个玩家,农民17张,地主20张. 2.自动生成一幅扑克牌组:洗牌:发牌到玩家手中:将玩家手中扑克牌按花色大小整理好.** ''' 趣味百题-发扑克牌-斗地主 请编程实现发扑克牌 Version: 0.1 Author: jasn Date

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

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

  • 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模拟斗地主发牌的具体代码,供大家参考,具体内容如下 题目:趣味百题之斗地主 扑克牌是一种非常大众化的游戏,在计算机中有很多与扑克牌有关的游戏.例如,在Windows操作系统下自带的纸牌.红心大战等.在扑克牌类的游戏中,往往都需要执行洗牌操作,就是将一副牌完全打乱,使其排列没有规律. 要求: 1.54张扑克牌发个3个玩家,农民17张,地主20张. 2.自动生成一幅扑克牌组:洗牌:发牌到玩家手中:将玩家手中扑克牌按花色大小整理好.** ''' 趣味百题-发扑克牌-斗地

  • java模拟斗地主发牌功能

    本文实例为大家分享了java模拟斗地主发牌的具体代码,供大家参考,具体内容如下 1.案例介绍 规则: 组装54张扑克牌 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,后三张留作底牌 查看三人各自手中的牌(按照牌的大小排序).底牌 2. 分析 1).准备牌: 完成数字与纸牌的映射关系: 使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典). 2).洗牌: 通过数字完成洗牌发牌 发牌: 将每个人以及底牌设计为ArrayList,将后3张牌直接存

  • java模拟实现斗地主发牌小程序

    一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程 首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,最后就是发牌了,不过发牌的时候要注意还要在最后留三张底牌. 主要使用的类有 ArrayList:用来存储扑克,Collections用来洗牌. import java.util.ArrayList; import java.util.Collections; /* * 模拟斗地主发牌 一共54张牌 * 买牌 * 洗牌 * 发牌 * */ public cl

  • Java模拟实现斗地主发牌

    本文实例为大家分享了Java模拟实现斗地主发牌的具体代码,供大家参考,具体内容如下 题目: 模拟斗地主的发牌实现,54张牌,每张牌不同的花色(红心,黑桃,方块,梅花),牌的点数(3,4,5,6,7,8,9,10,J,Q,K,A,2,King,Queen),另有三名玩家,要求(使用面向对象的方式实现): 1.随机产生一名地主 2.随机向三名玩家发牌,最后的底牌自动发给地主 3.显示出每名玩家手中的牌 4.要求根据点数自动对玩家手中的牌排序实现(*) 提示:玩家类,牌类,游戏类(算法) 步骤分析:

  • php模拟实现斗地主发牌

    本文实例为大家分享了php实现斗地主发牌的具体代码,供大家参考,具体内容如下 闲来无聊,就写了这个方法,也算是熟悉下php的数组操作,还请各位大神多指教.$arr 数组,好像有点问题,应该 2=>'方片2',3=>'梅花2',4=>'红心2',5=>'黑桃2', 等的顺序换下.看来牌打少了.估计这个方法,一般程序都不会用吧. <?php wash_card(); function wash_card(){ $tmp = $arr = array( 0=>'大王',1=&

  • C#使用二维数组模拟斗地主

    本文实例讲述了C#使用二维数组模拟斗地主的方法.分享给大家供大家参考.具体如下: package com.pb.demo; import java.util.Arrays; import java.util.Random; /** * 扑克牌随机发牌♠♥♣♦ 二维数组实现 * */ public class Puker { public static void main(String[] args) { // 定义数组 String[][] puker = new String[5][]; pu

  • python实现斗地主分牌洗牌

    本文实例为大家分享了python实现斗地主分牌洗牌的具体代码,供大家参考,具体内容如下 1.建立一个序列,共54个元素,表示一副扑克牌,初始化时是有顺序的. 2.编写一段代码完成洗牌功能,即将刚才的序列从有序的排列变成随机的无序排列. 3.编写一段代码完成切牌功能,即找到一个1-54的随机数,将刚才洗牌后的序列从这个随机数开始. 4.编写一段代码完成发牌功能,将刚才这个切牌后的无序序列,按顺序分发到三个序列中去,并剩余三张底牌(也是一个序列). 5.编写一段代码完成理牌功能,首先将分牌后的每个序

  • java代码实现斗地主发牌功能

    本文实例为大家分享了java实现斗地主发牌功能的具体代码,供大家参考,具体内容如下 实现斗地主发牌功能 共54张牌,地主比其他两名玩家多三张牌. 有一个card牌类和player玩家类,还有一个发牌类用于实现发牌的方法. 为了模拟每个玩家的牌都是随机的,我是这样想的: 1)初始化方法:用于将54张牌存到一个数组里,每张牌都一个唯一的序号. 2) 利用随机数,将每个序号打乱存到一个新数组里. 3)再根据序号取到初始化牌库数组内的牌,存到每个玩家的牌集合内. 附一个在老师指导下写的:斗地主发牌功能,

  • 用java实现斗地主发牌过程

    本文实例为大家分享了java实现斗地主发牌过程的具体代码,供大家参考,具体内容如下 一.牌类实现 定义牌的相关属性,点数.花色.大小 package com.softeem.lesson18.doudizhu; import java.util.Objects; public class Card { //牌面值 private String name; //花色 private String flower; //点数 private int num; public Card() { // TO

  • 使用JavaSE来模拟斗地主

    通过模拟斗地主案例来练习集合的使用 结果预览: 每次发牌后,三位玩家的手牌是随机的并且已经按照手牌大小排完序,运行两次验证手牌的随机性. 马老师的牌还不错,芜湖~起飞 思路: 1.创建HashMap,键是编号,值是牌. 2.创建ArrayList,存储编号. 3.创建花色数组和点数数组. 4.从0开始往HashMap里面存储编号,并存储对应的牌.同时往ArrayList里面存储编号. 5.洗牌(洗的是编号),用Collections的shuffl()方法实现. 6.发牌(发的也是编号,为了保证编

随机推荐