如何将坐标与碎片联系起来?

时间:2017-05-25 13:12:53

标签: python

我想下国际象棋,但我对一个问题感到困惑。如何链接我的棋盘和棋子?由于棋盘上可以列出棋子,

 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)]

那么,我应该怎么做才能将坐标与棋子联系起来而不是操作呢?你能给我平安的建议吗?

1 个答案:

答案 0 :(得分:0)

我并不完全确定你到底是什么,但你似乎把棋盘的结构(所有x,y位置)与棋盘的内容(棋子)混淆。

您可以创建一个嵌套(2D)列表列表来编码您的电路板结构,而不是在列表中存储8 * 8 = 64个带有x,y位置的元组:

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索引来引用每个位置,例如角落里的chessboard[0][0]。我在这里使用0代表董事会中的一个empy square。

然后,您可以继续填充片段,例如兵:

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]]

在起始位置填充棋盘后,您可以根据各自的规则编写移动棋子的功能。