게임 (WPF)의 경우 맵 편집기를 만들어야합니다. 지도는 4x3지도 필드의 행렬로 정의됩니다. 사용자가지도를 편집하면 각 입력란을 사용 또는 사용 중지 할 수 있으며지도의 모양을 정의합니다. 이제 각 필드가 다른 필드에 연결된 경우에만 맵이 유효합니다. 나는. 이 맵 (청색 활성, 비활성 회색) 유효 : I 맵 필드가 2 차원 배열을2 차원 배열의 연결된 이웃을 확인하는 알고리즘
. 각 필드는 활성인지 여부를 정의하는 boolean
값을가집니다. 각 필드에 직접 활성 이웃 필드가 (정확히 1 활성 필드 또는 1 개 이상의 활성 필드 중 하나가 있습니다) 경우
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;
}
이 방법 만 검사 :지도가 나는 다음과 같은 방법을 쓴 유효한지 확인하십시오.
그러나이지도는 유효하지 말아야 : 불행하게도이 방법으로, 다음지도는 또한 유효합니다. 지도가 유효한지 확인하는 가장 효율적인 알고리즘은 무엇입니까?
모든 맵은 항상 맨 위 왼쪽 필드를 활성으로 시작합니까? –
아니요, 원하는대로지도를 정의 할 수 있습니다. 그래서 그것은 또한 필드 [2] [2]와 [2] [3]만을 가질 수 있습니다. –
필드를 두 개 이상의 다른 필드에 연결할 수 있습니까? 예를 들어 [2] [2] [1] [2] [2] [3]에 연결할 수 있습니까? –