如何将坐标与工件连接起来?

2024-06-16 18:07:36 发布

您现在位置: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)]

那么,我应该怎样把坐标和工件联系起来,然后操作它们呢?你能给我一些建议吗?你知道吗


Tags: 代码inforindex棋盘ifrange国际象棋
1条回答
网友
1楼 · 发布于 2024-06-16 18:07:36

我不完全确定你到底想要什么,但你似乎把棋盘的结构(所有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正方形。你知道吗

然后,您可以继续用棋子填充它,例如棋子:

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

在开始位置用工件填充电路板后,您可以编写函数来根据工件各自的规则移动工件。你知道吗

相关问题 更多 >