如果没有图片,这可能有点难以解释,但是,我正在检查国王是否在检查中。为此,我从国王的位置开始,向上、向左、向下、向右,然后是所有对角线图案。
为了简化我的代码,我有一个路径检查器方法,它接受起始位置和结束位置,如果该路径中的国王有任何威胁,则返回 true。因此,我将这种方法称为:
board.incheckPath(kingLocation, new Location(8, kingY))
这将检查从国王到顶行,同一列。对于左、下和右,我也有类似的说法。
问题是我试图对对角线模式使用相同的方式,但我无法找出一个简单的算法来确定最后一个位置在哪里。如果你比右边高,那么如果你对角线向上和向右走,你会在击中最右边的列之前击中第一行。我发现该位置的算法是:
if x > y {
row = 8; column = 8-(x-y)
} else {
row = 8-(x-y); column = 8;
}
因为您降落的位置将是 x 和 y 与顶行或右列之间的差异。但我不知道向上和向左、向下和向左或向下和向右的结果是什么。