模拟实现火车牌

题目描述:

模拟实现火车牌,双方各有自己的牌库,双方轮流顺序出牌,把出的牌交替、顺序摆放,当出牌时出到一样的,就收回两张相同牌之间的所有牌放到自己的牌库,有一方牌库清空则对方胜利。返回胜利方、回合数、胜利方的剩余牌情况

思路:

3个队列(只要会模拟,桌子上的牌堆,玩家手里的牌堆就行了)。

玩家手里的牌堆用双端队列deque模拟,因为是队列,先进先出,从左边出队。

牌桌上的牌堆,用普通的list即可。

代码演示:

下面代码中,我们模拟了火车牌游戏的过程。玩家1和玩家2分别有自己的牌库,每回合轮流出牌,直到有一方牌库清空。最后输出胜利方、回合数以及胜利方剩余的牌情况。可以根据需要修改初始牌库来进行不同的测试。

from collections import deque
card_q1=deque([1,2,3,4,5])#玩家1手里的牌堆
card_q2=deque([8,7,6,4,9])#玩家2手里的牌堆
table=[]    #模拟牌桌
turn=0      #模拟轮次,判断是玩家1还是玩家2的出牌回合。
while card_q1 and card_q2:#迟早会打空手牌
    # print('桌上牌堆',table)
    if turn%2==0:
        #偶数回合是玩家1的回合
        curcard=card_q1.popleft()
        if not table:
            table.append(curcard)
        else:
            table.append(curcard)
            #要从倒数第二个开始,因为已经把cur_card加到table中了
            for j in range(len(table)-2,-1,-1):
                if table[j]==curcard:
                    card_q1.extend(table[j:])
                    table=table[:j]
                    break
    else:
        #奇数回合是玩家2的回合
        curcard=card_q2.popleft()
        if not table:
            table.append(curcard)
        else:
            table.append(curcard)
            for j in range(len(table)-2,-1,-1):
                if table[j]==curcard:
                    card_q2.extend(table[j:])
                    table=table[:j]
                    break
    turn+=1


if not card_q1:
    winner='玩家2'
else:
    winner='玩家1'
print('玩家1牌库:',list(card_q1))
print('玩家2牌库:',list(card_q2))
print('获胜者:',winner)
print('桌上牌堆',table)

测试用例:

#用例如下:

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值