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.Health
monster
在哪里定义?您在哪里初始化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?非常感谢!