gpt4 book ai didi

java - 国际象棋,找到最后一个位置对角线移动的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:29 27 4
gpt4 key购买 nike

如果没有图片,这可能有点难以解释,但是,我正在检查国王是否在检查中。为此,我从国王的位置开始向上、向左、向下、向右,然后是所有对角线图案。

为了简化我的代码,我有一个路径检查器方法,它接受起始位置和结束位置,如果在该路径中对国王有任何威胁,则返回 true。所以,我这样调用这个方法:

board.incheckPath(kingLocation, new Location(8, kingY))

这将从国王检查到顶行,同一列。我对左、下和右有类似的陈述。

问题是我试图对对角线图案使用相同的方式,但我想不出一个简单的算法来找出最后一个位置。如果你比右边高,那么如果你向上和对角线向右,你会在击中最右边的列之前击中顶行。我发现该位置的算法是:

如果 x > y {
行 = 8;列 = 8-(x-y)
} 别的 {
行 = 8-(x-y);列 = 8;
}

因为您着陆的位置将是远离顶行或右列的 x 和 y 之间的差异。但是我无法弄清楚向上和向左、向下和向左或向下和向右的结果是什么。

最佳答案

假设,你的坐标是

/|\ y
| col8
+---+ ... +---+---+
| | | | | <- row 8
+---+ ... +---+---+
| | | | |
+---+ ... +---+---+
...............
+---+ ... +---+---+
| | | | | <- row 1
+---+ ... +---+---+--->
x

扩展你的解决方案看起来像

// Up right
if (y > x) { row = 8; column = 8-(y-x) } else { row = 8-(x-y); column = 8; }

// Down left
if (x > y) { row = 1; column = 1+(x-y) } else { row = 1+(y-x); column = 1; }

// Up left
if (9-x < y) { row = 8; column = x+y-8 } else { row = x+y-1; column = 1; }

// Down right
if (9-x > y) { row = 1; column = x+y-1 } else { row = x+y-8; column = 8; }

关于java - 国际象棋,找到最后一个位置对角线移动的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642228/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com