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语句并删除递归调用,以及除停机时间之外的所有其他统计数据都能正确计算。头架起重机。