我需要幫助優化我的代碼。這是有問題的卑鄙功能。查找所有地圖座標的鄰居
def FindAllNeighborCoords(cardinal_neighbor_array, principle_neighbor_array, width, height):
# Loop through every coordinate on the map.
for x in xrange(width):
for y in xrange(height):
# These if checks make sure the coordinate is in the map.
if x - 1 >= 0:
cardinal_neighbor_array[x, y].add((x - 1, y))
principle_neighbor_array[x, y].add((x - 1, y))
if y - 1 >= 0:
cardinal_neighbor_array[x, y].add((x, y - 1))
principle_neighbor_array[x, y].add((x, y - 1))
if y + 1 < height:
cardinal_neighbor_array[x, y].add((x, y + 1))
principle_neighbor_array[x, y].add((x, y + 1))
if x + 1 < width:
cardinal_neighbor_array[x, y].add((x + 1, y))
principle_neighbor_array[x, y].add((x + 1, y))
if x - 1 >= 0 and y - 1 >= 0:
principle_neighbor_array[x, y].add((x - 1, y - 1))
if x - 1 >= 0 and y + 1 < height:
principle_neighbor_array[x, y].add((x - 1, y + 1))
if x + 1 < width and y - 1 >= 0:
principle_neighbor_array[x, y].add((x + 1, y - 1))
if x + 1 < width and y + 1 < height:
principle_neighbor_array[x, y].add((x + 1, y + 1))
print cardinal_neighbor_array[20, 20]
set([20, 21), (21, 20), (19, 20), (20, 19)])
該函數遍歷地圖上的每個座標,發現周圍鄰居座標的鄰居並將它們保存到一個集合中。它搜索兩個鄰居類型 - 基數和主體。或者,4和8.每組都放置在一個2D數組中。然後,我可以通過做一些像cardinal_array [0,0]這樣的事來抓取座標的鄰居,這將返回一組座標。我希望這是有道理的!我在我的項目中使用鄰居TON,因此查找和存儲它們都會更快,而不是反覆查看它們。我的引擎的大量部分使用這些鄰居集合,所以我寧願加快目前的工作方式,而不是做出任何重大更改。這些集合由包含每個鄰居的(x,y)座標的元組組成。如果你有更好的解決方案,元組的東西可以改變。這個函數在地圖生成過程中被調用一次,並且是目前最慢的。