分享一个学生时期玩的扑克游戏——吃面包
代码分为人机对决 和 机机对决,分别放入了两个函数里。
'''玩法:没大小鬼,一人26张牌,梅花间竹出牌,不算花色,若出的牌的数字和字母与已出的牌相同,则出牌方收取全部出了的牌,加上本来的手牌,洗牌后重新出牌。直到一方的手牌出完为止,没手牌一方胜利。
'''
def computer_poke(r='输入游戏次数'):'''电脑与电脑'''import randomround_times = []    #游戏次数for _ in range(r):#设置游戏次数#初始化参数    poke =[]   #牌组poke_1 =[]  #卡牌暂存列表1(用于牌在牌组间的移动)poke_2 =[] #卡牌暂存列表2(用于牌在牌组间的移动)poke_3 =[] #卡牌暂存列表3(用于牌在牌组间的移动)x = []     #手牌y = []      #手牌rounds = 0  #局数 a = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']b = ['方块', '梅花', '红桃', '黑桃']  #创建牌组for poke_1 in b:for poke_2 in a:poke_3 = poke_1 + str(poke_2)poke.append(poke_3)#洗牌,分发2分牌x, yrandom.shuffle(poke)times = 0for _ in range(52):times += 1if times <= 26:x.append(random.choice(poke))poke_1 = []    poke_1.append(x[-1])    poke.remove(poke_1[0])else:y.append(random.choice(poke))poke_1 = []    poke_1.append(y[-1])    poke.remove(poke_1[0])#比赛主要流程   guess = ['正', '反'] #猜先后出牌x_player = random.choice(guess)print('x_player 先手' if  x_player == '正' else 'y_player 先手')xy = []   #已打出在桌面上的牌if x_player == '正':while x != [] and y != []:   #胜出条件rounds += 1  #x 组写法和思路   while True:                                             xy.append(random.choice(x))     #随机打出一张手牌       poke_1 = []    #清空卡牌暂存列表poke_1.append(xy[-1])  #记录刚刚打出的手牌print('x 打出的牌: ' + str(poke_1))x.remove(poke_1[0])     #将刚刚打出的手牌从手牌中剔除poke_1 = poke_1[0]  #list转str                   print('桌面上的牌: ' + str(xy) + '\n')                                                         if poke_1[2:] in str(xy[:-1]):  #判断刚刚打出的牌的在桌上是重复                    x = x + xyrandom.shuffle(x)   #洗牌xy = [] #清空桌面卡牌else:break   #y 组写法和思路与 x 组一样                while True:                 xy.append(random.choice(y))         poke_1 = []    poke_1.append(xy[-1])print('y 打出的牌: ' + str(poke_1)) y.remove(poke_1[0])poke_1 = poke_1[0]                  print('桌面上的牌: ' + str(xy) + '\n')if poke_1[2:] in str(xy[:-1]):y = y + xyrandom.shuffle(y)xy = []else:break    round_times.append(rounds)  #记录局数       print('经过' + str(rounds) + '次的对局, ', end = '')print('x_player 胜利!\n' if x == [] else 'y_player 胜利!\n')else:#写法与思路与if一样while x != [] and y != []:rounds += 1            while True:                             xy.append(random.choice(y))             poke_1 = []    poke_1.append(xy[-1])print('x 打出的牌: ' + str(poke_1))y.remove(poke_1[0])  poke_1 = poke_1[0]                 print('桌面上的牌: ' + str(xy) + '\n')if poke_1[2:] in str(xy[:-1]):           y = y + xyrandom.shuffle(y)xy = []   else:break              while True:xy.append(random.choice(x))          poke_1 = []    poke_1.append(xy[-1])print('y 打出的牌: ' + str(poke_1)) x.remove(poke_1[0])poke_1 = poke_1[0]                  print('桌面上的牌: ' + str(xy) + '\n')if poke_1[2:] in str(xy[:-1]):x = x + xyrandom.shuffle(x)xy = []else:breakround_times.append(rounds)print('经过' + str(rounds) + '次的对局, ', end = '')   print('x_player 胜利!\n' if x == [] else 'y_player 胜利!\n')print(round_times)print('一共进行了 ' + str(len(round_times)) + ' 次游戏,每次游戏最少进行 ' + str(min(round_times)) + ' 局,最多进行 ' + str(max(round_times)) + ' 局')def user_poke():'''玩家与电脑''' import randomname = input('请输入你的名字: ')round_times = []  #游戏次数for _ in range(1):#设置游戏次数#初始化参数    poke =[]   #牌组poke_1 =[]  #牌组1(用于牌在牌组间的移动)poke_2 =[] #牌组2(用于牌在牌组间的移动)poke_3 =[] #牌组3(用于牌在牌组间的移动)x = []     #手牌y = []      #手牌rounds = 0  #局数 a = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']b = ['方块', '梅花', '红桃', '黑桃']  #创建牌组for poke_1 in b:for poke_2 in a:poke_3 = poke_1 + str(poke_2)poke.append(poke_3)#洗牌,分发2分牌user, y(狄仁杰(电脑))random.shuffle(poke)times = 0for _ in range(52):times += 1if times <= 26:x.append(random.choice(poke))poke_1 = []    poke_1.append(x[-1])    poke.remove(poke_1[0])else:y.append(random.choice(poke))poke_1 = []    poke_1.append(y[-1])    poke.remove(poke_1[0])#比赛主要流程   guess = ['正', '反'] #猜先后出牌  user = input("猜'正' '反' 决定出牌顺序 输入A = '正' B = '反': ")while True:if user.lower() not in ['a','b']:            print('输入错误,请重新输入')            user = input("输入A = '正' B = '反': ")else:break          if user.lower() == 'a':user = '正'else:user = '反'guess_res = random.choice(guess)print('硬币抛出结果: ' + guess_res)print('玩家选择: ' + user)print(str(name) + ' 先手\n' if user == guess_res else '狄仁杰(电脑) 先手\n')xy = []  #已打出在桌面上的牌if user == guess_res:while x != [] and y != []:   #胜出条件rounds += 1  while True:print('你的手牌有' + str(len(x)) + '张\n' + str(x)) #玩家的手牌while True:           try:user = input('请选择打出第几张手牌: ')                     while True:                                 if int(user) not in range(1, len(x)):                   print('输入错误,请重新输入')            user = input('请选择打出第几张手牌: ')else:    breakbreakexcept ValueError:print('输入错误,请重新输入')                                    user = x[int(user) - 1]                            xy.append(user)     #玩家打出一张手牌       poke_1 = []    poke_1.append(xy[-1])   #记录刚刚打出的手牌print(str(name) + ' 打出的牌: ' + str(poke_1))x.remove(poke_1[0])     #将刚刚打出的手牌从手牌中剔除poke_1 = poke_1[0]  #list转str                   print('桌面上的牌: ' + str(xy) + '\n')'''判断刚刚打出的牌的在桌上是重复(不算花色,只算数字和字母)若重复,则收取桌面上所有牌加到手牌上,在重新出牌'''if poke_1[2:] in str(xy[:-1]):        x = x + xyrandom.shuffle(x)   #洗牌xy = [] else:break              while True: #写法和思路与 x手牌一样xy.append(random.choice(y))            poke_1 = []    poke_1.append(xy[-1])print('狄仁杰(电脑) 打出的牌: ' + str(poke_1))   y.remove(poke_1[0])poke_1 = poke_1[0]                  print('桌面上的牌: ' + str(xy) + '\n')if poke_1[2:] in str(xy[:-1]):y = y + xyrandom.shuffle(y)xy = []else:break    round_times.append(rounds)  #记录局数       print('经过' + str(rounds) + '次的对局, ', end = '')print(str(name) + ' 胜利!\n' if x == [] else '狄仁杰(电脑) 胜利!\n')     else:   #写法与思路与if一样while x != [] and y != []:rounds += 1            while True:                             xy.append(random.choice(y))             poke_1 = []    poke_1.append(xy[-1])print(str(name) + ' 打出的牌: ' + str(poke_1))y.remove(poke_1[0])  poke_1 = poke_1[0]                 print('桌面上的牌: ' + str(xy) + '\n')if poke_1[2:] in str(xy[:-1]):           y = y + xyrandom.shuffle(y)xy = []   else:break              while True:print('你的手牌有' + str(len(x)) + '张\n' + str(x)) #玩家的手牌while True:           try:user = input('请选择打出第几张手牌: ')                     while True:                                     if int(user) not in range(1, len(x)):                   print('输入错误,请重新输入')            user = input('请选择打出第几张手牌: ')else:    breakbreakexcept ValueError:print('输入错误,请重新输入')                user = x[int(user) - 1]                            xy.append(user)     #随机打出一张手牌           poke_1 = []    poke_1.append(xy[-1])print('狄仁杰(电脑) 打出的牌: ' + str(poke_1))   x.remove(poke_1[0])poke_1 = poke_1[0]                  print('桌面上的牌: ' + str(xy) + '\n')if poke_1[2:] in str(xy[:-1]):x = x + xyrandom.shuffle(x)xy = []else:breakround_times.append(rounds)print('经过' + str(rounds) + '次的对局, ', end = '')   print(str(name) + ' 胜利!\n' if x == [] else '狄仁杰(电脑) 胜利!\n')

卡牌游戏——吃面包(人机对决 和 机机对决)相关推荐

  1. H - 卡牌游戏(简单期望)

    Description 小贝喜欢玩卡牌游戏.某个游戏体系中共有N种卡牌,其中M种是稀有的.小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝.普通卡可能多次出现,而稀 ...

  2. 牛客国庆集训派对Day2 H 卡牌游戏 [ 期望dp ]

    题目描述 小贝喜欢玩卡牌游戏.某个游戏体系中共有N种卡牌,其中M种是稀有的.小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝.普通卡可能多次出现,而稀有卡牌不会被重 ...

  3. 《刀塔传奇》最初不是卡牌游戏——专访龙图COO王彦直

    http://game.donews.com/201407/2814031.shtm "最早是以投资商的身份去合作,后来又转换成发行商的身份去合作." 6月28日,<刀塔传奇 ...

  4. 【概率DP】$P2059$ 卡牌游戏

    [概率DP]P2059 卡牌游戏 链接 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张 ...

  5. 天池 在线编程 卡牌游戏(01背包)

    文章目录 1. 题目 2. 解题 1. 题目 你跟你的朋友在玩一个卡牌游戏,总共有 n 张牌. 每张牌的成本为 cost[i] 并且可以对对手造成 damage[i] 的伤害. 你总共有 totalM ...

  6. 动漫品牌“爆笑虫子”宣布与xNFT Protocol战略合作,开发NFT数字卡牌游戏

    2021年4月23日,xNFT Protocol与动漫品牌"爆笑虫子"进行战略合作,推动"爆笑虫子"在卡牌游戏领域进行数字化转型.IP的数字(NFT)化是xNF ...

  7. CCF201612-5 卡牌游戏(募集解题代码)

    试题编号: 201612-5 试题名称: 卡牌游戏 时间限制: 3.0s 内存限制: 256.0MB 问题描述: 问题描述 小Q和小M是游戏数值策划师,他们最近在测试自己新设计的卡牌对战游戏.游戏总共 ...

  8. 算法题 - 卡牌游戏问题 - Python

    问题描述: 卡牌游戏问题   小a和小b玩一个游戏,有 n张卡牌,每张上面有两个正整数 x, y.取一张牌时,个人积分增加 x,团队积分增加 y.求小a,小b各取若干张牌,使得他们的 个人积分相等,且 ...

  9. java卡牌游戏详解

    代码如下: package zxc;//文件夹名称 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.even ...

最新文章

  1. 机器学习/梯度下降算法
  2. 电商网站全链路压测实战
  3. evalin matlab,求解MATLAB问题
  4. python 自动下载脚本_Python实现115网盘自动下载的方法
  5. 【MySQL】轻松学习 唯一索引
  6. css 平移到某个位置_css怎么移图片位置?
  7. Skyline三维地理信息系统软件平台
  8. 汇编语言寄存器说明eax, ebx, ecx, edx, esi, edi, ebp, esp,eip
  9. 生鲜配送分拣管理系统哪家比较强?
  10. python爬取武汉二手房房价
  11. (教程) 个人微信公众号做查券机器人怎么关联优惠券小程序?
  12. 一文解读如何评估项目的价值和可行性?
  13. 电商抢购高并发JAVA简单实现
  14. 如何用java画坐标轴_在java中绘制极坐标图
  15. 双系统下ubuntu自动挂载windows盘
  16. 2021年10月云短信报告出炉,腾讯云蝉联冠军
  17. 强化学习:DDPG到MADDPG
  18. 语音识别芯片LD3320介绍续
  19. 编写一个脚本,输入自己的生日时间(YYYYMMDD),计算还有多少天多少个小时是自己的生日。
  20. 应用系统基础服务安装

热门文章

  1. 解决iOS的H5页面卡顿以及键盘回落后留白问题
  2. matlab回文字符判断程序,(c语言)回文字符串的判断,gets和scanf
  3. 中科大在光量子芯片领域取得重要进展,具有实用化应用前景
  4. VS2017 打开高版本VS2019的方法--C++版本
  5. Kotlin KTX 扩展库
  6. 高数 为什么1/n是发散的,而1/n^2是收敛的?
  7. CSDN修改用户名、昵称
  8. zipimport.ZipImportError: can‘t decompress data; zlib not available 解决
  9. 美研究团队开发出手机测试新型肺炎方案
  10. 算法的trick_目标检测算法中的常见trick