0

我正在學習Javascript並將其作爲製作國際象棋遊戲的項目任務。我編寫了Rook,Pawn,Knight和Bishop的運動邏輯。現在我被困在女王運動中。皇后的舉動基本上涉及主教和白嘴鴉的運動邏輯。國際象棋遊戲中的女王運動(Javascript)

我想要做什麼的時候移動女王檢查源瓷磚的file是否與目標瓷磚相同。如果相同,則調用Rook的代碼移動邏輯調用Bishop的代碼移動邏輯。例如,如果皇后被放置在d4(源圖塊)並且被移動到d8或g4(目標圖塊)。那麼在這種情況下,應該調用Rook的移動功能。

所有的塊對象都有一個move()。所以在這種情況下,我想從Queen's move()中調用Rook的move()。我被困在這裏。請建議。相關代碼粘貼在下面。我也有類似的做Rook和其他物體。現在從Queen()的這個舉動()我想調用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; 
       } 
      }; 

主教我的移動功能被放置在這樣

chess.BishopFactory = 
{ 
    instance: function(color, type) 
    { 
     var Bishop = 
     { 
      move: function(source, destn) 
      { //Code here 
      } 
     } 
    } 
} 

我想援引女王此舉此功能()。我怎麼做?

請在下面的html鏈接中查找完整的代碼。

https://github.com/varunpaprunia/ChessInJavascript/blob/master/ChessBoard_Tags_1.html

+0

在您的問題中放置相關的代碼。 – alex

+0

現在可讀嗎? –

+0

'x ='abcdefgh'.indexOf(destination_tile [0]),y = parseInt(destination_tile [1]) - 1;'let'a,b'分別與'source_tile'相同。皇后可以這樣移動:「a + b === x + y」(左下角,右上角),「a-x === b-y」(左上角,右下角),「a === x '(從上到下)或'b === y'(從左到右)。 –

回答

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); 
} 
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,這不算作移動件。這些不會檢查路徑是否被阻塞,您需要更多的邏輯。