轰炸机的爆炸有时无法正常工作

时间:2020-03-14 12:40:07

标签: c# for-loop monogame

我正在为一名炸弹手工作,但爆炸的循环存在问题。 有时它可以正常工作并在破坏一个块时停止,但是有时它一直持续到达到最大爆炸大小为止。

为便于可视化:

Explosion size = 5
layout:                      Bomb     |Empty    |Breakable|Breakable|Breakable|Breakable
becomes sometimes (correct): Explosion|Explosion|Explosion|Breakable|Breakable|Breakable
and sometimes (incorrect):   Explosion|Explosion|Explosion|Explosion|Explosion|Breakable

就像中断有时在代码中被忽略一样。 没有模式,代码可以正确识别所有块

这是爆炸右侧的控制代码。

for (int j = 1; j < player.ExplosionSize; j++)
{
    breakPointRight = j + 1;
    if ((int)map.ArrayMap.GetValue((int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y) == (int)Constants.ENUMMAP.unbreakable)
        break;
    else if ((int)map.ArrayMap.GetValue((int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y) == (int)Constants.ENUMMAP.free)
        map.ArrayMap.SetValue(Constants.ENUMMAP.explosion, (int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y);
    else if ((int)map.ArrayMap.GetValue((int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y) == (int)Constants.ENUMMAP.breakable)
    {
        CalculateChanceforPickup((int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y);
        break;
    }
    //check if block is a pickup
    else if ((int)map.ArrayMap.GetValue((int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y) > (int)Constants.ENUMMAP.free)
    {
        map.ArrayMap.SetValue(Constants.ENUMMAP.explosion, (int)bombs[i].Grid.X + j, (int)bombs[i].Grid.Y );
        break;
    }
}

0 个答案:

没有答案