-2

可能重复:
如何描述三个项目之间的石头剪刀布关系?

大家好,我正在为石头剪刀布游戏做一个 php 任务,我正在尝试执行规则检查部分并希望使用下面这个 ruby​​ 函数之类的逻辑,我试图尽可能避免使用条件。

有人有想法么 ?

def who_wins(p1, p2)
  win_moves = {"rock" => "paper", "paper" => "scissors", "scissors" => "rock"}
  ([p1, p2] & win_moves.values_at(p1, p2)).first
end

who_wins("rock", "paper") # "paper"
who_wins("scissors", "rock") # "rock"
who_wins("scissors", "scissors") # nil
4

3 回答 3

1

我制作的快速功能:

function who_wins($p1, $p2){
    $win_moves = array("rock" => "paper", "paper" => "scissors", "scissors" => "rock");
    if($p1 === $p2){
        return null;
    }
    return ($win_moves[$p1] === $p2) ? $p2 : $p1;
}
于 2013-01-25T10:49:24.427 回答
0

尝试这样的事情。唯一的条件是 $p1 和 $p2 相同。逻辑由数组函数处理。

function who_wins($p1, $p2) {
    if ($p1 === $p2) {
        return "nil";
    }
    $actions = array("rock", "scissors", "paper");

    $selected_actions = array_merge(array_keys($actions, $p1), array_keys($actions, $p2));
    sort($selected_actions);

   return $actions[$selected_actions[0]];
}
于 2013-01-25T10:53:53.997 回答
0

不确定您的原始功能到底是做什么的,但这是一个非常紧凑的解决方案,我敢肯定,如果有更多的爱,您可以摆脱 if 语句。

<?php
echo who_wins("rock", "paper")."\n";
echo who_wins("scissors", "rock")."\n";
echo who_wins("scissors", "scissors")."\n";

function who_wins($p1,$p2) {
    $comb = array (
    "rock"  => 0,
    "paper" => 1,
    "scissors"  => 2,
    );

    $result = (3+$comb[$p1]-$comb[$p2]) % 3;

    if ($result==1){ return $p1; } elseif($result==2) { return $p2; } 

}
?>
于 2013-01-25T11:01:59.913 回答