所以我正在用C编写一个简单的Rock,Paper,Scissors游戏(顺便提一下,这是一个分配,虽然主要是学习套接字。而且,我怀疑它会在我得到一个好答案之前到期) 。我把它设置为Rock = 0,Paper = 1,Scissors = 2。是否有一个简单的单线来确定谁获胜?我试着在纸上玩它,但我无法弄清楚任何模式。
答案 0 :(得分:80)
winner = (3 + player1 - player2) % 3;
如果玩家1获胜,则为1,如果玩家2获胜,则为2,如果为平局,则为0。
解释:在序列Rock=0, Paper=1, Scissors=2
中,每个项目都会失败前一项。即使我们将序列视为包装(即最后一项在第一项之前),也是如此。
用更多的数学术语来表示,对于任何项目X:
(X+1) % 3
击败。(X+2) % 3
。由此可以看出,如果X击败Y,(3+X-Y) % 3
为1,如果Y击败X,则{2}为。
需要添加3以强制结果为非负数:负数的模数在C99中为负或为零,在C89中为依赖于实现。