我想下国际象棋,但我对一个问题感到困惑。如何链接我的棋盘和棋子?由于棋盘上可以列出棋子,
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 :(得分: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]]
在起始位置填充棋盘后,您可以根据各自的规则编写移动棋子的功能。