c# - 轰炸机的爆炸有时无法正常工作
问题描述
我正在制作一个轰炸机以获得乐趣,但爆炸的循环存在问题。有时它会正常工作并在破坏块时停止,但有时它会继续运行直到达到最大爆炸大小。
为了帮助可视化:
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;
}
}
解决方案
推荐阅读
- javascript - 在内部调用(js)的函数中使用setInterval?
- arrays - Mongodb:同时插入多个文档(使用$in之类的键)
- c++ - 在这种情况下,通过构造函数或显式函数进行更好的隐式转换是什么?
- python - Numpy找不到临时文件
- c - 如何避免在 C 中使用非空终止的缓冲区调用 fopen()?
- c# - 从zip中提取时如何检测文件中的CRC错误
- c# - 带有导航属性的 Linq 动态查询 OrderBy
- matlab - 为什么 OpenCV 中的 filter2D 给出的结果与 Matlab 中的 imfilter 不同?
- variables - 汇编变量被删除(16 位 x86 汇编)
- google-maps-api-3 - Google Maps API V3 使用 data.addGeoJson 缓慢添加标记