From ef07b405e2c72e05cce986e7f0bc366eb9a0d536 Mon Sep 17 00:00:00 2001 From: 63db3122f0950a2aef64df95 <63db3122f0950a2aef64df95@devide> Date: Tue, 20 Jun 2023 10:31:41 +0000 Subject: [PATCH] Auto Commit --- src/App.vue | 93 +++++++++++++---------------------------------------- 1 file changed, 22 insertions(+), 71 deletions(-) diff --git a/src/App.vue b/src/App.vue index 3053bd0..e37c8d7 100644 --- a/src/App.vue +++ b/src/App.vue @@ -32,87 +32,38 @@ function playChess(item, r_i, c_i) { } // AI 生成代码 -function checkWin(board) { +function checkFiveInARow(board, startX, startY, deltaX, deltaY) { const rows = board.length; const cols = board[0].length; - - // 检查行 - for (let row = 0; row < rows; row++) { - for (let col = 0; col < cols - 4; col++) { - if ( - board[row][col] && - board[row][col] === board[row][col + 1] && - board[row][col] === board[row][col + 2] && - board[row][col] === board[row][col + 3] && - board[row][col] === board[row][col + 4] - ) { - const positions = []; - for (let i = 0; i < 5; i++) { - positions.push([row, col + i]); - } - return positions; - } - } - } - - // 检查列 - for (let col = 0; col < cols; col++) { - for (let row = 0; row < rows - 4; row++) { - if ( - board[row][col] && - board[row][col] === board[row + 1][col] && - board[row][col] === board[row + 2][col] && - board[row][col] === board[row + 3][col] && - board[row][col] === board[row + 4][col] - ) { - const positions = []; - for (let i = 0; i < 5; i++) { - positions.push([row + i, col]); - } - return positions; - } - } + const player = board[startX][startY]; + if (!player) { + return null; } - - // 检查对角线(左上到右下) - for (let row = 0; row < rows - 4; row++) { - for (let col = 0; col < cols - 4; col++) { - if ( - board[row][col] && - board[row][col] === board[row + 1][col + 1] && - board[row][col] === board[row + 2][col + 2] && - board[row][col] === board[row + 3][col + 3] && - board[row][col] === board[row + 4][col + 4] - ) { - const positions = []; - for (let i = 0; i < 5; i++) { - positions.push([row + i, col + i]); - } - return positions; - } + for (let i = 1; i <= 4; i++) { + const row = startX + i * deltaX; + const col = startY + i * deltaY; + if (row < 0 || row >= rows || col < 0 || col >= cols || board[row][col] !== player) { + return null; } } + return [[startX, startY], [startX + deltaX, startY + deltaY], [startX + 2 * deltaX, startY + 2 * deltaY], [startX + 3 * deltaX, startY + 3 * deltaY], [startX + 4 * deltaX, startY + 4 * deltaY]]; +} - // 检查对角线(右上到左下) - for (let row = 0; row < rows - 4; row++) { - for (let col = cols - 1; col >= 4; col--) { - if ( - board[row][col] && - board[row][col] === board[row + 1][col - 1] && - board[row][col] === board[row + 2][col - 2] && - board[row][col] === board[row + 3][col - 3] && - board[row][col] === board[row + 4][col - 4] - ) { - const positions = []; - for (let i = 0; i < 5; i++) { - positions.push([row + i, col - i]); - } +function checkWin(board) { + const rows = board.length; + const cols = board[0].length; + for (let row = 0; row < rows; row++) { + for (let col = 0; col < cols; col++) { + const positions = + checkFiveInARow(board, row, col, 0, 1) || + checkFiveInARow(board, row, col, 1, 0) || + checkFiveInARow(board, row, col, 1, 1) || + checkFiveInARow(board, row, col, 1, -1); + if (positions) { return positions; } } } - - // 如果没有连续五个棋子,则返回 null return null; } -- GitLab