当前位置: 首页 > 知识库问答 >
问题:

象棋游戏中的皇后移动(Javascript)

百里渊
2023-03-14

我正在学习Javascript,并作为一个项目作业在其中制作象棋游戏。我已经为Rook,Pawn,Knight和Bishop的移动编码了逻辑。现在我被女王运动困住了。一个女王的走位基本上都涉及到毕晓普和鲁克的走位逻辑。

我想做的是,当皇后被移动时,检查源磁贴的文件是否与目标磁贴相同。如果相同,则调用Rook的代码移动逻辑,否则调用Bishop的代码移动逻辑。例如,如果皇后被放置在d4(源平铺),并且被移动到d8或g4(目标平铺)。那么在这种情况下,应该调用Rook's move函数。

所有的piece对象都有一个move()。因此在本例中,我想从皇后的move()中调用Rook的move()。我被困在这里了。好心建议。相关代码贴在下面。我也做过类似的车和其他物体。现在我要从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()中调用这个函数。我该怎么做?

https://github.com/varunpaprunia/chessinjavascript/blob/master/chessboard_tags_1.html

共有1个答案

董元徽
2023-03-14

执行以下测试以决定使用哪种方法

// 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,这不算移动该片段。这些不会检查路径是否被阻塞,您需要更多的逻辑。

 类似资料:
  • 我试图创建象棋游戏,所以我为象棋工具创建抽象类(皇后,国王,车...)我还创建了king工具来检查我的代码: 并创建game_board类: 问题是,当我尝试向矩阵添加对象时,它的show me错误:1 IntelliSense:不允许抽象类类型“King”的对象:纯虚函数“chess_tool::legal_movement”没有覆盖器 ....

  • 本文向大家介绍Javafx实现国际象棋游戏,包括了Javafx实现国际象棋游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Javafx实现国际象棋游戏的具体代码,供大家参考,具体内容如下 基本规则 棋子马设计“日”的移动方式 兵设计只能向前直走,每次只能走一格。但走第一步时,可以走一格或两格的移动方式 请为后设计横、直、斜都可以走,步数不受限制,但不能越子的移动方式。 车只能横向

  • 五子棋(Gomoku)是一款经典的线上五子棋游戏,5 子连成一线者胜。  

  • 上面的代码显示了一个可以上下移动的部分的示例。这不是一个有效的棋步。所以,如果我要移动一个皇后,我该怎么做呢?我们只是假设我们已经有了一个矩阵(x,y)8×8的板。

  • 本文向大家介绍JS小游戏之象棋暗棋源码详解,包括了JS小游戏之象棋暗棋源码详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS小游戏的象棋暗棋源码,分享给大家供大家参考。具体如下: 游戏运行后如下图所示: Javascript 部分: 完整实例代码点击此处本站下载。 相信本文所述对大家javascript游戏设计的学习有一定的借鉴价值。

  • 我对java完全陌生,我想在Java中创建一个单人棋盘游戏。 我已经有很多定义游戏的类,但是对于我的问题,我将把问题限制在为我的棋盘游戏创建GUI板 我非常具体的问题是,基于以下代码: 如何在棋盘游戏中移动玩家?(类播放器存在) 提前感谢您的得体回答。因为我对java非常陌生,请清楚地解释您的答案。 这是以下代码的输出: