Javascript 如何限制典当♟️;棋盘上的运动?
请不要对打字稿感到吃惊。它只是带有类型的js 我正在下国际象棋,我已经到了验证动作的阶段。我的瓷砖等级如下:Javascript 如何限制典当♟️;棋盘上的运动?,javascript,arrays,typescript,multidimensional-array,chess,Javascript,Arrays,Typescript,Multidimensional Array,Chess,请不要对打字稿感到吃惊。它只是带有类型的js 我正在下国际象棋,我已经到了验证动作的阶段。我的瓷砖等级如下: class Tile { x: number; y: number; tile: Element; team: string; piece: string; constructor(i: number, j: number, tile: Element, team: string) { this.x = i; this.y = j; thi
class Tile {
x: number;
y: number;
tile: Element;
team: string;
piece: string;
constructor(i: number, j: number, tile: Element, team: string) {
this.x = i;
this.y = j;
this.tile = tile;
this.piece = "none";
this.team = team;
}
}
如您所见,我可以控制2D阵列中任何给定磁贴的x和y位置
我有下面的函数,它返回一个数组,其中包含每个工件在其y和x坐标中的总移动。它接收2个平铺对象作为参数。第一个是初始点击,最后一个是结束点击(用户想要移动工件的地方)
我已经设法确认了车的运动♜ 以下是:
if (
(getVectorComponents(start, end)[0] <= 7 &&
getVectorComponents(start, end)[1] == 0) ||
(getVectorComponents(start, end)[0] == 0 &&
getVectorComponents(start, end)[1] <= 7)
) {
//This is an available move for the rook
}
此算法导致以下问题:
在国际象棋游戏中,棋子不能向后移动。但是,我的算法将此移动返回为有效
有没有一种很好的方法来限制棋子的移动,使它们只能向前移动?这需要考虑到白人和黑人团队
更多信息:a8=[0][0]
h1=[7][7]
我建议您在检查有效移动时,检查一下,如果棋子是一种颜色,那么start.x必须大于end.x,反之亦然。即
白色只能在end.x较大时移动,黑色只能在start.x较大时移动。看起来你的注意力集中在向量分量上。您也可以使用原始值的简单比较 我建议您在检查有效移动时,检查如果棋子是一种颜色,则start.x必须大于end.x,反之亦然。即
白色只能在end.x较大时移动,黑色只能在start.x较大时移动。看起来你的注意力集中在向量分量上。您也可以使用原始值的简单比较 这个怎么样:
function getVectorComponents(start: Tile, end: Tile) {
return [end.x - start.x, end.y - start.y];
}
这样可以保留方向,并且可以在以后移动棋子时检查方向是否为负。如果是负数,您就知道移动无效。这个怎么样:
function getVectorComponents(start: Tile, end: Tile) {
return [end.x - start.x, end.y - start.y];
}
这样可以保留方向,并且可以在以后移动棋子时检查方向是否为负。如果是负数,你就知道移动无效。出于好奇:你如何确定是否可以投掷,你的算法没有足够的信息。你说的“典当只有一步可用”是错误的,因为“顺路”可能是一种选择,以确定算法再次需要更多的信息。正如你自己注意到的,我相信你需要一个“方向”概念。也许可以将其添加到“team”属性中,例如,代替team:string
,您将得到一个team:team
,它将以某种方式保持方向
属性(例如向上
或向下
,甚至可以简化沿途的计算)。关键是来自瓦片的授权动作取决于该瓦片的所有者,这使我认为字符串 不够表达。与该问题无关,但您可能需要考虑运行<代码> GETVECCOREST组件< /C> >,并将结果存储在变量中。现在用简单的计算可能没有多大区别,但一般来说,如果你不需要的话,你不想多次运行给你相同答案的东西(干)。出于好奇:你如何确定是否可以使用Casting,你的算法没有足够的信息。你说的“典当只有一步可用”是错误的,因为“顺路”可能是一种选择,以确定算法再次需要更多的信息。正如你自己注意到的,我相信你需要一个“方向”概念。也许可以将其添加到“team”属性中,例如,代替team:string
,您将得到一个team:team
,它将以某种方式保持方向
属性(例如向上
或向下
,甚至可以简化沿途的计算)。关键是来自瓦片的授权动作取决于该瓦片的所有者,这使我认为字符串 不够表达。与该问题无关,但您可能需要考虑运行<代码> GETVECCOREST组件< /C> >,并将结果存储在变量中。现在用简单的计算可能没有多大区别,但是一般来说,如果你不需要的话,你不想运行多次给出相同答案的东西(干的)。谢谢你的建议。它起作用了,但是这个结果有很多嵌套的if。也许是我把任务复杂化了。但是我期待一个更干净的解决方案。谢谢你的建议。它起作用了,但是这个结果有很多嵌套的if。也许是我把任务复杂化了。但我期待一个更干净的解决方案。
function getVectorComponents(start: Tile, end: Tile) {
return [end.x - start.x, end.y - start.y];
}