Иногда взрыв в бомбермане не работает должным образом - PullRequest
0 голосов
/ 14 марта 2020

Я работаю над бомберманом для развлечения, но есть проблема с 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;
    }
}
...