如何在棋盘上为Bishop运动建模

时间:2019-04-29 23:38:39

标签: python chess

我有一个董事会,我想为主教在其上可能采取的行动建模。我尝试了这段代码:

for c1, c2 in [(1, -1), (1, 1), (-1, -1), (-1, 1)]:
    for x, y in [range(x+c1, board_size), range(y+c2, board_size)]:
        moves.append(x, y)

但是无法找到所有移动。但是,我不明白为什么。它不检查所有四个方向吗?

1 个答案:

答案 0 :(得分:0)

您的逻辑是正确的,但是您的执行却不是。

  1. 您的一半计算必须从xy到0(另一半则从xyboard_size
  2. 默认情况下,范围不能从较大到较小,因此您需要引入-1步才能从xy到0计数
  3. 您应该使用zip()创建一个可迭代的元组集合。

这将起作用:

right_up = zip(range(x + 1, board_size), range(y - 1, -1, -1))
right_down = zip(range(x + 1, board_size), range(y + 1, board_size)) 

left_up = zip(range(x - 1, -1, -1), range(y - 1, -1, -1))
left_down = zip(range(x - 1, -1, -1), range(y + 1, board_size))

for r in (right_up, right_down, left_up, left_down):
    for new_x, new_y in r:  # add coordinates to move list