C# 程序的行为就像变量不';不存在,直接去“去”;否则";
所以,我遇到了一个小问题。无论何时在战斗中,该回合每秒循环一次,无论发生什么情况,该生物总是在玩家击中它之前死亡。所以问题是,这个“如果”语句应该如何构造以获取玩家正在战斗的生物的动态生命总量C# 程序的行为就像变量不';不存在,直接去“去”;否则";,c#,variables,C#,Variables,所以,我遇到了一个小问题。无论何时在战斗中,该回合每秒循环一次,无论发生什么情况,该生物总是在玩家击中它之前死亡。所以问题是,这个“如果”语句应该如何构造以获取玩家正在战斗的生物的动态生命总量 public void StartBattle() { messages.Add(String.Format("You engage in combat with {0}", monster.Name)); battleTimer.Start();
public void StartBattle()
{
messages.Add(String.Format("You engage in combat with {0}", monster.Name));
battleTimer.Start();
}
private void OnBattleUpdate(object sender, ElapsedEventArgs e)
{
if (monster.Health <= 0)
{
ActionResult result = monster.GetAttackResult();
messages.Add(result.LookMessage);
state.Character.CauseDamage(result.HealthChange);
if (state.Character.Health <= 0)
{
messages.Add("You have died.");
battleTimer.Stop();
}
int playerDamage = state.Character.GetDamage().HealthChange;
messages.Add(String.Format("You swing your weapon at {0} and cause {1} damage", monster.Name, playerDamage));
monster.CauseDamage(playerDamage);
messages.Add(String.Format("Health : {0}/{1}", state.Character.Health, state.Character.MaxHealth));
}
else
{
int playerDamage = state.Character.GetDamage().HealthChange;
messages.Add(String.Format("You swing your weapon at {0} and cause {1} damage", monster.Name, playerDamage));
messages.Add(String.Format("The {0} died.", monster.Name));
messages.Add(String.Format("You loot {0} gold from the {1}", monster.Gold, monster.Name));
messages.Add(String.Format("Health : {0}/{1}", state.Character.Health, state.Character.MaxHealth));
state.Character.Gold += monster.Gold;
mapManager.RemoveMonster(monster, mapManager.MapName);
battleTimer.Stop();
}
}
这些线
if (monster.Health <= 0)
{
ActionResult result = monster.GetAttackResult();
此属性的实现不正确。它抛出StackOverflowException,因为setter递归地调用自己
public bool IsAlive
{
get { return _isAlive; }
set
{
if (Health <= 0)
{
_isAlive = false;
IsAlive = false;
}
else
{
_isAlive = true;
IsAlive = true;
}
}
}
您当前直接设置IsAlive的状态。然而,这是没有道理的。相反,设置当前运行状况,并让IsAlive getter根据运行状况解决问题
并删除显式更改IsAlive和_isalivelike的行
monster.IsAlive = true;
monster._isAlive = true;
你可能还想防止角色死后受到打击
if (state.Character.Health <= 0)
{
messages.Add("You have died.");
battleTimer.Stop();
return; // You don't want to let a dead character damage a monster
}
if(state.Character.Health这些行
if (monster.Health <= 0)
{
ActionResult result = monster.GetAttackResult();
此属性的实现不正确。它抛出StackOverflowException,因为setter递归调用自身
public bool IsAlive
{
get { return _isAlive; }
set
{
if (Health <= 0)
{
_isAlive = false;
IsAlive = false;
}
else
{
_isAlive = true;
IsAlive = true;
}
}
}
您当前直接设置了IsAlive的状态。但是,这没有意义。相反,请设置当前运行状况,让IsAlive获取程序根据运行状况解决问题
并删除显式更改IsAlive和_isalivelike的行
monster.IsAlive = true;
monster._isAlive = true;
你可能还想防止角色死后受到打击
if (state.Character.Health <= 0)
{
messages.Add("You have died.");
battleTimer.Stop();
return; // You don't want to let a dead character damage a monster
}
if(state.Character.Health这些行
if (monster.Health <= 0)
{
ActionResult result = monster.GetAttackResult();
此属性的实现不正确。它抛出StackOverflowException,因为setter递归调用自身
public bool IsAlive
{
get { return _isAlive; }
set
{
if (Health <= 0)
{
_isAlive = false;
IsAlive = false;
}
else
{
_isAlive = true;
IsAlive = true;
}
}
}
您当前直接设置了IsAlive的状态。但是,这没有意义。相反,请设置当前运行状况,让IsAlive获取程序根据运行状况解决问题
并删除显式更改IsAlive和_isalivelike的行
monster.IsAlive = true;
monster._isAlive = true;
你可能还想防止角色死后受到打击
if (state.Character.Health <= 0)
{
messages.Add("You have died.");
battleTimer.Stop();
return; // You don't want to let a dead character damage a monster
}
if(state.Character.Health这些行
if (monster.Health <= 0)
{
ActionResult result = monster.GetAttackResult();
此属性的实现不正确。它抛出StackOverflowException,因为setter递归调用自身
public bool IsAlive
{
get { return _isAlive; }
set
{
if (Health <= 0)
{
_isAlive = false;
IsAlive = false;
}
else
{
_isAlive = true;
IsAlive = true;
}
}
}
您当前直接设置了IsAlive的状态。但是,这没有意义。相反,请设置当前运行状况,让IsAlive获取程序根据运行状况解决问题
并删除显式更改IsAlive和_isalivelike的行
monster.IsAlive = true;
monster._isAlive = true;
你可能还想防止角色死后受到打击
if (state.Character.Health <= 0)
{
messages.Add("You have died.");
battleTimer.Stop();
return; // You don't want to let a dead character damage a monster
}
if(state.Character.Healthmonster
在哪里定义?您在哪里初始化monster.Health为非0?您在哪里初始化monster.Health为非0?您在哪里初始化monster.Health为非0?您在哪里初始化monster.Health为非0?您在哪里初始化monster.Health为monster
defined?在哪里初始化monster。运行状况不是0?进行指定的编辑会返回相同的结果,但感谢您的回答!我怀疑您在分支方面也可能有其他错误。请像阅读纯文本叙述而不是代码一样阅读您的所有代码,看看它对您是否有意义。Aft呃,大量的故障排除,我仍然没有取得任何进展。它从未识别if语句并直接转到其他语句。您愿意快速查看整个代码吗?因为我无法找到其他资源,我可以快速查看。您可以发布一个链接到您项目的zip吗?非常感谢e edit specified返回了相同的结果,感谢您的回答!我怀疑您在分支方面可能还有其他错误。请像阅读纯文本叙述而不是代码一样阅读所有代码,看看它是否对您有意义。经过大量的故障排除,我仍然没有取得任何进展。它从未识别if语句然后直接转到其他地方。你愿意快速查看整个代码吗?因为我还没有找到其他可以快速查看的资源。你能发布一个链接到你的项目的zip吗?非常感谢!进行指定的编辑返回相同的结果,谢谢你的回答!我怀疑你可能已经e分支方面的其他错误。阅读所有代码,就像它是纯文本叙述而不是代码一样,看看它对您是否有意义。经过大量的故障排除,我仍然没有取得任何进展。它从不识别if语句,直接转到else。您愿意在整个代码中快速查看代码吗ty?因为我还没有找到其他可以快速查看的资源。您可以发布项目zip的链接吗?非常感谢!进行指定的编辑返回了相同的结果,感谢您的回答!我怀疑您在分支方面可能还有其他错误。请像读纯文本一样阅读所有代码比较而不是代码,看看它是否对您有意义。经过大量的故障排除,我仍然没有取得任何进展。它从未识别if语句,而是直接转到其他语句。您愿意快速查看整个代码吗?因为我无法找到其他资源,我可以快速查看。您可以发布一个链接到您的项目的zip?非常感谢!