[英]How do I make a level purchase multiplier for Incremental games?
如何為增量游戲制作關卡購買乘數? 當一個人購買任何級別時,他都會花錢,購買價格按以下公式增加:
money = 1000;
baseCost = 100;
multiplier = 1.09;
lvl = 1;
newCost;
newCost = baseCost * Math.Pow(multiplier, lvl)
問題是:考慮到每個新級別的價格上漲,我如何讓玩家可以購買多個級別? 同樣重要的是,一個人不能購買超過他有錢的水平。
乘數如下:
我會這樣做:
bool BuyLevels(money, AmountOfLevelsToBuy)
{
multiplier = 1.09;
switch (AmountOfLevelsToBuy)
{
case < 10:
if (CanAffordLevels(money, AmountOfLevelsToBuy, multiplier))
{
player.level += AmountOfLevelsToBuy;
return true; //Purchase was successful
}
return false;
case (>= 10 && < 50):
multiplier *= 10;
if (CanAffordLevels(money, AmountOfLevelsToBuy, multiplier))
{
player.level += AmountOfLevelsToBuy;
return true; //Purchase was successful
}
return false;
case (>= 50 && < MAX):
multiplier *= 50;
if (CanAffordLevels(money, AmountOfLevelsToBuy, multiplier))
{
player.level += AmountOfLevelsToBuy;
return true; //Purchase was successful
}
return false;
case == MAX:
multiplier *= MAX_Value;
if (CanAffordLevels(money, AmountOfLevelsToBuy, multiplier))
{
player.level += AmountOfLevelsToBuy;
return true; //Purchase was successful
}
return false;
}
}
bool CanAffordLevels(money, AmountOfLevelsToBuy, out multiplier)
{
newCost = baseCost * Math.Pow(out multiplier, AmountOfLevelsToBuy);
if (newCost > Money)
{
multiplier = 1.09;
return false;
}
return true;
}
這是 C# 和偽代碼的混合。 它缺少數據類型和訪問修飾符,必須填寫CanAffordLevels
方法聲明中的"out"
關鍵字允許為BuyLevels
方法更改乘數變量。 我會讓你自己弄清楚如何將 MAX_Value 用於 Levels 部分:)。
我不確定它是否正確。 但這是我對你的問題的看法:)
我認為您應該為乘數創建某種實體。 例如枚舉
public const double baseCost = 100.0;
public const double multiplier = 1.09;
public enum Multipliers
{
X1 = 1,
X10 = 10,
X50 = 50,
Max = -1
}
var stringLvlToBuy = "MAX"; //input value from user
double newCost = 0;
int lvl = 1;
double money = 1000;
//Parse input value To Enum or your entity for multipliers
if (!Enum.TryParse(stringLvlToBuy, out Multipliers multiplierLvl);)
{
//Value didn't parse so you should do something
}
var lvlToBuy = (int) multiplierLvl;
if (multiplierLvl == Multipliers.Max)
{
var maxLevelsToBuy = 0;
var nextLevel = lvl + 1;
double totalSum = baseCost * Math.Pow(multiplier, nextLevel);
while (money > totalSum)
{
nextLevel++;
maxLevelsToBuy++;
totalSum += baseCost * Math.Pow(multiplier, nextLevel);
}
lvl = maxLevelsToBuy;
money -= (totalSum - baseCost * Math.Pow(multiplier, nextLevel));
}
else
{
var restMoney = BuyLevelsIfPossible(money, lvl, lvlToBuy);
if (restMoney < 0.0)
{
//print "You don't have enough money"
}
else
{
money = restMoney;
}
}
public double BuyLevelsIfPossible(double playerMoney, int currentLevel, int lvlToBuy)
{
var totalSum = 0.0;
double newCost;
for (int i = currentLevel + 1; i <= lvlToBuy; ++i)
{
newCost = baseCost * Math.Pow(multiplier, i);
totalSum += newCost;
}
if (totalSum > playerMoney)
{
//do what you gonna do if money isn't enough. e.g.
return -1;
}
return playerMoney - totalSum;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.