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名玩家玩.对于这个错误我很抱歉,请忽略第二个要求. 解决方法
在Rock-Paper-Scissor游戏中,很容易决定是否在一个循环中使用他们的索引移动一个胜利.所以你不需要在你的代码手动决定每个组合的结果,其他答案在这里建议.
对于Rock-Paper-Scissor-Spock-Lizard版本: 让我们为每个动作(0,1,2,3,4)分配一个数字. 请注意,每一步都会跳动两步: >在这个循环之前的动作(或四个提前) 所以让d =(5 a – b)%5.然后: > d = 1或d = 3 =>一胜 对于Rock-Paper-Scissor版本: 让d =(3 a – b)%3.然后: > d = 1 =>一胜 n = 3和n奇数的泛化: 令d =(n a – b)%n.然后: >如果d = 0 =>领带>如果d%2 = 1 =>一胜>如果d%2 = 0 => b胜 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |