python实现四人制扑克牌游戏


Posted in Python onApril 22, 2020

本文实例为大家分享了python实现四人制扑克牌游戏的具体代码,供大家参考,具体内容如下

题目:

设计一个简单的四人制扑克牌游戏,能够完成以下功能:

1. 洗牌
2. 发牌
3.自定义规则,在每轮单张出牌时,判定赢家
4.自定义规则,判定最终的赢家

规则简化版:

仅能出单张牌,且出牌时,每个人出的是自己手中牌中刚好能压过上家的最小牌,最先出完的为赢家

import random
from random import choice
flower = ['\u2660','\u2663','\u2665','\u2666']
pai = ['3','4','5','6','7','8','9','10','J','Q','K','A','2']
list = []
list0 = []#储存发的牌
list1 = []
list2 = []
list3 = []
value = []
value0 = []#储存牌代表的值
value1 = []
value2 = []
value3 = []
l00 = []#储存进行升序排序后的牌
l11 = []
l22 = []
l33 = []
for i in flower:
  for j in pai:
    list.append(i+j)
for i in range(4):
  for j in range(13):
    value.append(j)
d = dict(zip(list,value))
for i in range(13):
  for j in range(4):
    if(j == 0):
      k = choice(list)#随机选牌
      for x in range(len(list)):
        if(k == list[x]):#和链表的牌进行匹配,删掉对应项
          value0.append(d[k])
          list.pop(x)
          break
      list0.append(k)
    if(j == 1):
      k = choice(list)
      for x in range(len(list)):
        if (k == list[x]):
          value1.append(d[k])
          list.pop(x)
          break
      list1.append(k)
    if (j == 2):
      k = choice(list)
      for x in range(len(list)):
        if (k == list[x]):
          value2.append(d[k])
          list.pop(x)
          break
      list2.append(k)
    if (j == 3):
      k = choice(list)
      for x in range(len(list)):
        if (k == list[x]):
          value3.append(d[k])
          list.pop(x)
          break
      list3.append(k)
d0 = dict(zip(list0,value0))#将每个人的牌转换为字典形式
d1 = dict(zip(list1,value1))
d2 = dict(zip(list2,value2))
d3 = dict(zip(list3,value3))
l0 = sorted(d0.values())#对牌所代表的数字进行排序
l1 = sorted(d1.values())
l2 = sorted(d2.values())
l3 = sorted(d3.values())
#对发给每个人的牌进行排序
for i in range(len(l0)):
  for j in list0:
    if(l0[i] == d0[j]):
      l00.append(j)
      break
for i in range(len(l1)):
  for j in list1:
    if(l1[i] == d1[j]):
      l11.append(j)
      break
for i in range(len(l2)):
  for j in list2:
    if(l2[i] == d2[j]):
      l22.append(j)
      break
for i in range(len(l0)):
  for j in list3:
    if(l3[i] == d3[j]):
      l33.append(j)
      break
# y = choice(['0','1','2','3'])
print("第一个人的牌:",l00)
print("第二个人的牌:",l11)
print("第三个人的牌:",l22)
print("第四个人的牌:",l33)
y = random.randint(0,3)
if (y == 0):
  y = y + 1
  n = l0[0]
  l0.pop(0)
elif (y == 1):
  y = y + 1
  n = l1[0]
  l1.pop(0)
elif (y == 2):
  y = y + 1
  n = l2[0]
  l2.pop(0)
elif (y == 3):
  y = 0
  n = l3[0]
  l3.pop(0)
for i in range(13):
  if(y == 0):
    for j in range(len(l0)):
      if(l0[j] > n):
        n = l0[j]
        l0.pop(j)
        if(len(l0) != 0 and n >= l1[len(l1)-1] and n >= l2[len(l2)-1] and n >= l3[len(l3)-1]):#判断是否当前牌中最大牌,若是,则该此人继续出牌
          n = l0[0]
          l0.pop(0)
        break
    y = y + 1
  if (len(l0) == 0):
    print("赢家:第一个人")
    break
  if(y == 1):
    for j in range(len(l1)):
      if(l1[j] > n):
        n = l1[j]
        l1.pop(j)
        if (len(l1) != 0 and n >= l0[len(l0) - 1] and n >= l2[len(l2) - 1] and n >= l3[len(l3) - 1]):
          n = l1[0]
          l1.pop(0)
        break
    y = y + 1
  if (len(l1) == 0):
    print("赢家:第二个人")
    break
  if(y == 2):
    for j in range(len(l2)):
      if(l2[j] > n):
        n = l2[j]
        l2.pop(j)
        if (len(l2) != 0 and n >= l0[len(l0) - 1] and n >= l1[len(l1) - 1] and n >= l3[len(l3) - 1]):
          n = l2[0]
          l2.pop(0)
        break
    y = y + 1
  if (len(l2) == 0):
    print("赢家:第三个人")
    break
  if (y == 3):
    for j in range(len(l3)):
      if (l3[j] > n):
        n = l3[j]
        l3.pop(j)
        if (len(l3) != 0 and n >= l0[len(l0) - 1] and n >= l1[len(l1) - 1] and n >= l2[len(l2) - 1]):
          n = l3[0]
          l3.pop(0)
        break
    y = 0
  if (len(l3) == 0):
    print("赢家:第四个人")
    break
#将剩余牌从键值转化成牌
if(len(l0) != 0):
  for i in range(len(l0)):
    for j in list0:
      if(l0[i] == d0[j]):
        l0[i] = j
        break
if(len(l1) != 0):
  for i in range(len(l1)):
    for j in list1:
      if(l1[i] == d1[j]):
        l1[i] = j
        break
if(len(l2) != 0):
  for i in range(len(l2)):
    for j in list2:
      if(l2[i] == d2[j]):
        l2[i] = j
        break
if(len(l3) != 0):
  for i in range(len(l3)):
    for j in list3:
      if(l3[i] == d3[j]):
        l3[i] = j
        break
print("第一个人的牌:",l0)
print("第二个人的牌:",l1)
print("第三个人的牌:",l2)
print("第四个人的牌:",l3)

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

Python 相关文章推荐
2款Python内存检测工具介绍和使用方法
Jun 01 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
利用python将pdf输出为txt的实例讲解
Apr 23 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
Jun 24 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python scipy卷积运算的实现方法
Sep 16 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
Django bulk_create()、update()与数据库事务的效率对比分析
May 15 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
Nov 10 Python
python图片灰度化处理的几种方法
Jun 23 Python
如何在django中实现分页功能
Apr 22 #Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 #Python
python实现扑克牌交互式界面发牌程序
Apr 22 #Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 #Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 #Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 #Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
Apr 22 #Python
You might like
PHP 组件化编程技巧
2009/06/06 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
Python中的Classes和Metaclasses详解
2015/04/02 Python
python获取从命令行输入数字的方法
2015/04/29 Python
Python魔法方法详解
2019/02/13 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
python实现数据分析与建模
2019/07/11 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
python3 配置logging日志类的操作
2020/04/08 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
电子商务毕业生求职信
2013/11/10 职场文书
劳动模范事迹材料
2014/01/19 职场文书
自我鉴定书
2014/03/24 职场文书
三方股东合作协议书
2014/10/28 职场文书
班主任经验交流材料
2014/12/16 职场文书
党风廉正建设责任书
2015/01/29 职场文书
二审答辩状范文
2015/05/22 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis