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()
有没有更好的方法来做我可以在播放器类或一些我不知道的列表函数中实现的东西?
提前致谢
解决方案
方法一
您可以使用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
推荐阅读
- javascript - 如何使用云耀斑工作者 [javascript] 将文件上传到 file.io?
- c++ - emplacement 函数通过就地构造而不是通过赋值向容器添加新元素是什么意思?
- html - 如何在 React-Bootstrap 中删除输入边框?
- r - 为什么我在右手轴上的图会覆盖我现有的图?
- javascript - 检查字符串是否有 unicode '\u25CF'
- unity3d - 新 Google Play 控制台中的许可证 Api 密钥在哪里
- android - Jetpack Compose 不可变 ImageBitmap 传递给 Canvas
- c# - Web API 中的 CancellationToken 无法正常工作
- python - Python-docx==0.8.7 包兼容64位windows
- http - 在浏览器中访问 IP 摄像机流