2013-01-25 72 views
-2

可能重複:
How can one describe a rock-paper-scissors relationship between 3 items?是這樣可能的邏輯在PHP

嗨,大家好即時通訊做了剪刀石頭布的遊戲一個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 
+2

在這裏看到:一個人怎麼可以描述3項之間的剪刀,石頭,布的關係?(http://stackoverflow.com/questions/12717149/how-can-one-describe-a-rock - 剪刀 - 關係-3項),Lusitanian的答案在底部。 – slhck

回答

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; 
} 
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]]; 
} 
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; } 

} 
?>