Ich mache einen Bot für ein Projekt namens Ogar, eine Agar.io Server-Implementierung in Node.js geschrieben.Berechnen Sie den Winkel zum Kreis mit Vermeidung von Hindernissen
Dieser Bot hat ein Hindernis, eine grüne stachelige Zelle namens Virus (siehe Abbildung). Ich muss diesen Bot programmieren, um dieses Hindernis zu vermeiden, aber ich habe kein Glück. Da es viele Ziele wie in der Abbildung gibt, basiert es auf Updates.
Hier ist der Code, den ich mit bisher endete.
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;
};
Das funktioniert in den meisten Fällen, aber der Bot manchmal völlig ignoriert das Hindernis (this.collisionFromList(cell, this.obstacles);
ist völlig in Ordnung) und endet buchstäblich durch sie gehen (explodieren in eine Menge von Zellen).
BotPlayer.prototype
hat viele nützliche Funktionen für diese Art von Berechnungen. Siehe this link.
Ich brauche keine Pfadfinderei, nur diese einfache Maßnahme zu vermeiden.
Wenn es drei in gleichem Abstand Hindernisse und bot zur Mitte Hindernis zusteuert, würde nicht den Winkel, dass Ihr den Bot in Richtung der Mitte Hindernis in Gang halten Berechnung ? –