반지름이 N 인 6 각형 링은 6 개의 직선으로 구성되며 각각은 길이가 N입니다. 아래의 매우 조잡한 예를 참조하십시오.) N = 2 :
화살표는 각각 2 헥스를 덮습니다.
나는 당신에게 north (), southeast () 등과 같은 특정 방향으로 이웃 타일을 제공하는 함수가 있다고 가정합니다. 따라서 의사 코드의 알고리즘은 다음과 같아야합니다.
var point = startingPoint.north(N)
for i = 0..N-1:
result.add(point)
point = point.southeast(1);
for i = 0..N-1:
result.add(point)
point = point.south(1);
for i = 0..N-1:
result.add(point)
point = point.southwest(1);
for i = 0..N-1:
result.add(point)
point = point.northwest(1);
for i = 0..N-1:
result.add(point)
point = point.north(1);
for i = 0..N-1:
result.add(point)
point = point.northeast(1);
에지 사례 N = 1, 6 타일 반환, N = 0 빈 세트 반환에서도 작동합니다.
코드가 완벽하지 않다는 것을 알고 있습니다 :) 여기에 중복성이 있습니다. 규칙적으로 바둑판 식으로 배열 된지도 (육각형 또는 다른 방식)를 사용하는 프로젝트에는 보통 열거 형 "방향"이 있는데,이를 통해 더 원활하게 수행 할 수 있습니다.
var point = startingPoint.inDir(N, Direction.North)
var dir = Direction.SouthEast.
for d = 0..Direction.count():
for i = 0..N-1:
result.add(point)
point = point.inDir(1, dir);
dir = nextDirection(dir);