如果移动是伪合法的,我正在制作一个返回 True 的函数。问题是,为了找出棋子是否在它的起始位置,我必须循环这一行中的所有方格,看看棋子所在的方格是否在那个范围内。有一个更好的方法吗 ?我可以以某种方式计算典当所在的行号或其他东西吗?
# Pawn.
if piece == PAWN:
if not from_piece & 8: # White pawn.
if start_point < end_point: # Can't move backwards.
return False
elif diff == 32 and start_point in range(96, 104) and not board[start_point - 16] and not board[end_point]:
pass # Valid case, skip next elif statement. Can move 2 spaces at the starting position.
elif diff != 16:
return False
else: # Black pawn.
if start_point > end_point: # Can't move backwards.
return False
elif diff == 32 and start_point in range(16, 24) and not board[end_point + 16] and not board[end_point]:
pass # Valid case, skip next elif statement. Can move 2 spaces at the starting position.
elif diff != 16:
return False
if diff == 16 and board[end_point]: # Can't move ahead one square if there's already a piece.
return False
elif (diff == 15 or diff == 17) and board[end_point]: # Can't move one step diagonal when there's no enemy piece.
return False
return True
我编写了程序,让白棋的值为 1,黑棋的值为 9。空方格用 0 表示。
非常感谢你。