현재 셀이있는 눈금이있는 프로젝트에서 작업 중입니다. 모든 셀은 상대 'x'및 'y'좌표를 허용하는 함수로 인접 셀을 쿼리하는 기능을 가지고 있습니다. 이것은 잘 작동하지만 지금은 이런 식으로, 결합 될 때, 마름모를 형성 인접 셀의 집합을 조회 할 :그리드의 '마름모 모양'으로 인접한 셀을 열거합니다.
이제* * * * * * * * * * * * * 0 * * * * * * * 0 0 0 * * * * * 0 0 0 0 0 * * * 0 0 0 C 0 0 0 * * * 0 0 0 0 0 * * * * * 0 0 0 * * * * * * * 0 * * * * * * * * * * * * * 'C' is the cell on which the query is supposedly called...
, 나는 지금까지 함께 온 가장 좋은 일이 필수적이다 악몽 :
private IEnumerable<Cell> GetRhombusNeighours()
{
yield return _getRelativeCell(-3, 0);
yield return _getRelativeCell(-2, 1);
yield return _getRelativeCell(-2, 0);
yield return _getRelativeCell(-2, -1);
yield return _getRelativeCell(-1, -2);
yield return _getRelativeCell(-1, -1);
yield return _getRelativeCell(-1, 0);
yield return _getRelativeCell(-1, 1);
yield return _getRelativeCell(-1, 2);
yield return _getRelativeCell(0, -3);
yield return _getRelativeCell(0, -2);
yield return _getRelativeCell(0, -1);
yield return _getRelativeCell(0, 0);
yield return _getRelativeCell(0, 1);
yield return _getRelativeCell(0, 2);
yield return _getRelativeCell(0, 3);
yield return _getRelativeCell(1, -2);
yield return _getRelativeCell(1, -1);
yield return _getRelativeCell(1, 0);
yield return _getRelativeCell(1, 1);
yield return _getRelativeCell(1, 2);
yield return _getRelativeCell(2, 1);
yield return _getRelativeCell(2, 0);
yield return _getRelativeCell(2, -1);
yield return _getRelativeCell(3, 0);
}
이 방법을 루프 용으로 약간 더 동적으로 만들 수 있습니다. 가독성을 떨어 뜨릴 가능성이 있습니다. 그러나이 문제를 정확히 해결할 수있는 알고리즘이 있습니까? 저는 C#에서 일하고 있습니다. 그러나 저는 언어 독립적 인 조언에 개방되어 있습니다!
가장자리/경계선 감지가 필요하지 않습니다. 그것은 이미 다루어 져 있습니다. 나는 순전히 상대적인 'X'와 'Y'좌표를 수집하는 데 관심이 있습니다!
물론 :
는 더 자기 문서화 당신은 또한, 방법으로 경우() 이동할 수 있습니다 말을 확인하십시오. 네가 그렸던 것을 보라. 고정 그리드에서 단순 거리 함수입니다. 중첩 된 for 루프를 사용하여 쉽게 코드를 작성할 수 있습니다. – Darek