如何在棋盘上模拟主教运动

问题描述 投票:-1回答:1

我有一个董事会,我想模仿一位主教可能采取的行动。我试过这段代码:

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)

但它找不到所有的动作是行不通的。但是,我不明白为什么。不检查所有四个方向吗?

python chess
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.