需要找到在网格上移动的方程式

时间:2012-06-14 03:21:54

标签: javascript tracking

好的,我写了一个脚本让你移动,什么不在网格上由一堆拼凑而成的' x'字母。所以你知道它是什么样的,这就是JS:#/ p>

function generate_page() {
    var x = 0;
    var y = 0;
    var lines = 20;
    var output;
    while (x <= lines) {
        while( y <= lines*2){
            if (x == 0 && y == 1) {
                output = "<span id='x" + x + "_" + y + "' style='background-color: red'>o</span>";
            } else if (x == 3 && y == 5) {
                output = "<span id='x" + x + "_" + y + "' style='background-color: green'>z</span>";
            } else {
                output = ("<span id='x" + x + "_" + y + "'>x</span>");
            }
            $('#board').append(output);
            y++;
        }
        y = 0;
        x++;
        $('#board').append('<br />');
    }
}

现在,我在电路板上有一个绿色字符,我试图编程以转向您控制的红色字符。我有北,南,东和西功能。然而,对于我的生活,我可以找出一个小算法让一个走向另一个。我尝试了以下,但它没有工作什么 - 所以 - 永远。任何人都可以帮我找到一个方法让一个角色跟踪另一个角色吗?这是我失败的尝试:

function moveGreen() {
    var x_distance = currentX_green - currentX_red;
    var y_distance = currentY_green - currentY_red;
    var larger;
    if (x_distance > y_distance) {
        larger = 'x';
    } else if (y_distance > x_distance) {
        larger = 'y';
    } else {
        larger = 'o';
    }
    if (larger == 'x') {
        if (x_distance > 0){
            north('green');
        } else {
            south('green');
        }
    } else if (larger == 'y'){
        if (y_distance > 0) {
            west('green');
        } else {
            east('green');
        }
    } else if (larger == 'o'){
        if (y_distance > 0){
            east();
        } else if (y_distance == 0) {
            if (x_distance > 0) {
                north();
            } else {
                south();
            }
        } else {
            west();
        }
    }
}

编辑:Here是当前的程序。忽略红色东西上的绿色动作。

编辑2:好的,我更新了西部的问题和没有绿色的东西。这是新代码:

function moveGreen() {
    var x_distance = currentX_green - currentX_red;
    var y_distance = currentY_green - currentY_red;
    var larger;
    if (Math.abs(x_distance) > Math.abs(y_distance)) {
        larger = 'x';
    } else if (Math.abs(y_distance) > Math.abs(x_distance)) {
        larger = 'y';
    } else {
        larger = 'o';
    }
    if (larger == 'x') {
        if (x_distance > 0){
            north('green');
        } else {
            south('green');
        }
    } else if (larger == 'y'){
        if (y_distance > 0) {
            west('green');
        } else {
            east('green');
        }
    } else if (larger == 'o'){
        if (y_distance > 0){
            east('green');
        } else if (y_distance == 0) {
            if (x_distance > 0) {
                north('green');
            } else if (x_distance < 0){
                south('green');
            }
        } else {
            west('green');
        }
    }
}

1 个答案:

答案 0 :(得分:1)

一个明显的问题是你需要检查顶部附近的绝对值。

而不是

if (x_distance > y_distance) {
    larger = 'x';
} else if (y_distance > x_distance) {

你需要

if (Math.abs(x_distance) > Math.abs(y_distance)) {
    larger = 'x';
} else if (Math.abs(y_distance) > Math.abs(x_distance)) {

因为你仍然想要“最大”,即使它是负面的。

更新现在它停在x = y的位置。看一下代码,对于那种情况,东方等的论证中没有“绿色”。

更新好吧,现在当它出现在对角线上时会出错,所以我猜东方/西方是“o”情况的错误方式(事实上,它们与“y”案)。现在看起来好多了!