C#中的无限几何系列

时间:2014-09-17 11:39:22

标签: c#

我正在尝试使用Cookie Clickers在C#中为我的大学工作重新创建一个应用程序。我现在要做的就是拥有它,所以当我按下我的应用程序上的升级按钮时,它将像Cookie Clicker一样工作,它首先增加2,然后在3次点击该按钮后,它将从2增加到4并且继续这样做。我目前得到了这个,但由于某种原因,它只是一个固定数量的'15',并没有增加。现在我不完全理解这种方法是如何工作的,但我也希望有人可以为我详细说明。

这是功能:

    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;

(实施例) 为了详细说明我的问题,我想知道如何改变这一点,以便在升级的每一定时间内,它将使价格增加x金额,并且在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;
        }
    }

2 个答案:

答案 0 :(得分:0)

数字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...
}

答案 1 :(得分:0)

我不知道Cookie Clickers是什么。

“它首先增加2,然后在该按钮点击3次后,它将从2增加到4并继续这样做”

如果您希望每三次点击加倍,为什么不这样做呢?

int numClicks=0;
void OnUpgrade()
{
    numClicks++;
    if (numClicks == 3)
    {
        GV.CpsCostAmount = GV.CpsCostAmount * 2;
        numClicks = 0;
    }
}