【问题标题】:PHP - any easy way to make this math equation?PHP - 任何简单的方法来制作这个数学方程?
【发布时间】:2020-10-15 14:29:38
【问题描述】:

我有一个游戏,你可以在其中购买防御,但我的数学没有加起来,我不明白我应该如何解决它。

Amount from   amount to       Price pr
0             10 000          $1 500 
10 000        50 000          $2 500
50 000        1 000 000       $3 000
1 000 000     5 000 000       $5 000
5 000 000     inf             $10 000

$fp_from[0] = 0;
$fp_to[0] = 10000;

$fp_from[1] = $fp_to[0];
$fp_to[1] = 50000;

$fp_from[2] = $fp_to[1];
$fp_to[2] = 1000000;

$fp_from[3] = $fp_to[2];
$fp_to[3] = 5000000;

$fp_from[4] = $fp_to[3];
$fp_to[4] = INF;

$price_pr[0] = 1500;
$price_pr[1] = 2500;
$price_pr[2] = 3000;
$price_pr[3] = 5000;
$price_pr[4] = 10000;

现在我只有这个 for 循环来获取价格:

for($k = 0; $k < count($fp_from); $k++){
    if($defence >= $fp_from[$k] && $defence <= $fp_to[$k]){
        $my_price_pr = $price_pr[$k];
    }
}

但是假设我有 1 000 防御,购买 10 000 我将有 11 000。但是 10 000 的价格仅为 1 500 pr,但我希望高达 10 000 的金额为 1 500 及以上是 2 500。我得到的价格是 15 000 000 ( 10 000 * 1 500 ),但我想要的价格是 16 000 000 ( 13 500 000 + 2 500 000 )。

这是我的全部购买脚本

if(isset($_POST['post'])){
    if(isset($_POST['amount'])){
        $amount = remove_space($_POST['amount']);
        
        $defence = $AS_session_row['AS_def'];
        $my_price_pr = 0;
        $money = 100000000; // 100 000 000

        for($k = 0; $k < count($fp_from); $k++){
            if($defence >= $fp_from[$k] && $defence <= $fp_to[$k]){
                $my_price_pr = $price_pr[$k];
            }
        }
        
        if(is_numeric($amount) && $amount > 0){
            if($my_price_pr * $amount <= $money){
                $total_price = $my_price_pr * $amount;
                
                give_fp($amount, $_SESSION['ID'], $pdo);
                take_money($_SESSION['ID'], $total_price, $pdo);
                
                echo success_msg("FP was bought");
            } else {
                echo error_msg("Not enough money");
            }
        } else {
            echo fail_msg("Wrong input");
        }
    }
}

【问题讨论】:

  • 如果你只买10000,为什么价格不应该是1500000?为什么起始金额很重要?
  • 因为,那么你可以在防御为 0 的情况下简单地购买 5 000 000 并且价格 pr 仅为 1 500。
  • 奇怪的定价。如果我买了 2 杯牛奶,家里没有,我付 1500,但如果我有 1 杯,第一杯牛奶要 1500,第二杯要 2500?
  • 我可以将其设为静态价格标签。但是既然是为了游戏,越赚越多,如果越赚越多,价格不涨,你就会长生不老:/
  • 那么进阶就是惩罚?如果是这种情况,请重新考虑您的策略。

标签: php for-loop math


【解决方案1】:

我建议查看 foreach 循环 https://www.php.net/manual/en/control-structures.foreach.php 在处理数组时它们非常有用。

编辑:您需要在循环价格时增加 total_price 并考虑购买前后的防御水平。之后,如果该人有足够的钱等,您可以使用您的支票...

$defence = 0;
$my_price_pr = 0;

$fp_from[0] = 0;
$fp_to[0] = 10000;

$fp_from[1] = $fp_to[0];
$fp_to[1] = 50000;

$fp_from[2] = $fp_to[1];
$fp_to[2] = 1000000;

$fp_from[3] = $fp_to[2];
$fp_to[3] = 5000000;

$fp_from[4] = $fp_to[3];
$fp_to[4] = INF;

$price_pr[0] = 1500;
$price_pr[1] = 2500;
$price_pr[2] = 3000;
$price_pr[3] = 5000;
$price_pr[4] = 10000;


$total_price = 0;

$amount = 11000;

$my_price_pr = 0;



$defenceAfterBuying = $defence + $amount;

foreach ($price_pr as $key => $value) {
    for ($i=$defence; $i <= $defenceAfterBuying; $i++) { 
        if ($i > $fp_from[$key] && $i <= $fp_to[$key]) {
            $total_price += $price_pr[$key];
        }
    }
}

【讨论】:

  • for 循环可以正常工作,但是如果您在我的示例中看到,数学并没有加起来,只是因为我不知道如何编写数学方程式。
  • 这里是 foreach 的解决方案
  • 不是真的,因为当我有 0 防御并购买 11 000 防御时,总价格达到 16 500 000 而不是 17 500 000
  • 所以问题可能不在于价格设置,因为如果您将防御更改为 9000 $my_price 为 1.5k 如果您将其更改为 11000 价格为 2.5k,则此脚本有效。那么也许您对购买脚本有疑问?
  • 我刚刚添加了整个脚本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2023-01-13
  • 1970-01-01
  • 2012-02-27
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多