我需要创建一个地图编辑器来制作一个(WPF)游戏的地图。地图由4x3个地图字段的矩阵定义。用户编辑地图时,可以启用或禁用每个字段,从而定义地图的外观。现在,只有当所有字段都与另一个字段连接时,地图才是有效的。例如,这张地图是有效的(蓝色为活动状态,灰色为非活动状态):
我有一个二维数组,其中包含地图字段。每个字段都有一个布尔值,用于定义它是否处于活动状态。为了检查地图是否有效,我编写了以下方法:
private bool IsMapPlayable()
{
int numberOfActiveFields = 0;
for (var row = 0; row < this.GameFields.Length; row++)
{
for (var col = 0; col < this.GameFields[row].Length; col++)
{
if (!this.GameFields[row][col].IsActive) continue;
numberOfActiveFields++;
if (!(row > 0 && this.GameFields[row - 1][col].IsActive)
&& !(row + 1 < this.GameFields.Length && this.GameFields[row + 1][col].IsActive)
&& !(col > 0 && this.GameFields[row][col - 1].IsActive)
&& !(col + 1 < this.GameFields[row].Length && this.GameFields[row][col + 1].IsActive)
&& numberOfActiveFields > 1)
{
return false;
}
}
}
return numberOfActiveFields > 0;
}
该方法仅检查每个字段是否具有直接活动邻居字段(并且具有1个活动字段或多个活动字段)。不幸的是,使用此方法,以下地图也是有效的:
![enter image description here](https://istack.dev59.com/o404r.webp)
![enter image description here](https://istack.dev59.com/LzPi5.webp)