【问题标题】:Random moving from coordinates in Javascript从Javascript中的坐标随机移动
【发布时间】:2015-06-30 12:44:28
【问题描述】:

我正在使用 Javascript 来构建我不起眼的机器人军队。

// Objet Robot
function Robot(nick, pv, maxSpeed, position) {
  this.nick = nick;
  this.pv = pv;
  this.maxSpeed = maxSpeed;
  this.position = position;
};

//Méthode présentation des robots
Robot.prototype.sePresenter = function() {
  console.log("Bonjour je m'appelle " + this.nick + ". J'ai " + this.pv + "         points de vie." + " Je me déplace à " + this.maxSpeed + " cases par seconde. Je suis à la case de coordonnées " + this.position);
};

//Variables array
var robots = [
  new Robot('Maurice',95,2,[5,8]),
  new Robot('Lilian',76,3,[12,25]),
  new Robot('Ernest',100,1,[11,14]),
  new Robot('Juliette',87,3,[2,17]),
];

//boucle
robots.forEach(function(robot) {
  robot.sePresenter();
});

我想添加机器人动作。每转一圈,机器人可以在 1 和它的 maxSpeed 之间移动一定数量的空间。每个动作都可以向上/向下/向左/向右。

我知道我必须使用Maths.random,但我无法解释机器人如何移动。

这里是函数的开始

Robot.prototype.seDeplacer = function() {
  var point1X = (this.position(Math.random() * this.maxSpeed+1);
  var point1Y = (this.position(Math.random() * this.maxSpeed)+1;
     console.log("je suis" + point1X + point1Y);
};

robots.forEach(function(robot) {
robot.seDeplacer();
});

我在机器人运动的正确轨道上吗?

【问题讨论】:

  • 那么问题到底是什么?你有什么问题?我猜position 应该是一个数组,所以更新你传递给seDeplacer 的机器人中的位置。
  • 请注意,point1Xpoint1Y 的声明编写方式不同。看看结尾,括号在“1”的哪一侧。

标签: javascript coordinates euclidean-distance


【解决方案1】:

我猜你的问题是弄清楚如何使这项工作:

Robot.prototype.seDeplacer = function() {
  var point1X = (this.position(Math.random() * this.maxSpeed+1);
  var point1Y = (this.position(Math.random() * this.maxSpeed)+1;
     console.log("je suis" + point1X + point1Y);
};

现在,假设 position 是 x 和 y 坐标的数组,那么如果您只是向上、向下、向左或向右移动,那么您首先需要决定是要在 x 轴上移动还是在 y 轴上移动轴:

if (Math.random() > 0.5) {
    // move on X axis
}
else {
    // move on Y axis
}

如果您希望能够沿对角线移动,那么您确实需要 if/else 构造。

现在要在 X 轴上移动(例如),您需要在 -maxSpeed+maxSpeed 之间生成一个随机数,因为您可以向任一方向移动:

var dx = (Math.random() * this.maxSpeed * 2) - this.maxSpeed;

然后你就可以更新你的位置了:

this.position[0] += dx;   

如果你只需要整数坐标,那么你可以简单地使用Math.floor

您需要处理的最后一件事是边界条件。您需要检查新位置是否超出了“板”的末端,或者将其停在边缘,或者将其包裹到另一侧,或者您正在尝试做的任何事情。

【讨论】:

  • 谢谢马特,非常有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2023-03-30
  • 2017-11-12
  • 1970-01-01
相关资源
最近更新 更多