加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 17:44:15 所属栏目:Java 来源:网络整理
导读:刚刚经历了一个变种的游戏: Rock-Paper-Scissor-Lizard-Spock 我已经写了一个传统的R-P-S问题的Java代码,但是当我尝试扩展我的游戏版本(R-P-S-L-S)的代码时,我觉得我的代码非常糟糕.这是一个片段: if (player1.equals("ROCK") player2.equals("SCISSORS"))
刚刚经历了一个变种的游戏: 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胜

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读