0

2D 配列があり、1 つのスロットが隣接しており、別のスロットと接触しているかどうかを確認したいとします。

座標が 4 バイト変数であるとします: OneXOneYTwoXTwoY

私がしばらくの間持っていた解決策は、違いがOneX - OneYありTwoX - TwoY、それらを追加した場合、結果が または のいずれ1-1である場合、はい、スロットは隣接しており、接触しているということでした。

mov EBX,[oneX]
sub EBX,[oneY]
mov ECX,[twoX]
sub ECX,[twoY]
add EBX,ECX
; Compare EBX with 1 or -1.......

これはほとんど機能します。しかし、いいえ - 形式 (x,y) が与えられた場合、(3,3) と (0,1) を取ります。それらは明らかに隣接しておらず、接触していませんが、関数はそれらが隣接していると言います。

2 次元配列で隣接する要素を取得するでの質問は? やや便利ですが、隣接するすべての一致を見つけることに焦点を当てていますが、代わりに2つの特定のスロットをチェックしたい.

私の配列の構造は次のようになります。

map: dd 'a','b','c','d'  ; Double words just to make my life easier

次のように解釈されます

a b
c d

正方形の地図です。

4

2 に答える 2

1

それらを追加する理由はありません!また、間違った変数を差し引いています:)。

2 つの条件が必要OneX - TwoXであり、OneY - TwoY両方とも 1、0、または -1 でなければなりません。

たとえば、One は [4,5]、Two は [5,5] >= OneX - TwoX = -1and OneY - TwoY = 0=> 隣接するタイルです。

編集:非対角の場合、2つのアプローチがあります:

a) 条件の一方は 0 でなければならず、もう一方は 1 または -1 でなければなりません

b) の絶対値の加算OneX - TwoXと の絶対値はOneY - TwoY1 でなければなりません

于 2013-10-24T01:02:28.147 に答える