C# Can';无法获得正确计算的值

C# Can';无法获得正确计算的值,c#,winforms,C#,Winforms,问题: public void button1_Click(object sender, EventArgs e) { currentAmmo = clip; for (float r = roundCounter; r < 10; r++) { turnTime = 10; Fire(); }

问题:

        public void button1_Click(object sender, EventArgs e)
        {

            currentAmmo = clip;

            for (float r = roundCounter; r < 10; r++)
            {
                turnTime = 10;
                Fire();

           }   
        }

        void Reload()
        {
            currentAmmo = clip;
            reloadCount++;
            turnTime -= reload;
            Fire();
        }

        void Fire()
        {
            if (currentAmmo > 0)
            {
               for (float a = currentAmmo; a > 0; a--)
               {
                   if (turnTime >= speed)
                   {
                       dpt = dpt + damage;
                       bullets++;
                       currentAmmo--;
                       turnTime -= speed ;

                       if (currentAmmo == 0)
                       {
                           if (turnTime < reload)
                           {
                               downTime += turnTime;
                           }
                           if (turnTime >= reload)
                           {
                               Reload();
                           }                               
                       }
                    }
                    if (turnTime < speed)
                    {
                        if (turnTime < reload)
                        {
                            downTime += turnTime;
                        }
                        if (turnTime >= reload)
                        {
                            Reload();
                        }                            
                    }
                }
           }
           if (currentAmmo == 0)
           {
               if (turnTime < reload)
               {
                   downTime += turnTime;
               }
               if (turnTime >= reload)
               {
                   Reload();
               }
        }

        }
    }
}
停机时间
应以值
10
结束,但其值为
42
。 它是否运行超过10次?或者它只是没有按照我想要的方式计算周转时间

整个场景:

        public void button1_Click(object sender, EventArgs e)
        {

            currentAmmo = clip;

            for (float r = roundCounter; r < 10; r++)
            {
                turnTime = 10;
                Fire();

           }   
        }

        void Reload()
        {
            currentAmmo = clip;
            reloadCount++;
            turnTime -= reload;
            Fire();
        }

        void Fire()
        {
            if (currentAmmo > 0)
            {
               for (float a = currentAmmo; a > 0; a--)
               {
                   if (turnTime >= speed)
                   {
                       dpt = dpt + damage;
                       bullets++;
                       currentAmmo--;
                       turnTime -= speed ;

                       if (currentAmmo == 0)
                       {
                           if (turnTime < reload)
                           {
                               downTime += turnTime;
                           }
                           if (turnTime >= reload)
                           {
                               Reload();
                           }                               
                       }
                    }
                    if (turnTime < speed)
                    {
                        if (turnTime < reload)
                        {
                            downTime += turnTime;
                        }
                        if (turnTime >= reload)
                        {
                            Reload();
                        }                            
                    }
                }
           }
           if (currentAmmo == 0)
           {
               if (turnTime < reload)
               {
                   downTime += turnTime;
               }
               if (turnTime >= reload)
               {
                   Reload();
               }
        }

        }
    }
}
这只是一个简单的应用程序,我正在设置,以帮助我计算和平衡的一个游戏,我正在工作的元素。该程序模拟一支枪被发射,直到它的回合时间或弹药用完为止。如果回合内还剩时间,枪将尝试重新装弹,然后继续开火。这应该模拟10轮,每轮10秒

downtime
变量表示当回合剩余时间不足以重新装载或开火时,每个回合浪费的时间

代码:

        public void button1_Click(object sender, EventArgs e)
        {

            currentAmmo = clip;

            for (float r = roundCounter; r < 10; r++)
            {
                turnTime = 10;
                Fire();

           }   
        }

        void Reload()
        {
            currentAmmo = clip;
            reloadCount++;
            turnTime -= reload;
            Fire();
        }

        void Fire()
        {
            if (currentAmmo > 0)
            {
               for (float a = currentAmmo; a > 0; a--)
               {
                   if (turnTime >= speed)
                   {
                       dpt = dpt + damage;
                       bullets++;
                       currentAmmo--;
                       turnTime -= speed ;

                       if (currentAmmo == 0)
                       {
                           if (turnTime < reload)
                           {
                               downTime += turnTime;
                           }
                           if (turnTime >= reload)
                           {
                               Reload();
                           }                               
                       }
                    }
                    if (turnTime < speed)
                    {
                        if (turnTime < reload)
                        {
                            downTime += turnTime;
                        }
                        if (turnTime >= reload)
                        {
                            Reload();
                        }                            
                    }
                }
           }
           if (currentAmmo == 0)
           {
               if (turnTime < reload)
               {
                   downTime += turnTime;
               }
               if (turnTime >= reload)
               {
                   Reload();
               }
        }

        }
    }
}
public void按钮1\u单击(对象发送者,事件参数e)
{
当前弹药=夹子;
用于(浮点r=圆形计数器;r<10;r++)
{
周转时间=10;
火();
}   
}
无效重新加载()
{
当前弹药=夹子;
重载计数++;
周转时间-=重新装载;
火();
}
虚火
{
如果(当前弹药>0)
{
对于(浮动a=currentAmmo;a>0;a--)
{
如果(旋转时间>=速度)
{
dpt=dpt+损坏;
子弹++;
当前弹药--;
周转时间-=速度;
如果(当前弹药==0)
{
if(周转时间<重新加载)
{
停机时间+=周转时间;
}
如果(周转时间>=重新加载)
{
重新加载();
}                               
}
}
if(转动时间<速度)
{
if(周转时间<重新加载)
{
停机时间+=周转时间;
}
如果(周转时间>=重新加载)
{
重新加载();
}                            
}
}
}
如果(当前弹药==0)
{
if(周转时间<重新加载)
{
停机时间+=周转时间;
}
如果(周转时间>=重新加载)
{
重新加载();
}
}
}
}
}

请只包含您遇到问题的代码。您已经发现了生命的意义。从重新加载调用Fire可能会打乱您的算法。我会避免不合理的递归调用。此外,您可能应该避免在整数可以使用的地方使用浮点-而过早优化通常是正确和正确的敌人,这是一个非常低效的问题。我已经研究了几次该算法,有时使用while语句并删除递归调用,以及除停机时间之外的所有其他统计数据都能正确计算。头架起重机。