0

計算する必要がある 5 つの異なる変数があります。現在これらは機能していますが、私がやりたいのは、価格が 50 上昇するたびに再計算することです。これで、一度に最大 50 個の購入を許可するようにフォームにコーディングできますが、その人がお金を持っている限り、それぞれの購入を許可したいと考えています (これが数字です)。だから私が必要としているのは、auto が 50 ごとに増加する放物線スタイルの数式だと思いますが、探しているものやその実装方法が正確にはわかりません。

$resprice = 20000+($cityFetch['residential']*502)+($cityNum*1000);
$comprice = 18000+($cityFetch['commercial']*506)+($cityNum*1000);
$indprice = 23000+($cityFetch['industrial']*508)+($cityNum*1000);
$landprice = 600+($cityFetch['land']*.008);
$milprice = 25000+($cityFetch['military']*512)+($cityNum*1000);

編集:これにはループが機能することが示されました。

EDIT3:ついにこれに着地し、HavvyがIRCで私を助けてくれました

$cityCheck = mysql_query("SELECT * FROM cities WHERE nation='$nation'");
$cityNum = mysql_num_rows($cityCheck);


function determinePrice($baseCost, $scalar, $current, $bought) {
    $min = $baseCost + $scalar * ($current + 1) + ($cityNum * 1000);
    $max = $baseCost + $scalar * ($current + $bought) + ($cityNum * 1000);
    $average = ($min + $max) / 2;

   return $average * $bought;
}

$resprice = determinePrice(20000, 502, $cityFetch['residential'], $cityFetch['residential']);
$comprice = determinePrice(18000, 506, $cityFetch['commercial'], $cityFetch['commercial']);
$indprice = determinePrice(23000, 508, $cityFetch['industrial'], $cityFetch['industrial']);
$milprice = determinePrice(25000, 502, $cityFetch['residential'], $cityFetch['military']);
$landprice = 600+($cityFetch['land']*.008); 
4

2 に答える 2

0

私は 50 の代わりに 1 のステップ サイズを使用します。一度に購入する金額に基づいて割引を提供しない方がより論理的 (マジック ナンバーが 1 つ少ない) であり、ステップワイズ線形関数を使用する新しいプレーヤーを混乱させる可能性があります。

この関数の背後にある理由はhttp://betterexplained.com/articles/techniques-for-adding-the-numbers-1-to-100/にあります。

function determinePrice($baseCost, $scalar, $current, $bought) {
    $min = $scalar * ($current + 1) + ($cityNum * 1000);
    $max = $scalar * ($current + $bought) + ($cityNum * 1000);
    $average = ($min + $max) / 2;

   return $average * $bought;
}

それを使用すると、次のようになります。

$resprice = definePrice(20000, 502, $cityFetch['住宅'], $resBought);

ただし、土地には都市の価格が含まれていないため、土地には機能しません。土地の場合、関数をコピーして $cityNum * 1000 の部分を削除できます。$isLand パラメーターを署名に追加し、代わりに三項演算子を使用して 0 を追加することもできます。

この関数を宣言する前に $cityNum が適切な値で宣言されている必要があるのが気に入らない場合は、いつでもそれを関数シグネチャに追加して、純粋な関数にすることができます。

于 2012-12-21T10:41:53.637 に答える
0

$count=1

if($count==50)

{

じゃあ値上げしろよ

$count=1; }

$resprice = 20000+($cityFetch['residential']*502)+($cityNum*1000);

$comprice = 18000+($cityFetch['commercial']*506)+($cityNum*1000);

$indprice = 23000+($cityFetch['industrial']*508)+($cityNum*1000);

$landprice = 600+($cityFetch['land']*.008);

$milprice = 25000+($cityFetch['military']*512)+($cityNum*1000);

$count++;

于 2012-12-21T10:54:23.407 に答える