如何在棋盘上插入棋子?

时间:2017-05-19 08:51:39

标签: 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('| |')

3 个答案:

答案 0 :(得分:0)

这样的事情可以起作用:

library(webshot)
library(png)
webshot("http://www.doctormetrics.com/","doctor.png")
img <- readPNG("doctor.png")
dim(img)
x11()
g <- rasterGrob(img, interpolate=TRUE)
qplot(1:2, 1:2, geom="blank") +
  annotation_custom(g, xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf) +
  geom_point()

但我不确定这是不是你想要的。在那种情况下,板是2D矩阵,其形状类似于板。 如果是国际象棋,你需要一个&#39; P&#39;对于白人和一个&#39; p&#39;为了黑色。

答案 1 :(得分:0)

典当的初始位置是第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))

答案 2 :(得分:0)

使其更通用,您可以使用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|