我为一个名为Ogar的项目制作了一个bot,这是一个用Node.js编写的Agar.io服务器实现。计算避开障碍物的圆角
这个机器人有一个障碍,一个叫做病毒的绿色尖刺细胞(见插图)。我需要编程这个机器人来避免这个障碍,但我没有运气。由于插图中有很多目标,因此它基于更新。
这里是我结束了到现在为止的代码。
BotPlayer.prototype.avoidObstacles = function(cell, angle) {
// Sum up all of the vector angles of obstacles to cell and react against it
var angleSum = 0;
var collided = this.collisionFromList(cell, this.obstacles);
if (collided.length == 0) return angle; // Not to return NaN
for (var i = 0; i < collided.length; i++) {
angleSum += this.angle(cell.position, collided[i].position);
}
angleSum /= collided.length; // Average out the angle sum
// TODO: Find closest available edge
angleSum += Math.PI/2;
return angle + angleSum;
};
这样确实可以在大多数情况下,但有时机器人完全忽略障碍(this.collisionFromList(cell, this.obstacles);
是完全没有问题),并最终通过它从字面上去(爆炸成大量细胞)。
BotPlayer.prototype
对这种计算有很多有用的功能。见this link。
我不需要任何寻路争吵,只是这个简单的避免措施。
如果有三个等距的障碍,你的机器人正朝着往中间的障碍,那不是你的计算保留BOT往中间的障碍物去角? –