例如,我已经开始编码UNO!游戏中我需要做反向卡。整个“主要游戏代码”,您可以在其中放置卡并重新分类堆等。“主要游戏代码”在以下循环中:
while self.gamestr==True:
for l in range(1,players+1):
而且我需要在循环内将循环设置为range(1,players + 1,-1),然后在仍处于循环中的情况下再次将其更改回原来的范围!
预先感谢,
答案 0 :(得分:3)
没有简单的方法可以执行您想要的操作。您可以也许将列表倒置,但是您还需要移动列表的一部分以确保正确的播放器在行中“下一个”。
一个更好的选择是简单地使用另一种循环。最简单的方法可能是使用while
循环,并在一些可以更改的变量中跟踪您所在的索引以及递增的方向:
players_list = range(1, players+1) # not actually a list in Python 3, but that doesn't matter
player_index = 0
player_direction = 1 # going forwards in the list, to start
while True:
current_player = players_list[player_index]
# do game stuff here with current_player
if game_over:
break
if reverse:
player_direction = -player_direction
players_index = (players_index + player_direction) % players # update for next index
您也许还可以将某些逻辑放入生成器函数中。这样一来,您就可以封装出一些有点混乱的循环和反转逻辑,并使主循环代码仅为for player in player_gen()
。唯一棘手的事情是弄清楚您的游戏逻辑如何告诉生成器何时撤消(以及何时退出)。如果生成器是某个类的方法(也许是Game
类的方法),那么使用属性或方法调用来为您处理事情就很容易了(game_over
变量可以是{{ 1}},而self.game_over
的翻转可以在player_direction
方法中进行。
答案 1 :(得分:0)
这只是如何完成此操作的demo
,在绘制通配符时,您可以使用切片和相反的步骤[::-1]
players = [1, 2, 3]
while True:
for i, v in enumerate(players):
if v == 1:
print('wild card')
players = players[i - 1::-1] + players[:i - 1:-1]
print(players)
for i, v in enumerate(players):
if v == 3:
print('wild card')
players = players[i - 1::-1] + players[:i - 1:-1]
print(players)
break
wild card [3, 2, 1] wild card [1, 2, 3]
在这里,我们看到wild
是否在player 1
上,那么它变成player 3
的回合游戏,当wild
在player 3
上时,它又反转了及其在player 1
上。这是适用于您的游戏的总体思路,这种格式只是为了演示。