2016-07-20 15 views
-1

私はいくつかのコードを作って、1つの要素であるマトリックスがそれに隣接する要素を参照できるようにしようとしています。ゲームピースを隣接するスペースに移動する方法のような並べ替え。私はこれを「ある隣接」部分を達成する方法を知りたいマトリックス内の隣接要素をどのように参照しますか?

if x matrix element is adjacent to y element: 
    y_element_adjacent = True 

:たとえば、私が何かのように言うことができるようにしたいです。

EDIT:リストを作成し、各要素に番号を割り当てようとしました。したがって、100要素リスト(または10x10ゲームボード)では、スペース1x1は0番目の要素になり、スペース1x3は2番目の要素になります...

1,2,3,4,5,6 、7、8、9、10

11、12、13、14、15、16、17、18、19、20

しかし、これに伴う問題は、X元素は10であった場合、すなわち私のコードは、隣接するスペースを見つけるために+ 1をとり、11は隣接していません。私はリストがこれを行うための正しい方法ではなく、行列が行く方法であることに気付きました。私はリストとは違った使い方を少し混乱させています。

ご協力いただきましてありがとうございます。ありがとう。

+1

これを行うには多くの、多くの方法がどのようにあなたのコードに応じて、あります組織されています。あなたはあなたが何を持っているか、さらに重要なことは、あなたがこの質問をする前にあなた自身で試したことをより具体的にすることができますか? – TigerhawkT3

+0

ちょうど4つの近傍を取る(xは+1と-1のインデックス、y - > 2 * 2の櫛は同じ、または対角線が*隣接*の場合は8)。しかし、インデックスを作成する前に、範囲内にあるかどうかを確認してください(x + 1 = 0; y + 1 = 0) – sascha

+0

コメントありがとうございます。私の元の思考プロセスで編集しました。 – Jerfy

答えて

0

ここでは、すべての隣接要素のインデックスを取得する簡単な方法があります。 x,y = (1,1)の入力について

from itertools import product, starmap 

x, y = (x_coordinate, y_coordinate) # matrix values here 
cells = starmap(lambda a,b: (x+a, y+b), product((0,-1,+1), (0,-1,+1))) 

、これは[(1, 0), (1, 2), (0, 1), (0, 0), (0, 2), (2, 1), (2, 0), (2, 2)]を含む(list(cells)[1:])を返します。

このような実装は、特定のシナリオ(特定のゲームピースがどの場所に移動する可能性があるかを判断する)で重要です。あなたが境界チェックを含めたい場合は、ここで見つけることができる(これらの用およびソース)

X = max_board_X 
Y = max_board_Y  
neighbors = lambda x, y : [(x2, y2) for x2 in range(x-1, x+2) 
            for y2 in range(y-1, y+2) 
            if (-1 < x <= X and 
             -1 < y <= Y and 
             (x != x2 or y != y2) and 
             (0 <= x2 <= X) and 
             (0 <= y2 <= Y))] 

その他の解決方法を試してみてください:Determining neighbours of cell two dimensional list

+0

ありがとうございました!これはかなり助けます! – Jerfy

関連する問題