我在两个地方初始化同一个变量。
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有什么想法?
答案 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();
}