3

私はtable8<tr>秒で、それぞれが8<td>秒で、それぞれが1から8の間のdata-x値とdata-y値を持っています。つまり、チェス盤の場合は8x8グリッドです。

ビショップは斜めにしか移動できず、開始と終了の正方形の座標を持っていることを考えると<td>、「パス」内のすべての要素を見つける最も効率的な方法は何ですか。

例:

// coordinates representing a bishop move from d6 (4, 6) to h2 (8, 2)
var from = {
    x: 4,
    y: 6
},
to = {
    x: 8,
    y: 2
}

// code to select squares e5 (5,5), f4 (6,4) and g3 (7,3)

これらの要素を選択するにはどうすればよいですか?

td[data-x="5"][data-y="5"],
td[data-x="6"][data-y="4"],
td[data-x="7"][data-y="3"]

from最も効率的な方法で、とtoを動的に設定することを念頭に置いて?

参考までに、ビショップが斜めに動いたかどうかを確認するために他の場所で使用される関数を作成しました。

function is_valid_bishop_move(from, to){
    var tan_theta = (to.y - from.y) / (to.x - from.x);
    if( tan_theta === 1 || tan_theta === -1 ){
        return true;
    }else{
        return false;
    }
}
4

1 に答える 1

1

私はこのようなことしか考えられません:

var from = {
    x: 4,
    y: 6
},
to = {
    x: 8,
    y: 2
}

var delta_x = (to.x - from.x > 0 ? 1 : -1),
    delta_y = (to.y - from.y > 0 ? 1 : -1),
    dest_x = from.x + delta_x,
    dest_y = from.y + delta_y,
    selector = '';

while (dest_x != to.x) {
    selector += 'td[data-x="' + dest_x + '"][data-y="' + dest_y + '"],';
    dest_x += delta_x;
    dest_y += delta_y;
}

selector = selector.replace(/,$/, '');

console.log(selector);
​

http://jsfiddle.net/zerkms/gtEwV/1/

于 2012-09-06T23:00:36.770 に答える