疫情困在家里实在无聊,想起小时候和妈妈玩小猫钓鱼的游戏,女儿四岁,就和女儿尝试玩下。

规则很简单,一副牌54张,两个人平均分(大部分情况女儿分得多),牌面向下,每人轮流拿自己牌的最上面那张放到台面上,台面的牌堆按放的顺序摆放。如果台面上有相同数字的牌, 就把当前放的牌到相同数字的牌收入自己的牌堆下面(意思小猫钓到鱼了)。

玩了一下午还不错,小家伙蛮开心的,和我小时候一样,总是喜欢钓到大小王🃏。

import random
from collections import deque


def play():
    # black joker + red joker + rest
    cards = list('BR' + 'A23456789TJQK' * 4)
    random.shuffle(cards)

    players = (deque(cards[:27]), deque(cards[27:]))
    print(players)
    pool = []
    turn = 0

    while len(players[0]) > 0 and len(players[1]) > 0:
        player = turn % 2
        card = players[player].pop()
        if card in pool:
            idx = pool.index(card)
            players[player].extendleft(pool[idx:] + [card])
            pool = pool[:idx]
        else:
            pool.append(card)
        turn += 1
        print(f'{turn} -> {players}')

运行了几次,发现都能收敛,游戏都能结束。严格的数学推导回头思考下,还有结束时候平均经过多少轮。