Division Remainder
I had decided to make an online Rock Paper Scissors game, to make myself ready for greater games. I’m a backend developer, and I haven’t enough abilities and experience for creating games. So, I started to learn Unity3D, and I searched YouTube for creating Rock Paper Scissors. I watched about 2 videos, and I saw they write long if statements for checking who wins.
if (p1Choice == p2Choice)
{
// Draw
}
if (p1Choice == Rock && p2Choice == Paper)
{
// Player 2 Wins
}
// and 6 more if to check all states
Therefore, I tried to think and find an algorithm to write a shorter way to check who wins, and I found a solution:
First, give a number to each element.
Rock = 1
Paper = 2
Scissors = 3
Then, check result of this expression:
int Result = (Player1Choice - Player2Choice) % 3;
switch (Result)
{
case 0:
// Draw
break;
case 1:
// Player 1 Wins
break;
case 2:
// Player 2 Wins
break;
}
In some cases, the result of subtraction in that expression will be negative. So, I checked the value of division with a negative dividend in C#, and I wondered the remainder was negative. I checked formula for integer division, and I made sure the remainder valid range is between zero and absolute of divisor: 0 ≤ r < |d|
. I checked my favorite Golang, to see the result:
https://play.golang.org/p/9yuhk1IKSgE
but the remainder was negative.
I checked PHP, but the remainder was negative.
I checked JavaScript, but the remainder was negative.
I didn’t check other languages.
I checked the source of mod function in golang and found it should not be remaindering of the division: https://github.com/golang/go/blob/release-branch.go1.10/src/math/mod.go#L23
To be continued…
Programming Math