我有一个旋转系统,你旋转它会生成一个随机数
如果数字小于100,你就赢了。
但是我要怎么做呢,他的数字越低,你得到的硬币就越多
目前我有这个:
public function getPrize($number)
{
$prize = $number * 250 / 2;
if ($number < 100)
{
return '<span style="color: green;">You have won lucky <b>'.$prize.'</b> coins!</span>';
}
else
{
return '<span style="color: red;">Sorry but, bad luck. You have won nothing! number: '.$number.'</span>';
}
}
$prize是奖品。基本上现在我要把250堆起来,然后除以2。如果我得到数字1。我会得到一个可怕的奖品。
我该怎么做?
用一点思考和计算就解决了。
1000 - 250/100 = 7.5
$prize = 250 + (750 - ($number * 7.5));
结果:
x(1) = 1000
x(100) = 250
这是一种方法。只取与最大值相反的数
function getNumPrizes($number)
{
$maxPrizes = 100;
// using max so we dont get less than 0
$prizesWon = max(($maxPrizes - $number) + 1, 0);
return $prizesWon;
}
这样你就可以用1买到100个金币,用2买到99个金币,等等。
您可以通过另一个函数运行$prizesWon来按您希望的方式缩放它。
这是另一个解决方案。
function getNumPrizes($number)
{
$maxPrizes = 100;
$multiplier = // number you want to multiply with the result. It may be 125 or something else
// using max so we dont get less than 0
$prizesWon = max(($maxPrizes - $number) + 1, 0)*$multiplier;
return $prizesWon;
}
也许你可以试试这样做:
public function getPrize($number)
{
$quad = $number*$number;
if ($number<100 && $number>0)
{
$prize = 0.0525665*$quad-12.885*$number + 1012.83; //http://www.wolframalpha.com/input/?i=quadratic+fit+%281%2C1000%29%2C%2850%2C500%29%2C%28100%2C250%29
return '<span style="color: green;">You have won lucky <b>'.$prize.'</b> coins!</span>';
}
else
{
return '<span style="color: red;">Sorry but, bad luck. You have won nothing! number: '.$number.'</span>';
}
}
编辑。
我找到了一个函数,它给出了给定数字的预期结果。希望你没事。数据来源:Wolphram Alpha
最终版本:
if($number < 100){
$prize = round((99.00 - floatval($number)) * 7.653) + 250;
else{
$prize = 0;
}
根据作者的要求,$number = 99
为250,$number = 1
为1000。
你试图定义一个数学函数f(x)其中f(1) = 250和f(99) = 1000;
有很多可能的形状。
我建议你把你的函数的结果画出来,以帮助你决定什么是最适合你的。
这里有一些例子。
// linear growth
// this produces a straight line
function prize($number) return (101 - number) * 75 + 250;
// log growth
// this produces a log curve where you have diminishing returns
function prize($number) return (log(101 - number) -1 ) * 750 + 250;
// exp growth
// this returns exponential returns
function prize($number) return (((101-number)^2)/10000) * 750 +250;
这里的基本操作是你有一个函数生成1-100之间的序列值。
- 反向输入(101-number),以便较小的输入产生较大的结果。
- 将输出映射到您的比例…在(0到750)之间,用750乘以一个比率。
- 将您的比例转换为250,这是您的最小值