我正在开发回合制游戏,并且具有以下结构的玩家表
players = {
["p1"] = Player(),
["p2"] = Player(),
...
["pn"] = Player()
}
我想做的是遍历表中的每个玩家(在每个玩家玩完回合之后)并回到第一个索引(在这种情况下为“ p1”)
因此,当我运行代码时,它应该执行以下操作
function shift()
-- do stuff to shift the player's turn
print(player.name)
end
shift() -- "p1"
shift() -- "p2"
...
shift() -- "pn"
shift() -- "p1"
-- and so on
答案 0 :(得分:1)
local index
function shift()
if not index then index = next(players) end
print(players[index].name)
index = next(players, next)
end
如果我正确理解了这个问题,那应该做你想要的;)
编辑:
正如Egor Skriptunoff在其评论中指出的那样,您还可以让函数返回键并使用and
代替if
:
local index
function shift()
index = next(players,index)
return index or next(players)
end
答案 1 :(得分:0)
您的循环应该类似于:
for k, player in pairs(players) do
player:Player()
end
如果您想调出第一个播放器功能,则只需执行以下操作:
players[1]:Player()
希望这对您有所帮助!
编辑:要使其无休止,只需将其放入“重复直到循环”中,这样看起来就像:
repeat
<for loop across all players>
until <condition>