簡體   English   中英

如何為增量游戲制作關卡購買乘數?

[英]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)

問題是:考慮到每個新級別的價格上漲,我如何讓玩家可以購買多個級別? 同樣重要的是,一個人不能購買超過他有錢的水平。

乘數如下:

  1. X1 - 購買一層。
  2. X10 - 購買 10 個級別。
  3. X50 - 購買 50 個級別。
  4. MAX - 購買盡可能多的級別。

我會這樣做:

            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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM