如何在棋盘上插入棋子?

2024-06-28 19:43:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我创造了棋盘,但我把棋子和棋子搞混了。你知道吗

board = [[(x,y) for x in range(1,9)] for y in range(1,9)]
for k in range(len(board)):
    print('| |' * len(board))

我想看看这样的东西:

| || || || || || || || |
|P||P||P||P||P||P||P||P|
| || || || || || || || |
| || || || || || || || |
| || || || || || || || |
| || || || || || || || |
|P||P||P||P||P||P||P||P|
| || || || || || || || |

但我可以选择哪种方式把棋子放在棋盘上呢? 我是否应该使用double for循环来检查坐标是否等于或存在?你知道吗

def pawn():
    coordinates = board[1][1]
    return coordinates

for i in range(len(board)):
    for j in range(8):
        if board[i][j] == pawn():
           print('|P|' * len(board))
        else:
           print('| |')

Tags: inboardfor棋盘lenreturnifdef
3条回答

更一般地说,您可以使用arraypandas.DataFrame来记住电路板的状态

数据定义

摆好棋子

piece = collections.namedtuple('piece', ('value', 'mark'))
EMPTY = piece(0, '|X|')
PAWN = piece(1, '|P|')
pieces = {p.value: p for p in (EMPTY, PAWN)}

你可以定义你想要的任何一件,甚至给不同的颜色

定义董事会

boardsize = (8,8)
board = pd.DataFrame(data=[[1] * boardsize[0]] * boardsize[1]) * EMPTY.value

摆好棋子

pawn_positions = [(1, 1), (3, 4), (7, 6)]

for pawn in pawn_positions:
    board.loc[pawn] = PAWN.value

结果是这样的

    0   1   2   3   4   5   6   7
0   0   0   0   0   0   0   0   0
1   0   1   0   0   0   0   0   0
2   0   0   0   0   0   0   0   0
3   0   0   0   0   1   0   0   0
4   0   0   0   0   0   0   0   0
5   0   0   0   0   0   0   0   0
6   0   0   0   0   0   0   0   0
7   0   0   0   0   0   0   1   0

打印带有标记的电路板

for row_nr, row in board.applymap(lambda x: pieces[x].mark).iterrows():
    print(''.join(row) + '\n')

给予

|X||X||X||X||X||X||X||X|
|X||P||X||X||X||X||X||X|
|X||X||X||X||X||X||X||X|
|X||X||X||X||P||X||X||X|
|X||X||X||X||X||X||X||X|
|X||X||X||X||X||X||X||X|
|X||X||X||X||X||X||X||X|
|X||X||X||X||X||X||P||X|

典当的初始位置是第2行和第7行。您可以检查for循环索引并设置它们的位置。比如:

board = [[(x,y) for x in range(1,9)] for y in range(1,9)]
pawnRows = [1, 6]  # 0 based index

for k in range(len(board)):
    if k in pawnRows:
        print('|P|' * len(board))
    else:
        print('|X|' * len(board))

类似的方法可能奏效:

import numpy as np
board = np.empty((8,8)).tolist()
for k in range(len(board)):
    if k == 1 or k ==6:
        board[k]= ['|p|','|p|','|p|','|p|','|p|','|p|','|p|','|p|']
    else:
        board[k]= ['|x|','|x|','|x|','|x|','|x|','|x|','|x|','|x|']
[print(''.join(b)) for b in board ]

但我不确定这是否是你想要的。在这种情况下,电路板是一个二维矩阵,其形状与电路板相似。 如果是国际象棋,你需要一个“P”代表白色,一个“P”代表黑色。你知道吗

相关问题 更多 >