JavaScript-井字棋 根據棋盤和玩家,得出下一步獲勝的走法
阿新 • • 發佈:2019-01-05
假設我們現在有一個 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>