Я работаю над бомберманом для развлечения, но есть проблема с l oop для взрывов. Иногда он работает правильно и останавливается, когда разрушает блок, но иногда он продолжает работать, пока не будет достигнут максимальный размер взрыва.
Чтобы помочь визуализировать:
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;
}
}