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

时间:2010-05-08 19:53:48

标签: c

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

1 个答案:

答案 0 :(得分:80)

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+X-Y) % 3为1,如果Y击败X,则{2}为。

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