One-liner决定谁在Rock,Paper,Scissors中获胜

所以我正在用C编写一个简单的Rock,Paper,Scissors游戏(顺便说一下,这是一个任务,虽然主要是学习sockets。而且,我怀疑它会在我得到一个好答案之前到期)。 我把它设置为Rock = 0,Paper = 1,Scissors = 2。 是否有一个简单的单线来确定谁获胜? 我尝试在纸上玩它,但我无法弄清楚任何模式。

 winner = (3 + player1 - player2) % 3; 

如果玩家1获胜,则为1,如果玩家2获胜,则为2,为领带为0。

说明 :在Rock=0, Paper=1, Scissors=2的序列中,每个项目都会失败前一项。 即使我们将序列视为包装(即最后一项在第一项之前),也是如此。

对于任何项目X,用更多的数学术语来表示:

  • X被(X+1) % 3击败。
  • X击败(X+2) % 3

由此可以看出,如果X击败Y,则(3+XY) % 3为1,如果Y击败X,则为2。

需要添加3以强制结果为非负数:负数的模数在C99中为负或零,在C89中依赖于实现。