我需要帮助优化我的代码。这是有问题的卑鄙功能。查找所有地图坐标的邻居
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)坐标的元组组成。如果你有更好的解决方案,元组的东西可以改变。这个函数在地图生成过程中被调用一次,并且是目前最慢的。