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 相关文章推荐
Python中字典(dict)和列表(list)的排序方法实例
Jun 16 Python
Python实现3行代码解简单的一元一次方程
Aug 18 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
python变量的存储原理详解
Jul 10 Python
python定时任务 sched模块用法实例
Nov 04 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
Django数据统计功能count()的使用
Nov 30 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 Python
python 制作磁力搜索工具
Mar 04 Python
python实现简单的名片管理系统
Apr 26 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 防止单引号,双引号在接受页面转义
2008/07/10 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
php数据访问之查询关键字
2016/05/09 PHP
smarty自定义函数用法示例
2016/05/20 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
JavaScript访问样式表代码
2010/10/15 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
Ruby元编程基础学习笔记整理
2016/07/02 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
期末考试动员演讲稿
2014/01/10 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
查摆问题整改措施
2014/10/24 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
中标通知书范本
2015/04/17 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫
Python中tqdm的使用和例子
2022/09/23 Python