我正在为一名炸弹手工作,但爆炸的循环存在问题。 有时它可以正常工作并在破坏一个块时停止,但是有时它一直持续到达到最大爆炸大小为止。
为便于可视化:
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;
}
}