private void battleButton_Click(object sender, EventArgs e)
{
     if (battleDropBox.SelectedItem.ToString() == "Rat")
     {
            enemyHP.Text = "Enemy HP: " + rat.HP.ToString();
            enemyDPS.Text = "Enemy DPS: " + rat.Damage.ToString();


            timer.Tick += new EventHandler(timer1_Tick);
            timer.Interval = 1000;
            timer.Start();
     }
}

private void timer1_Tick(object sender, EventArgs e)
{
    dealDamage();
}

public void dealDamage()
{
    rat.HP--;
    enemyHP.Text = "Enemy HP: " + rat.HP.ToString();
}


我有:

rat.HP--;
enemyHP.Text = "Enemy HP: " + rat.HP.ToString();


但是我该怎么做,这样它将减去一个变化的数量。

最佳答案

重载方法:

public void dealDamage(int damage)
{
    rat.HP -= damage;
    enemyHP.Text = "Enemy HP: " + rat.HP.ToString();
}


这样,您可以调用dealDamage()(不带参数)并仅将HP减1,或者可以调用dealDamage(yourValue)HP减量可变(即dealDamage(15)HP减15) )。

要从滴答事件中调用此方法,如果您希望在两个范围之间随机产生一定程度的损害,则可以执行以下操作:

void dealRandomDamage(int bottomLimit, int upperLimit)
{
    dealDamage((new Random()).Next(bottomLimit, upperLimit));
}


然后在滴答处理程序中,您可以执行以下操作:

private void timer1_Tick(object sender, EventArgs e)
{
    dealRandomDamage(1, 10);
}


随机减少1到10之间的任何值。

编辑:亚当提出了一个好点。如果您采用这种方法,那么最好将dealDamage()函数定义更改为以下内容:

public void dealDamage()
{
    dealDamage(1);
}


这将消除造成损坏代码的冗余和重复(无双关语)。这样,如果您曾经改变了如何处理损害的逻辑,那么这仅仅是对逻辑的一次改变。

08-26 01:20