2

わかりました、私はあなたが動き回ることができるようにするスクリプトを書きました。これがどのように見えるかを知っているので、それを作成するJSは次のとおりです。

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();
        }
    }
}

編集:これが現在のプログラムです。赤いものの緑の動きは無視してください。

編集 2: OK、私は西と緑のないものの問題を更新しました。新しいコードは次のとおりです。

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');
        }
    }
}
4

1 に答える 1

1

明らかな問題の 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」の場合とは一致しません)。今はもっと素敵に見えます!

于 2012-06-14T03:45:51.817 に答える