2013-12-17 1 views
3

저는 간단한 2D 그리드 기반 게임을 만들고 각 캐릭터가 게임 보드에 낼 수있는 "위협"영역을 계산할 방법을 찾고 있습니다. 현재 지점의 위협은 계산하기 쉽습니다. 아래 빨간색 다이아몬드입니다. 그러나 나는이 정보를 임의의 "can can here here"영역 (오렌지색)과 결합하려고합니다.2D 그리드의 위협 범위와 임의의 이동 범위를 결합하는 알고리즘이 있습니까?

알고리즘을 함께 사용하면 은 내 캐릭터가 가능한 모든 이동 및 현재 위치에서 공격 할 수있는 모든 타일의 조합을 제공합니다.

난 그냥, 가능한 모든 동작을 반복 거기에 다이아몬드 모양을 적용하고 모든 위협 사각형의 집합을 만들 수 있습니다 물론 enter image description here

. 더 좋은 방법이 있습니까?

+0

플레이어가 걸을 수있는 타일에 다이아몬드 모양을 적용 할 수 없습니까? 당신은 여전히 ​​"가능한 한 반복"하는 과정을 거치지 만 분석해야하는 타일을 상당히 제한 할 것입니다. 내가 뭔가를 놓치지 않는 한 – jraede

+0

그래서, 당신은 정말로 단지 가장자리 움직임에 대해 걱정해야합니다. 가장 바깥 쪽의 사각형? 원래의 다이아몬드를 그린 후에는 모든 "canMoveTo"사각형을 반복하지만, 전체 다이아몬드를 반복하는 대신 테두리 사각형을 반복하면됩니다. – nhgrif

+0

@nhgrif : 이동 범위가 무기 범위보다 길기 때문에 아니요. 경계 만 확인하면 표시된 위협 영역의 중간에 큰 구멍이 생길 수 있습니다. – user2357112

답변

5

여기에서 해결하는 문제는 2D Convolution 유사하다 :

요소는 하나 (스칼라 또는 벡터 값을 포함하는 대) 적용 또는 발견되어 사용자의 경우
---------------  ---------------  -------XX------ 
-------X-------  ---------------  ------XXXX----- 
------XXX------  -------XX------  -----XXXXXX---- 
-----XXXXX----- * ------XXX------ = ----XXXXXXX---- 
------XXX------  --------X------  -----XXXXXX---- 
-------X-------  ---------------  ------XXXX----- 
---------------  ---------------  --------X------ 

, 이것은 Dilation에 감소 형태학의 조작. 확장을 효율적으로 수행하는 방법에 대한 많은 논문과 코드 샘플이 있습니다. this one이 특히 문제에 적용됩니다.

+0

이것은 정확히 내가 찾고있는 것입니다. 알고리즘의 이름은 "K로 Dilate"입니다. –

관련 문제