1. 程式人生 > >JavaScript-井字棋 根據棋盤和玩家,得出下一步獲勝的走法

JavaScript-井字棋 根據棋盤和玩家,得出下一步獲勝的走法

假設我們現在有一個 3 x 3 的井字棋遊戲,我們用一個二維陣列代表棋盤,’x’ 代表玩家 X 下的棋子,’o’ 代表玩家 O 下的棋子,’e’ 代表該格沒有棋子。例如:

一個空白的棋盤以下面的二維陣列表示

[ [‘e’, ‘e’, ‘e’],

  [‘e’, ‘e’, ‘e’],

  [‘e’, ‘e’, ‘e’] ]

如果玩家 X 在第一行第一列下了一步棋,玩家 O 在第二行第二列下了一步棋,則表示如下:

[ [‘x’, ‘e’, ‘e’],

  [‘e’, ‘o’, ‘e’],

  [‘e’, ‘e’, ‘e’] ]

現在需要一個 function,接受一個已有任意棋子的棋盤(和上面二維陣列一樣的格式),和玩家的標誌(

’x’  ‘o'),返回該玩家下一步有幾種可能的獲勝方式(獲勝方式以陣列表示,[0, 0] 代表在第一行第一列下一步棋即可獲勝,[2, 2] 代表在第三行第三列下一步棋即可獲勝)。例如:

someFunction(

‘x’,

[ [‘o’, ‘e’, ‘e’],

  [‘o’, ‘x’, ‘o’],

  [‘x’, ‘x’, ‘e’] ]

)

// return [ [2, 2], [0, 1], [0, 2] 

someFunction(

‘x’,

[ [‘x’, ‘x’, ‘o’],

  [‘e’, ‘e’, ‘e’],

  [‘e’, ‘e’, ‘e’] ]

)

// return [ ]

someFunction(

‘o’,

[ [‘o’, ‘o’, ‘o’],

  [‘e’, ‘e’, ‘e’],

  [‘e’, ‘e’, ‘e’] ]

)

// return [ ]

直接上程式碼:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="author" content="lisa 2018/8/26 16:20"/>
    <title>井字棋</title>
</head>
<body>

</body>
</html>
<script>

    var matrix = [
        ['e','e','e'],
        ['o','o','e'],
        ['x','x','o']
    ];
    var player = 'o';
    beginPlay(matrix,player)

// 將玩家替換為數字1
    function beginPlay(matrix,playType){
        for (var i=0; i <matrix.length;i++){
            for (var j=0; j<matrix[i].length; j++){
                if( matrix[i][j] == playType){
                    matrix[i][j] = 1
                }
            }
        }
        dataProcessing(matrix);
    }

// 開始每一步嘗試放棋子,只有當結果相加為3時才能勝利
    function dataProcessing(matrix){
        var result=[];
        for (var i=0; i<matrix.length;i++){
            for (var j=0; j<matrix[i].length; j++) {
                if (matrix[i][j] == 'e'){
                    matrix[i][j] = 1
                    if(Math.abs(matrix[i][0]+matrix[i][1]+matrix[i][2])==3){
                        result.push([i,j])
                    }
                    if(Math.abs(matrix[0][j]+matrix[1][j]+matrix[2][j])==3){
                        result.push([i,j])
                    }
                    if(Math.abs(matrix[0][0]+matrix[1][1]+matrix[2][2])==3){
                        result.push([i,j])
                    }
                    if(Math.abs(matrix[2][0]+matrix[1][1]+matrix[0][2])==3){
                        result.push([i,j])
                    }
                    matrix[i][j] = 'e'
                }
            }
        }
        console.log(result)
    }

</script>