2012-03-20 113 views
1

我想做一個非常簡單的遊戲,我有7個位置,這些位置都是隱藏的,在那裏有3個獲勝位置。我可以隨機選擇3次。我需要在每次選擇後顯示選秀權是否成功,並將結果存儲在基礎中。如何從一些中獎號碼中挑選隨機數字?

目前我的想法是在哪裏生成第一個選號的中獎號碼數組,然後選擇隨機數並檢查它是否在獲勝陣列中。

但我有一種感覺,有更有效的方式來這樣做。

希望如果你使用PHP來編碼的例子,但僞代碼會做得很好。

編輯 我正在尋找解決這個問題的方式,而不用填充陣列贏得職位。也許有一種方法可以用權重或概率百分比來做到這一點。

就像第一次挑選我有3/7 * 100%的機率贏。保存結果到基地。 第二次挑選我有3/6 * 100或2/6 * 100%的機會贏得基礎天氣,我贏得了前次挑選,我從基地獲得。

回答

1

修正答案:這個例子並不要求你將遊戲的完整狀態存儲在一個變量中;相反,你只需要存儲的試算,並贏得數:

$won = 0; 
for($try = 0; $try < 3; $try++) { 
    $slots = array_fill(0, 7 - $try, 0); // blank slots 
    $lucky = array_fill(0, 3 - $won, 1); // lucky slots 
    $pot = array_replace($slots, $lucky); // make some of the slots lucky 
    $win = $pot[array_rand($pot)];  // randomly pick a slot 
    $won += $win == 1;     // update won count 
    echo sprintf("Try %d: win=%d, total wins=%d\n", $try + 1, $win, $won); 
} 

原來的答覆:

$pot = array(    // pot is (an associative) array; 0 = blank, 1 = win 
    "pos_1" => 0, 
    "pos_2" => 0, 
    "pos_3" => 0, 
    "pos_4" => 0, 
    "pos_5" => 0, 
    "pos_6" => 0, 
    "pos_7" => 0 
); 
$win = array_rand($pot, 3); // picks three indexes from the pot randomly 
foreach($win as $w) { 
    $pot[$w] = 1;   // set winning indicator 
} 
print_r($pot); 

輸出:含盆的狀態陣列。

Array 
(
    [pos_1] => 0 
    [pos_2] => 1 
    [pos_3] => 0 
    [pos_4] => 1 
    [pos_5] => 1 
    [pos_6] => 0 
    [pos_7] => 0 
) 
+0

這意味着我需要存儲在基地或會話的洗牌陣列,這是我想避免的事情。 – Nick 2012-03-20 08:49:04

+0

我修改了我的答案。 – 2012-03-20 09:43:41

+0

我可以與此合作,非常感謝。 – Nick 2012-03-20 10:42:02

0

您可以保存中獎號碼的位置。這樣你總是可以使用[]運算符來檢查它們的值。畢竟,你只是選擇職位而不是數字。

更新: 這樣你甚至不需要隱藏數字。很可能有更抽象的「勝利的東西」 - 角色,詞彙,結構。但是,不要以任何方式更改隱藏的「事物」數組,或者至少更新存儲的獲勝位置(如果它們保持不變),這一點很重要。如果不是這種情況,你當然需要更新已保存的獲勝位置。

0
<?php 

$arr = array(true, true, false, false, false, false, false); 
shuffle($arr); 

function pick($arr, $index) { 
    return isset($arr[$index]) && $arr[$index] === true; 
} 

var_dump($arr); 
var_dump(pick($arr, 3)); 
var_dump(pick($arr, 5)); 
var_dump(pick($arr, 1)); 
+0

這意味着我需要將基本或會話中的洗牌數組存儲,這是我想避免的事情。 – Nick 2012-03-20 08:48:33