2017-05-25 1 views
0

私はチェスを作りたいですが、私は1つの質問と混同しました。チェス盤と駒をリンクさせるには?チェス盤は、その上に駒、座標をピースにリンクする方法は?

chessboard = [(x, y) for x in range(8) for y in range(8)] 

ポーンとリストされるように:

pawns = [] 
for pawnY in range(8): 
    pawn = (pawnY, 1) 
    pawns.append(pawn) 

次の私は、座標を交換しようとしました。私はちょうど私SyntaxError: invalid syntax

[chessboard[chessboard.index(e)] = '♟' for i, e in enumerate(pawns) if e in chessboard] 

、これを与える次のコードの違いは、何か分からないが、これは動作します:

for i, e in enumerate(pawns): 
    if e in chessboard: 
     chessboard[chessboard.index(e)] = '♟' 

出力:

print(chessboard) 
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0), (7, 0), '♟', '♟', '♟', '♟', '♟', '♟', '♟', '♟', (0, 2), (1, 2), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), (7, 2), (0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), (7, 3), (0, 4), (1, 4), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4), (7, 4), (0, 5), (1, 5), (2, 5), (3, 5), (4, 5), (5, 5), (6, 5), (7, 5), (0, 6), (1, 6), (2, 6), (3, 6), (4, 6), (5, 6), (6, 6), (7, 6), (0, 7), (1, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (7, 7)] 

だから、何を座標をピースとリンクさせ、それらを操作する必要がありますか?あなたは私に助言の平和を与えることができますか?

+0

リストの理解の中で代入文を使用できないため、SyntaxErrorが発生しています。 2つのデータを一緒に「リンク」したいときは、辞書を使ってみてください。 (これはコメントであり、答えではないので、少し曖昧です。) – Kevin

+1

リスト内包表記を使用して新しいリストを作成します。実行しようとしているときに既存のリストに値を割り当てるのに使用することはできません。あなたの2番目の実例は最初のものに似ているかもしれませんが、実際にはかなり異なっています。 – sizzzzlerz

答えて

0

あなたは正確に何をしているのかは完全にはわかりませんが、チェス盤の構造(すべてのx、yポジション)とチェスボードの内容(ピース)を混同しているようです。

代わりに、リスト内のx、y座標を持つ8×8 = 64タプルを格納する、あなたはボードの構造をエンコードするためにリストのネストされた(2D)のリストを作成することができます。

その結果
chessboard = [[0 for x in range(8)] for y in range(8)] 

chessboard

[[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0]] 

今、あなたは、単にその2Dインデックスにより、例えばすべてのpostionを参照することができますコーナーにchessboard[0][0]私はここで0を使ってボード上のempyの広場を表しています。

これで、引き続きピースなどで埋め込むことができます。ポーン:

for pawnY in range(8): 
    chessboard[1][pawnY] = '♟' 

更新chessboardその結果:

[[0, 0, 0, 0, 0, 0, 0, 0], 
['♟', '♟', '♟', '♟', '♟', '♟', '♟', '♟'], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0]] 

開始位置に駒を使ってボードを充填した後、あなたは、それぞれのルールに従って駒を移動するための関数を書くことができます。

+0

ありがとう、しかし、どのように各ピースとボードのセルの座標(x、y)を取得するには、それらを操作するよりも? – This4fun

+0

この表現は、どのターンでもボードの状態全体をエンコードします。別の方法ではなく、その(x、y)座標で作品にアクセスします。例えば上記の更新されたボード状態で 'chessboard [1] [1]'は ''♟''を返します。作品の価値にアクセスすると、タイプ、法的な動きを確認し、それに応じて動くことができます。移動を行うには、新しい位置を更新し、古い位置を空の正方形に更新する必要があります。例: (1,1)から(2,1): >>>チェス盤[2] [1] = '♟'' '>>>チェス盤[1] [1] = 0' 希望する助けて! – phillchill

関連する問題