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