确定哪个玩家正在移动

2024-06-01 10:57:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用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()

有没有更好的方法可以在player类或一些我不知道的列表函数中实现呢

提前谢谢


Tags: 方法游戏规则玩家listoopfirstplayer
1条回答
网友
1楼 · 发布于 2024-06-01 10:57:14

方法1

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

a = [1, 2, 3, 4]

首先,我们要^{}列表,以便它不断重复。这将给我们

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

下一步,我们想向前跳一段距离。这是您的first_player变量,我们想要获取n元素,其中n是玩家的数量。我们可以使用^{}方法来实现这一点

>>> 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()

方法2

你可以使用^{}和它的rotate方法在每次回合后更新玩家顺序

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

相关问题 更多 >