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使用urllib2模块获取gravatar头像实例
Dec 18 Python
Python多线程编程(一):threading模块综述
Apr 05 Python
python编程开发之日期操作实例分析
Nov 13 Python
python模块smtplib学习
May 22 Python
python跳过第一行快速读取文件内容的实例
Jul 12 Python
Linux下python3.6.1环境配置教程
Sep 26 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
pytorch 在sequential中使用view来reshape的例子
Aug 20 Python
Python属性和内建属性实例解析
Jan 14 Python
Python enumerate内置库用法解析
Feb 24 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 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分页函数
2006/10/09 PHP
drupal 代码实现URL重写
2011/05/04 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
prototype 1.5 & scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
控制打印时页眉角的代码
2007/02/08 Javascript
js数组的操作详解
2013/03/27 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
Django实现简单分页功能的方法详解
2017/12/05 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
理货员的岗位职责
2013/11/23 职场文书
社会工作专业求职信
2014/07/15 职场文书
工程技术员岗位职责
2015/04/11 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
2016年会开场白台词
2015/06/01 职场文书
初中政教处工作总结
2015/08/12 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
PHP策略模式写法
2021/04/01 PHP
MySQL深分页问题解决思路
2022/12/24 MySQL