Node.jsで書かれたAgar.ioサーバーの実装であるOgarというプロジェクトのボットを作っています。障害物を避けて円を描く角度を計算する
このボットには障害があり、ウイルスと呼ばれる緑色のスパイク状の細胞があります(イラスト参照)。私はこの障害を避けるためにこのボットをプログラムする必要がありますが、私は運がないです。イラストのようなターゲットがたくさんあるので、アップデートに基づいています。
ここで私は今までになってしまったコードです。
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を参照してください。
私はパスファインダーを必要としません。この簡単な対策はありません。
3つの等間隔障害物や、あなたのボットは、中央障害物に向かっているがある場合、あなたは、角度計算が途中障害物に向かうボットを維持しないだろう? –