java – 可折叠解决方案的岩纸剪刀

前端之家收集整理的这篇文章主要介绍了java – 可折叠解决方案的岩纸剪刀前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
刚刚经历了一个变种的游戏: Rock-Paper-Scissor-Lizard-Spock

我已经写了一个传统的R-P-S问题的Java代码,但是当我尝试扩展我的游戏版本(R-P-S-L-S)的代码时,我觉得我的代码非常糟糕.这是一个片段:

if (player1.equals("ROCK") && 
         player2.equals("SCISSORS")) {
        winner = 1;
    }
    // Paper covers rock...
    else if (player1.equals("PAPER") &&
         player2.equals("ROCK")) {
        winner = 1;
    }
    // Scissors cut paper...
    else if (player1.equals("SCISSORS") &&
         player2.equals("PAPER")) {
        winner = 1;
    }
    else {
        winner = 2;
    }

我意识到代码不能轻易扩展到较新版本 – 以及超过2个玩家.这主要是因为多个if / else或switch / case.我需要一些帮助重新设计我的代码来实现2个目标:

>根据R-P-C-L-S问题进一步修改.
>支持超过2名玩家.

我不需要代码,只是一些准则应该有帮助.

谢谢 !!

编辑:似乎我错了,认为这个游戏可以由超过2名玩家玩.对于这个错误我很抱歉,请忽略第二个要求.

解决方法

在Rock-Paper-Scissor游戏中,很容易决定是否在一个循环中使用他们的索引移动一个胜利.所以你不需要在你的代码手动决定每个组合的结果,其他答案在这里建议.

对于Rock-Paper-Scissor-Spock-Lizard版本:

让我们为每个动作(0,1,2,3,4)分配一个数字.

请注意,每一步都会跳动两步:

>在这个循环之前的动作(或四个提前)
>这个举动在这个循环中提前两个

所以让d =(5 a – b)%5.然后:

> d = 1或d = 3 =>一胜
> d = 2或d = 4 => b胜
> d = 0 =>领带

对于Rock-Paper-Scissor版本:

让d =(3 a – b)%3.然后:

> d = 1 =>一胜
> d = 2 => b胜
> d = 0 =>领带

n = 3和n奇数的泛化:

令d =(n a – b)%n.然后:

>如果d = 0 =>领带>如果d%2 = 1 =>一胜>如果d%2 = 0 => b胜

猜你在找的Java相关文章