C# C中的无穷几何级数
我正在尝试用C语言为我的大学工作重新创建一个基于Cookie点击器的应用程序。我目前正在尝试的是,当我按下应用程序上的升级按钮时,它将像Cookie Clicker一样工作,它首先增加2,然后在点击该按钮3次后,它将从2加倍到4,并继续这样做。我现在有这个,但出于某种原因,它只是一个固定的数字'15',并没有增加。现在我不完全理解这个方法是如何工作的,但我也希望有人能为我详细说明一下 下面是函数:C# C中的无穷几何级数,c#,C#,我正在尝试用C语言为我的大学工作重新创建一个基于Cookie点击器的应用程序。我目前正在尝试的是,当我按下应用程序上的升级按钮时,它将像Cookie Clicker一样工作,它首先增加2,然后在点击该按钮3次后,它将从2加倍到4,并继续这样做。我现在有这个,但出于某种原因,它只是一个固定的数字'15',并没有增加。现在我不完全理解这个方法是如何工作的,但我也希望有人能为我详细说明一下 下面是函数: static double GeometricSeries(double a, doubl
static double GeometricSeries(double a, double r, int n)
{
return a * (1 - Math.Pow(r, n + 1)) / (1 - r);
}
double x = GeometricSeries(1, 2, 3);
GV.CpsCostAmount = x;
private void button2_Click(object sender, EventArgs e)
{
double a = 2;
double r = 3;
int n = 4;
double x = GeometricSeries(a, r, n);
GV.CpsCostAmount = x;
//Finder
if (GV.TotalMoneyValue < GV.CpsCostAmount)
{
//Return Error
tmrErrorShow.Enabled = true;
lblErrorMessage.Text = "You don't have enough money for that.";
return;
}
else if (GV.TotalMoneyValue >= GV.CpsCostAmount)
{
//Minus Money
int ToDecreaseBy = Convert.ToInt32(GV.CpsCostAmount);
GV.TotalMoneyValue -= ToDecreaseBy;
lblMoney.Text = string.Format("{0}{1:#,0}", GV.MoneyPrefix, GV.TotalMoneyValue);
//Update Button Text
btnUpgradeCps.Text = string.Format("{0}{1}", GV.UpgradeCpsPrefix, GV.CpsCostAmount);
//Increase CPS
int ToIncreaseBy = GV.TotalCPSValue += GV.CPSIncrease;
lblClicksPerSecond.Text = string.Format("{0}{1:#,#}", GV.CpsPrefix, GV.TotalCPSValue);
//Check Total Damage and set
int TotalDamage = GV.TotalDPSValue + GV.TotalCPSValue;
lblTotalDamage.Text = string.Format("{0}{1:#,#}", GV.TotalPrefix, TotalDamage);
}
else
{
tmrErrorShow.Enabled = true;
lblErrorMessage.Text = "Something went quite very wrong.";
return;
}
}
以下是我执行函数的方式:
static double GeometricSeries(double a, double r, int n)
{
return a * (1 - Math.Pow(r, n + 1)) / (1 - r);
}
double x = GeometricSeries(1, 2, 3);
GV.CpsCostAmount = x;
private void button2_Click(object sender, EventArgs e)
{
double a = 2;
double r = 3;
int n = 4;
double x = GeometricSeries(a, r, n);
GV.CpsCostAmount = x;
//Finder
if (GV.TotalMoneyValue < GV.CpsCostAmount)
{
//Return Error
tmrErrorShow.Enabled = true;
lblErrorMessage.Text = "You don't have enough money for that.";
return;
}
else if (GV.TotalMoneyValue >= GV.CpsCostAmount)
{
//Minus Money
int ToDecreaseBy = Convert.ToInt32(GV.CpsCostAmount);
GV.TotalMoneyValue -= ToDecreaseBy;
lblMoney.Text = string.Format("{0}{1:#,0}", GV.MoneyPrefix, GV.TotalMoneyValue);
//Update Button Text
btnUpgradeCps.Text = string.Format("{0}{1}", GV.UpgradeCpsPrefix, GV.CpsCostAmount);
//Increase CPS
int ToIncreaseBy = GV.TotalCPSValue += GV.CPSIncrease;
lblClicksPerSecond.Text = string.Format("{0}{1:#,#}", GV.CpsPrefix, GV.TotalCPSValue);
//Check Total Damage and set
int TotalDamage = GV.TotalDPSValue + GV.TotalCPSValue;
lblTotalDamage.Text = string.Format("{0}{1:#,#}", GV.TotalPrefix, TotalDamage);
}
else
{
tmrErrorShow.Enabled = true;
lblErrorMessage.Text = "Something went quite very wrong.";
return;
}
}
范例
为了详细说明我的问题,我想知道如何改变这一点,以便在每次升级的特定次数中,它都会将价格增加x个数量,并且在x个数量升级后,它会增加价格。很难用语言来解释我的意思,但你能理解我意思的最好方法是看比赛
升级按钮功能:
static double GeometricSeries(double a, double r, int n)
{
return a * (1 - Math.Pow(r, n + 1)) / (1 - r);
}
double x = GeometricSeries(1, 2, 3);
GV.CpsCostAmount = x;
private void button2_Click(object sender, EventArgs e)
{
double a = 2;
double r = 3;
int n = 4;
double x = GeometricSeries(a, r, n);
GV.CpsCostAmount = x;
//Finder
if (GV.TotalMoneyValue < GV.CpsCostAmount)
{
//Return Error
tmrErrorShow.Enabled = true;
lblErrorMessage.Text = "You don't have enough money for that.";
return;
}
else if (GV.TotalMoneyValue >= GV.CpsCostAmount)
{
//Minus Money
int ToDecreaseBy = Convert.ToInt32(GV.CpsCostAmount);
GV.TotalMoneyValue -= ToDecreaseBy;
lblMoney.Text = string.Format("{0}{1:#,0}", GV.MoneyPrefix, GV.TotalMoneyValue);
//Update Button Text
btnUpgradeCps.Text = string.Format("{0}{1}", GV.UpgradeCpsPrefix, GV.CpsCostAmount);
//Increase CPS
int ToIncreaseBy = GV.TotalCPSValue += GV.CPSIncrease;
lblClicksPerSecond.Text = string.Format("{0}{1:#,#}", GV.CpsPrefix, GV.TotalCPSValue);
//Check Total Damage and set
int TotalDamage = GV.TotalDPSValue + GV.TotalCPSValue;
lblTotalDamage.Text = string.Format("{0}{1:#,#}", GV.TotalPrefix, TotalDamage);
}
else
{
tmrErrorShow.Enabled = true;
lblErrorMessage.Text = "Something went quite very wrong.";
return;
}
}
数字1、2和3称为“文字”,这意味着方法GeometricSeries将始终接收这些数字作为输入。 为了使mehod给出不同于15的结果,您需要将变量传递给该方法,并在单击“升级”按钮时以某种方式更改这些变量
double a = 1;
double r = 2;
int n = 3
double x = GeometricSeries(a, r, n);
现在,如果修改变量a、r或n,该方法将返回不同的值
编辑:尝试在方法之外声明三个变量,并且只在单击按钮时增加它们。在方法内部声明变量将使方法在每次单击按钮时始终使用相同的数字,因此需要在外部声明变量,只需使用方法增加它们
double a = 2;
double r = 3;
int n = 4;
private void button2_Click(object sender, EventArgs e)
{
n++; // For instance
double x = GeometricSeries(a, r, n);
GV.CpsCostAmount = x;
//The rest of your code...
}
我不知道饼干点击器是什么 它首先增加2,点击3次按钮后,它将从2加倍到4,并继续这样做 如果你想让每三次点击的成本翻倍,为什么不这样做呢
int numClicks=0;
void OnUpgrade()
{
numClicks++;
if (numClicks == 3)
{
GV.CpsCostAmount = GV.CpsCostAmount * 2;
numClicks = 0;
}
}
有点不清楚到底问了什么。请你把上下文的范围缩小一点,并描述一个具体例子的预期行为和实际行为之间的差异,好吗?如果你想要不同的输出,你需要给方法不同的输入,重复调用值为1、2和3的方法每次都会得到相同的结果。我这样做了,但它仍然保持在15并且没有增加;双r=3;整数n=4@SirTiggs,复制上面的代码将得到相同的值,每次单击按钮时,您需要更改分配给a、r和n的值。@BenRobinson这是我目前得到的。双a=2;双r=3;int n=4;双x=几何级数a,r,n;GV.CPS成本金额=x;几何经验1,2,3不等于几何经验2,3,4。如果你的结果无论如何都是15,那么问题就出在别处了。