我在想,必須有一個更簡單的方法來做到這一點。任何人都可以給我一些建議嗎?我正在驗證一個tic tac腳趾板,並且可能會推翻它。一個更簡單的方法來驗證一個井字棋牌
const checkSetForSingleValue = set => {
if (set.size === 1) {
let val = set.values().next().value;
if (val) return val;
}
return false;
};
const checkForWin = board => {
let set, col, val;
for (let i=0; i<board.length; i++) {
set = new Set(board[i]);
val = checkSetForSingleValue(set);
if (val) return val;
// we only need to loop through columns once
if (i !== 0) continue;
for (let j=0; j<board[i].length; j++) {
set = new Set([board[0][j], board[1][j], board[2][j]]);
val = checkSetForSingleValue(set);
if (val) return val;
}
}
// check for diagonal win
if (board[1][1]) { // make sure center isn't null
set = new Set([board[0][0], board[1][1], board[2][2]]);
val = checkSetForSingleValue(set);
if (val) return val;
set = new Set([board[0][2], board[1][1], board[2][0]]);
val = checkSetForSingleValue(set);
if (val) return val;
}
return false;
};
let board = [
['o', 'x', 'x'],
['o', null, null],
['o', 'o', 'x']
];
alert(checkForWin(board));
board = [
['o', 'x', 'x'],
['o', 'x', null],
['x', 'o', 'x']
];
alert(checkForWin(board));
看起來不錯。無論如何,使用matrtix 3x3進行計算不會有任何影響。可能你的任務可以用數學矩陣魔法來解決,但我並不擅長。而且,從我的觀點來看,您應該使用'true-false-null'而不是''x' - 'o'-null'。在我的情況下,你應該改變你的代碼,因爲你的檢查將失敗。 – degr