def _make_river(river_source,centre):
seen = set()
start = random.choice(river_source.vertices)
seen.add(start)
start.river = True
river_list = []
river_list.append(start)
q = queue.Queue()
q.put(start)
exceptions = []
while not q.empty():
curr = q.get()
next_item = None
for v in curr.v_neighbours:
if v in seen:
continue
seen.add(v)
if v and ((v.elevation <= curr.elevation or ((curr.elevation<2) and v.elevation>4)) and __centre_dist_inc(curr,v,centre)) and (v.elevation >= 0):
next_item = v
if next_item:
if len([i.terrain for i in next_item.neighbours if i.terrain <0]) > 1:
break
else:
q.put(next_item)
if next_item.river:
exceptions.append(next_item)
next_item.river = True
river_list.append(next_item)
if len(river_list) < 11:
for i in river_list:
if i not in exceptions:
i.river = False
return
return river_list
评论列表
文章目录