如何為增量游戲制作關卡購買乘數?當一個人購買任何級別時,他都會花錢,并且購買價格按以下公式增加:
money = 1000;
baseCost = 100;
multiplier = 1.09;
lvl = 1;
newCost;
newCost = baseCost * Math.Pow(multiplier, lvl)
問題是:我如何讓玩家可以購買多個級別,同時考慮到每個新級別的價格上漲?同樣重要的是,一個人不能購買比他有錢還多的級別。
乘數如下:
- X1 - 購買一個級別。
- X10 - 購買 10 個級別。
- X50 - 購買 50 級。
- MAX - 購買盡可能多的級別。
uj5u.com熱心網友回復:
我不確定它是否正常作業。但這是我對您的問題的看法:)
我認為您應該為乘數創建某種物體。例如列舉
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;
}
uj5u.com熱心網友回復:
我會這樣做:
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# 和偽代碼的混合。它缺少資料型別和訪問修飾符,必須填寫。方法宣告中的"out"關鍵字CanAffordLevels允許為BuyLevels方法更改乘數變數。我會讓你自己弄清楚如何使用 MAX_Value for Levels 部分:)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/362084.html
