我正在学习Javascript和作为制作国际象棋游戏的项目任务。我已经为Rook,Pawn,Knight和Bishop的运动编码了逻辑。现在我被困在女王运动上。女王的举动基本上涉及Bishop和Rook的运动逻辑。
我想要做的是移动女王时检查源图块的file是否与目标图块相同。如果它是相同的,则调用Rook的代码移动逻辑,然后调用Bishop的代码移动逻辑。例如,如果女王被放置在d4(源瓦)并且被移动到d8或g4(目标瓦片)。然后在这种情况下应该调用Rook的移动函数。
所有棋子对象都有一个move()。所以在这种情况下,我想从Queen的move()中调用Rook的move()。我被困在这里请建议。相关代码粘贴在下面。我同样制作了Rook和其他物品。现在从Queen()的move()中我想调用Rook / Bishop的move()。
chess.QueenFactory =
{
instance: function(color, type)
{
var Queen =
{
move: function(color, type)
{
alert("In Queen");
}
};
createPiece.call(Queen, color, type);
return Queen;
}
};
Bishop的移动功能就像这样放置
chess.BishopFactory =
{
instance: function(color, type)
{
var Bishop =
{
move: function(source, destn)
{ //Code here
}
}
}
}
我想从Queen的move()中调用此函数。我该怎么做?
请在下面的html链接中找到完整的代码。
https://github.com/varunpaprunia/ChessInJavascript/blob/master/ChessBoard_Tags_1.html
答案 0 :(得分:1)
执行以下测试以确定使用哪种方法
// source tile
var a = 'abcdefgh'.indexOf(source_tile[0]), // 0 to 7
b = parseInt(source_tile[1]) - 1; // 0 to 7
// destination tile
var x = 'abcdefgh'.indexOf(dest_tile[0]), // 0 to 7
y = parseInt(dest_tile[1]) - 1; // 0 to 7
// test to see how it's moving
if (a + b === x + y || a - x === b - y) { // bLeft to tRight || tLeft to bRight
// queen is moving like a bishop
} else if ( a === x || b === y) { // top to bottom || left to right
// queen is moving like a rook
} else { // impossible move
// invalid move
}
您可以从评论中看到调用哪个后续内容。如果a === x && b === y
然后source_tile === dest_tile
,则不算移动该作品。这些不会检查路径是否被阻止,你需要更多的逻辑。
答案 1 :(得分:0)
我认为这样做:
function bishopFn(source, destn){ /* bishop move */}
function rookFn(source, destn){ /* rook move */ }
然后将它们分配给主教和车移动物体,而在女王的任何时候你只需要根据你的条件调用它们
move: function(source, destn){
/* condition construction can be done here */
if (/*condition*/) bishopFn(source, destn);
else rookFn(source, destn);
}