PHP旋转系统.这个数字越低,你得到的奖励就越多


PHP spin system. The lower the number is, the more rewards you get

我有一个旋转系统,你旋转它会生成一个随机数

如果数字小于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之间的序列值。

  1. 反向输入(101-number),以便较小的输入产生较大的结果。
  2. 将输出映射到您的比例…在(0到750)之间,用750乘以一个比率。
  3. 将您的比例转换为250,这是您的最小值