【发布时间】: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?
-
我可以将其设为静态价格标签。但是既然是为了游戏,越赚越多,如果越赚越多,价格不涨,你就会长生不老:/
-
那么进阶就是惩罚?如果是这种情况,请重新考虑您的策略。