Python编程中实现棋盘上的斜角象移动。

3

我有以下问题

在国际象棋中,主教可以斜着走任意多个方格。给定棋盘上的两个不同的方格,请确定主教是否可以在一步内从第一个方格到达第二个方格。

程序输入四个数字(1到8之间),指定起始方格和结束方格的列号和行号。如果主教可以在一步内从第一方格到第二方格,则程序应输出YES;否则,输出NO。

例如:

输入: 2 3 5 6

输出:

YES

假设单元格从左到右、从下到上编号,即左下角单元格具有列号1和行号1,而右下角单元格具有列号8和行号1。

我进展到哪了?

我已经检查出主教只能对角线移动,但它可以沿任何对角线移动,因此不正确。有人可以给我一些提示吗?

我的代码


initial_coord_x=int (input('enter the initial x'))
initial_coord_y=int (input('enter the initial y'))
final_coord_x=int (input('enter the final x'))
final_coord_y=int (input('enter the final y'))
if final_coord_x<=8 and final_coord_y<=8:
  if final_coord_x < initial_coord_x and final_coord_y > initial_coord_y:
    print ('you moved legally')
  elif final_coord_x < initial_coord_x and final_coord_y < initial_coord_y:
    print ('you moved legally')
  elif final_coord_x > initial_coord_x and final_coord_y > initial_coord_y:
    print ('you moved legally')
  elif final_coord_x > initial_coord_x and final_coord_y < initial_coord_y:
    print ('you moved legally')
  else:
    print ('no!')


else:
  print ('illegal move, you moved outside the chessboard')


“it can move any diagonal” 是什么意思? - Stef
1
请注意,仅存在两种可能的对角方向,它们具有数学方程 y = x + ky = -x + k。每个k值导致不同的平行对角线。位于同一对角线上的两个方格(x1,y1)和(x2,y2)将满足相同k值的方程。由于k的值可以通过将两个可能的方程重写为分别为 k = y-xk = y+x 来获得,因此最终结论是:当且仅当 x1+y1= x2+y2 或 x1-y1 = x2-y2 时,(x1, y1)和(x2, y2) 在同一对角线上。 - Stef
请参阅 https://chess.stackexchange.com 上的相关问题:如何确定两条对角线相交的位置? - Stef
1个回答

3
要检查象的移动是否可行(在现有单元格中),只需要检查水平位移的绝对值是否等于垂直位移的绝对值(因此两个位置位于同一对角线上)。
dx = abs(final_coord_x - initial_coord_x)
dy = abs(final_coord_y - initial_coord_y)
if (dx == dy) and (dx > 0):
     legal move 

1
绝对值方法是最好的! - Emilia Delizia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接