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