2017-05-03 101 views
0

我正在創建遊戲,用戶可以偷車。但是,當點擊「偷車」時,我需要讓更好的車更難以竊取(車1是最困難的,車2是下一個困難等)。隨機概率PHP

我在我的PHP腳本中有一組隨機概率,雖然它似乎不起作用。感覺好像每輛車都很難偷。作爲一個便箋,你會看到每輛車一旦被盜就會產生自己的照片。有人可以幫忙嗎?謝謝!

if($query1>="3"){ 


$random_car = rand (0,99); 


if (($random_car)>98) 
{$car = $car_1; $pic = $car1_pic;} 
else 
{ 
if (($random_car)>97) 
{$car = $car_2; $pic = $car2_pic;} 
else 
{ 
if (($random_car)>94) 
{$car = $car_3; $pic = $car3_pic;} 
else 
{ 
if (($random_car)>86) 
{$car = $car_4; $pic = $car4_pic;} 
else 
{ 
if (($random_car)>77) 
{$car = $car_5; $pic = $car5_pic;} 
else 
{ 
if (($random_car)>72) 
{$car = $car_6; $pic = $car6_pic;} 
else 
{ 
if (($random_car)>65) 
{$car = $car_7; $pic = $car7_pic;} 
else 
{ 
if (($random_car)>58) 
{$car = $car_8; $pic = $car8_pic;} 
else 
{ 
if (($random_car)>48) 
{$car = $car_9; $pic = $car9_pic;} 
else 
{ 
if (($random_car)>35) 
{$car = $car_10; $pic = $car10_pic;} 
else 
{ 
if (($random_car)>19) 
{$car = $car_11; $pic = $car11_pic;} 
else 
{ 
if (($random_car)>1) 
{$car = $car_12; $pic = $car12_pic;} 
else 
{ 

$car = $car_13; $pic = $car13_pic; 

}//car 12 else 
}//car 11 else 
}//car 10 else 
}//car 9 else 
}//car 8 else 
}//car 7 else 
}//car 6 else 
}//car 5 else 
}//car 4 else 
}//car 3 else 
}//car 2 else 
}//car 1 else 
+1

'否則如果(東西){...}'或'開關() ' –

+0

看來每輛車都有1/100的機會被選中。隨機數字並不會增加成功率或更低的數字。 – DontVoteMeDown

回答

0

你覺得隨機化的原因不是太好,因爲你沒有在選項之間創造足夠大的利潤。

對於汽車1,只有在$ random_car爲99或100時纔會被選中。如果$ random_car是97或98,那麼汽車2將僅被選中,就是這樣。如果它是99或100,那麼車1將被選中,所以車1和車2具有相同的被選擇概率。名單底部的汽車被選中的可能性較高,但利潤率並不高。

汽車1有百分之一的機會被選中,其中汽車12有百分之十八的機會被選中。這是我看到的最大幅度。

就你的代碼而言,那些嵌套的if語句是一場噩夢。我會用下面的語法重寫它們:

if() { 
    // do something 
} 
elseif() { 
    // do something else 
} 
else { 
    // do if nothing else worked 
} 
0

你的if語句看起來有點有線。我認爲你可以寫得更容易,而不是把這樣一個巨大的結構裝箱。這裏有一個簡短的版本,你可以用你的值定義一個數組。

$carsSpecs = [ 
    '1' => [ 
     'min' => 97, 
     'max' => 98, 
     'car' => 123, 
     'carpic' => 'test.jpeg' 
    ], 
]; 

$random_car = rand(0,99); 
$car = ''; 
$pic = ''; 

foreach($carsSpecs as $car) { 
    if($random_car > $car['min'] && $random_car < $car['max']) { 
     $car = $car['car']; 
     $pic = $car['carpic']; 
    } 
} 

現在,您可以定義陣列中的每輛車,並且更容易使用它們。也許你有一個現有的數組,你可以直接使用它們。

還有一些其他樣式可以與數組一起使用,但是它更復雜。

最後一點是你應該在數字之間做更寬的範圍。

0

我建議實現所有的邏輯作爲數據。

例如:

生成隨機車輛

<?php 

    $cars = [ 
    ["Buick", "buick.jpg" ], 
    ["Mazda", "mazda.jpg" ], 
    ["Honda", "honda.jpg" ], 
    ["Acura", "acura.jpg" ], 
    ["Dodge", "dodge.jpg" ], 
    ["Tesla", "tesla.jpg" ], 
    ["Volvo", "volvo.jpg" ], 
    ["Ford", "ford.jpg" ], 
    ["Kia", "kia.jpg" ], 
    ["Audi", "audi.jpg" ], 
    ["BMW", "bmw.jpg" ], 
    ["Camry", "camry.jpg" ], 
    ["Lexus", "camry.jpg" ], # Lexus is just a Camry with a leather interior 
    ]; 

    $frequency_table = [ 1, 19, 35, 48, 58, 65, 72, 77, 86, 94, 97, 99, 101 ]; 

    $r = rand(0,99); 

    for ($ix = 0; $frequency_table[$ix] < $r; ++$ix); 

    list($name, $img) = $cars[$ix]; 

    echo "You stole a $name <img src=/images/$img>\n"; 
?> 

輸出

You stole a Dodge <img src=/images/dodge.jpg> 

... 

You stole a Ford <img src=/images/ford.jpg>