저는 pyglet/openGL을 사용하여 파이썬에서 타일 기반의 응용 프로그램을 구축하고 있습니다. 여기에서 주어진 셀에 대해 인접한 셀을 모두 찾아야합니다. 나는 데카르트 격자의 한 사분면에서 일하고있다. 각 셀에는 그리드의 위치 (x_coord 및 y_coord)를 나타내는 x 및 y 값이 있습니다. 이것은 픽셀 값이 아니라 그리드 위치입니다. 나는 인접한 세포를 얻는 효율적인 방법을 찾고있다. 이것은 아마 것그리드에서 인접한 셀을 찾는 파이썬적이고 효율적인 방법
def get_adjacent_cells(self, cell):
result = []
x_coord = cell.x_coord
y_coord = cell.y_coord
for c in grid.cells:
if c.x_coord == x_coord and c.y_coord == y_coord: # right
result.append(c)
if c.x_coord == x_coord - 1 and c.y_coord == y_coord + 1: # lower right
result.append(c)
if c.x_coord == x_coord - 1 and c.y_coord == y_coord: # below
result.append(c)
if c.x_coord == x_coord - 1 and c.y_coord == y_coord - 1: lower left
result.append(c)
if c.x_coord == x_coord and c.y_coord == y_coord - 1: right
result.append(c)
// -- similar conditional for remaining cells
: 최대에, 그러나 때문에 그리드의 경계의 8 개의 가능한 인접 셀은 단순하지만 아마 비효율적 인 접근과 같은 몇 3. 같은 의사 코드가있을 수있다는 다음과 같이 보입니다 이 코드는 모든 프레임을 실행할 필요가 있고 큰 그리드에서는 성능에 영향을 줄 수 있지만 그래도 잘 작동합니다. 더욱 간소화되고 CPU 사용량이 적은 접근 방식에 대한 아이디어가 있습니까? 아니면 그냥이 방법을 사용해야합니까?
미리 감사드립니다. , c.neighbors
같은 속성을 통해서,
은 'Pythonesque'형용사가 아니십니까? :-) – Simon
당신이 이것을하는 당신의 방법을 유지하고 싶다면, 적어도 얼마나 많은 결과가 결과에 포함되었는지 계산하는 카운터를 만들 것입니다. 8에 도달하면 루프를 벗어납니다. 또한 셀을 추가 할 때 8과 동일한 지 확인하십시오. –