首页 > 解决方案 > 确定哪个玩家在移动

问题描述

我正在尝试在 python 中构建一个纸牌游戏以了解 OOP。我正在寻找一种方法来确定哪些玩家正在移动。纸牌游戏的规则是四个玩家中的一个是庄家,然后下一个是第一个出牌的玩家。我已经寻找了一些方法来做到这一点,但我找不到解决方案。目前我有这样的事情:

player_list = [p1, p2, p3, p4]

def func_turn(first_player):
    for i in range(len(player_list)): 

        if first_player + i == 4:
            first_player = 0
        player_list[first_player + i].play_card()

有没有更好的方法来做我可以在播放器类或一些我不知道的列表函数中实现的东西?

提前致谢

标签: pythonpython-3.xalgorithmlistclass

解决方案


方法一

您可以使用itertools模块中的一些方法为您的案例创建适当的生成器。让我们使用示例列表

a = [1, 2, 3, 4]

首先,我们想要cycle列表以使其不断重复。这会给我们

>>> b = itertools.cycle(a)    # generator object that gives [1, 2, 3, 4, 1, 2, ...]

接下来,我们要向前跳过一定的量。这是您的first_player变量,我们想要获取玩家数量的n元素。n我们可以使用该islice方法来完成此操作

>>> itertools.islice(b, 2, 2 + 4)   # generator object that gives [3, 4, 1, 2]

把这一切放在一起,你得到

import itertools as it

def func_turn(start):
    for player in it.islice(it.cycle(player_list), start, start + len(player_list)):
        player.play_card()

方法二

您可以使用collections.deque和它的旋转方法在​​每回合后更新玩家顺序

from collections import deque

player_list = deque([p1, p2, p3, p4])

def func_turn():
    for player in player_list:
        player.play_card()

    player_list.rotate(-1)    # will be deque([p2, p3, p4, p1]) after 1 rotation

推荐阅读