如何写这个片段更干净

时间:2012-08-15 09:02:29

标签: iphone objective-c ios xcode

在回合制游戏中,我想找到之前的玩家。 要找到下一位玩家,我只需输入:

int lastPlayer = match.currentPlayer - 1;

问题是当currentPlayer是播放器1.然后lastPlayer变为0,这是错误的。它应该是player6。

要解决这个问题,我可以这样做:

    int lastPlayer = match.currentPlayer - 1;

    if (lastPlayer == 0)
        lastPlayer = match.numberOfPlayers;

我的问题是如何以更清洁的方式写这个。我知道游戏中心,基于回合的代码做类似的事情:

    (currentIndex + 1) % match.participants.count];

如何重写我的代码才能做到这一点?

提前致谢

2 个答案:

答案 0 :(得分:3)

那怎么样?

int lastPlayer = match.currentPlayer > 1 ? match.currentPlayer - 1 : match.numberOfPlayers;

答案 1 :(得分:1)

如果你有这样的转弯计数器:

for(int i=0;i< maxTurns;i++){//do something}

并且播放器1播放第一个播放器,播放器2播放第二个播放器,依此类推, 你可以像在游戏中心完成的那样获得当前的玩家数量。

也许你不知道模数“%”运算符, 它返回除法的其余部分,例如

3%2 = 1

你的回声计数器会继续计数,以便下一位玩家

(turncounter + 1)%match.numberOfPlayer

在这种情况下,当模数达到最大玩家数时,模数运算符会“重置”你的计数器(第6轮,有5名玩家6%5 = 1)。

总结一下,currentPlayer为turncounter%match.numberOfPlayer

nextPlayer是++turncounter%match.numberOfPlayer