显示多个变量?

时间:2015-04-19 15:19:54

标签: c#

我在两个地方初始化同一个变量。

public partial class Form1 : Form
{
    // Stat definitions

    // Player
    int PlayerHP = 10;
    int PlayerAtt = 6;
    int PlayerDef = 4;
    // Enemy
    int EnemyHP = 10;
    int EnemyAtt = 5;
    int EnemyDef = 5;

    public Form1()
    {
        InitializeComponent();
        StatList();
    }

    public void Combat()
    {
        if (PlayerAtt > EnemyDef)
        {
            EnemyHP--;
            CombatLog.Text = "Enemy HP: " + EnemyHP;
        }
    }

    public void Death()
    {
        if (EnemyHP < 0)
        {
            EnemyHP = 0;
        }

        if (EnemyHP == 0)
        {
            CombatLog.Text = "The Enemy has Fallen!";
        }

        if (PlayerHP < 0)
        {
            PlayerHP = 0;
        }

        if (PlayerHP == 0)
        {
            CombatLog.Text = "The Player has Fallen!";
        }
    }

    public void StatList()
    {
        PlayerStats.Lines = new string[] { "Health: " + PlayerHP, "Attack: " + PlayerAtt, "Defence: " + PlayerDef, };
        EnemyStats.Lines = new string[] { "Health: " + EnemyHP, "Attack: " + EnemyAtt, "Defence: " + EnemyDef, };
    }

    private void Attack_Click(object sender, EventArgs e)
    {
        Combat();
        Death();
    }
}

}

无论如何,当更新的&#34; EnemyHP&#34;写在&#34; CombatLog&#34; EnemyStats下的EnemyHP不会更新新值,而是保持与原始赋值相同。

我以为我可以使用一个循环来不断检查它在CombatLog中的效果并在现场更新,但我仍然需要考虑如何写出来。

伟大的Stackoverflow有什么想法?

3 个答案:

答案 0 :(得分:0)

这完全取决于您如何处理视图,以及如何将值更新到视图。我假设你正在使用WPF? 您应该在这里获取有关INotifyPropertyChanged接口的信息: https://msdn.microsoft.com/fr-fr/library/system.componentmodel.inotifypropertychanged%28v=vs.110%29.aspx

此界面可帮助您与视图进行通信,并告知其在更改时刷新值。

处理视图的一种聪明方法是使用MVVM模式。你可以在这里找到一个很棒的教程: http://blogs.msdn.com/b/msgulfcommunity/archive/2013/03/13/understanding_2d00_the_2d00_basics_2d00_of_2d00_mvvm_2d00_design_2d00_pattern.aspx

祝你好运!

答案 1 :(得分:0)

要更新EnemyStats,您需要在Combat之后调用StatList。 请注意,每次调用EnemyStats时都会创建新的字符串数组。它非常浪费而且无效

答案 2 :(得分:0)

回顾每次更新时的StatList确实解决了这个问题。

由于这是基于Windows Form Application我有一个按钮,可以调用此处发生的所有事情。

我的攻击按钮只需要像这样调用Statlist();

private void Attack_Click(object sender, EventArgs e)
    {
        Combat();
        Death();
        StatList();
    }