具体来说,我正在谈论本次比赛的编程:http ://www.nodewar.com/about
比赛涉及您在二维世界中面对其他拥有大量宇宙飞船的团队。船只受到边界的限制(如果它们退出,它们就会死亡),并且它们必须不断地避开卫星(它们用它们的重力拉动船只)。目标是杀死对方的女王。
我试图编写一些相对基本的技术,但我觉得好像我缺少一些基本的东西。
例如,我实现了一些 boids 行为(http://www.red3d.com/cwr/boids/),但它们似乎缺乏……目标,可以这么说。
这类游戏是否有任何通用技术(或者,最好是技术组合)?
编辑
我只想用赏金再次打开它,因为我觉得我仍然缺少关键信息。以下是我的 NodeWar 代码:
boundary_field = (o, position) ->
distance = (o.game.moon_field - o.lib.vec.len(o.lib.vec.diff(position, o.game.center)))
return distance
moon_field = (o, position) ->
return o.lib.vec.len(o.lib.vec.diff(position, o.moons[0].pos))
ai.step = (o) ->
torque = 0;
thrust = 0;
label = null;
fields = [boundary_field, moon_field]
# Total the potential fields and determine a target.
target = [0, 0]
score = -1000000
step = 1
square = 1
for x in [(-square + o.me.pos[0])..(square + o.me.pos[0])] by step
for y in [(-square + o.me.pos[1])..(square + o.me.pos[1])] by step
position = [x, y]
continue if o.lib.vec.len(position) > o.game.moon_field
value = (fields.map (f) -> f(o, position)).reduce (t, s) -> t + s
target = position if value > score
score = value if value > score
label = target
{ torque, thrust } = o.lib.targeting.simpleTarget(o.me, target)
return { torque, thrust, label }
然而,我可能错误地实现了势场,因为我能找到的所有示例都是关于离散运动的(而 NodeWar 是连续的而不是精确的)。
主要问题是我的 AI 在游戏区域内停留的时间不会超过 10 秒而不会飞出屏幕或坠入月球。