首页 > 解决方案 > 如何判断玩家是否距离敌人 2 个方格

问题描述

简单的游戏问题

第1部分

我正在编写一个简单的 JavaScript 游戏(简单易玩,不一定要为我编写代码)。

我需要弄清楚龙是否距离玩家 2 步(或更少)。龙可以对角移动。

所以在我的形象中,D1不是两步之遥,但是,D2是两步之遥。

我想我让这比实际上更难。

var player = {
    x: 4,
    y: 2
}

var dragon1 = {
    x: 1,
    y: 3
}

var dragon2 = {
    x: 6,
    y: 3
}

function isTwoMovesAway(player, dragon){

    // I JUST DON'T KNOW HOW TO MATHEMATICALLY
    // FIGURE THIS OUT because sometimes I end
    // end up with a negative number.
    
    xDiff = player.x - dragon.x;
    yDiff = player.y - dragon.y;

    numSquaresAway = [ insert your magic here ];

    return (numSquaresAway<=2) ? true: false; 

}

第2部分

这个问题的第二部分是,如果龙在追赶玩家,我如何确定他应该移动到哪个方格?我希望龙走最短的路线。

function moveDragon(){
    pX = player.x;
    pY = player.y;
    dX = dragon1.x;
    dY = dragon1.y;

    // In this case, I would expect the Dragon to move
    // to either 2,2 or 2,3
    // Is this just a matter of adding to X ??

    Dragon1.x = [ YOUR MATH HERE ];
    Dragon1.y = [ YOUR MATH HERE ];
}

感谢您的关注。任何意见,将不胜感激。

网格问题

标签: javascriptarraysmath

解决方案


我需要弄清楚龙是否距离玩家 2 步(或更少)

您可以这样看:如果距离超过 2 次,则 X 坐标相差 3+,或者 Y 坐标相差 3+,或者两者都有。或者,两个差值必须小于等于 2。所以函数可以是:

function isTwoMovesAway(player, dragon){
  return Math.abs(player.x - dragon.x) <= 2 && Math.abs(player.y - dragon.y) <= 2;
}

如果龙在追赶玩家,我如何确定龙应该移动到哪个方格?

确定从龙的坐标到玩家坐标的方向是:更大、更少或相同。如果更大,加1;如果小于,则减 1;如果相同,则添加 0。对 X 和 Y 坐标执行此操作。

function moveDragon(){
  const xDiff = player.x > dragon.x
    ? 1
    : player.x < dragon.x
      ? -1
      : 0;
  const yDiff = player.y > dragon.y
    ? 1
    : player.y < dragon.y
      ? -1
      : 0;
  dragon.x += xDiff;
  dragon.y += yDiff;
}

推荐阅读