2017-05-03 14 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

各車には100分の1のチャンスがあるようです。無作為化された数字は、単により高いまたはより低い数字になることを困難にしない。 – DontVoteMeDown

答えて

0

ランダム化がうまくいっていないと感じる理由は、オプション間に十分なマージンを作成していないからです。

車1については、$ random_carが99ま​​たは100の場合にのみ選択されます。車2は$ random_carが97または98の場合にのみ選択され、それだけです。それが99または100の場合、かご1が選択されるので、かご1とかご2の両方が選択される確率は同じです。選択されているリストの一番下にある車の可能性は高いですが、マージンはあまり高くありません。

車1には100チャンスの1が選択されています。ここで、車12は選択される機会が100分の18です。これは私が見た最大のマージンです。

あなたのコードに関する限り、これらのネストされたif文は悪夢です。

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

あなたのifステートメントは少し有線に見えます。そのような大きな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> 
関連する問題