對於遊戲(WPF),我需要創建一個地圖編輯器。地圖由4x3地圖字段的矩陣定義。當用戶編輯地圖時,他可以啓用和禁用每個字段,用他定義地圖的外觀。現在,只有每個字段都連接到另一個字段,地圖纔是有效的。即此映射是有效的(藍色是活動的,不活動的灰色):檢查二維數組中連接的鄰居的算法
我與地圖字段的二維數組。每個字段都有一個boolean
值,它定義它是否處於活動狀態。要檢查是否地圖是有效的,我寫了下面的方法:
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活躍的領域或超過1個活躍的領域)。不幸的是用這種方法,下面的地圖也有效:
但這些地圖不應該是有效的。什麼是檢查地圖是否有效的最有效的算法?
是否每個地圖始終以左上角字段開始,並且處於活動狀態? –
不,您可以根據需要定義地圖。所以它也可能只有字段[2] [2]和[2] [3]有效。 –
一個字段可以連接到兩個以上的其他字段。例如,可以將[2] [2]連接到[1] [2],[2] [1]和[2] [3]? –