C ++发现n点尽可能接近给定的xy

时间:2012-02-23 17:36:49

标签: c++ algorithm points

在RTS游戏中,当您移动某些单位时,他们会找到路径并前往最接近所选位置的位置。我不知道如何选择那些地方,我的意思是每个单位的目标点。

例如,当我派遣9名士兵时,我希望他们有这样的目标:

. - empty, 
T - targets for units, 
O - the place that I've choosen to move them, target for unit too
.....
.TTT.
.TOT.
.TTT.
.....

寻路算法准备就绪,我需要生成目标点的列表(或矢量),每个单元一个。我不想要完整的代码,只是一些建议和想法......我必须记住,并非所有的地方都可以步行......

Thanx对任何回复,抱歉我的英语不好......

2 个答案:

答案 0 :(得分:1)

您可以使用分配点中的BFS。如果所选图块是可以容纳单元[不是障碍物]的图块,则使用单位“填充”所选图块。继续这样做,直到你“耗尽”单位数量。

在伪代码中:

selectTargetLocation(point,units):
  currUnit <- 0
  queue<- new queue
  visited <- {}
  map<unit,point> <- empty map
  queue.push(point)
  while (queue.empty() == false): 
     current <- queue.takeFirst()
     visited.add(current)
     for each p such that p and current are neighbors: //insert neighbors to queue
          if p is not in visited: 
                queue.push(p)
     if current is not an obstacle: 
         map.put(unit[currUnit++],current) 
     if (currUnit == units.length) break //break when exhausted all units
  return map

答案 1 :(得分:1)

我的想法是这样的:首先,测试目的地是否被占用,或者一个单位是否已经拥有该目的地。如果是这种情况,则需要找到一个免费的关闭点。您可以将所有近点推送到当前点的队列,依此类推......类似于填充算法),直到找到未占用的点。然后,找到该位置的路径。