我爲一個名爲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往中間的障礙物去角? –