if (turn === 1) {
if(X1 === true && X2 === true && X3 === false && O3 === false && turn === 1) {
document.getElementById("3").innerHTML = 'O';
O3 = true
turn--
}
if(X1 === true && X3 === true && X2 === false && O2 === false && turn === 1) {
document.getElementById("2").innerHTML = 'O';
O2 = true
turn--
}
if(X2 === true && X3 === true && X1 === false && O1 === false && turn === 1) {
document.getElementById("1").innerHTML = 'O';
O1 = true
turn--
}
if(X3 === true && X4 === true && X5 === false && O5 === false && turn === 1) {
document.getElementById("5").innerHTML = 'O';
O5 = true
turn--
}
if(X3 === true && X5 === true && X7 === false && O7 === false && turn === 1) {
document.getElementById("7").innerHTML = 'O';
O7 = true
turn--
}
if(X4 === true && X5 === true && X6 === false && O6 === false && turn === 1) {
document.getElementById("6").innerHTML = 'O';
O6 = true
turn--
}
if(X7 === true && X8 === true && X9 === false && O9 === false && turn === 1) {
document.getElementById("9").innerHTML = 'O';
O9 = true
turn--
}
if(X7 === true && X9 === true && X8 === false && O8 === false && turn === 1) {
document.getElementById("8").innerHTML = 'O';
O8 = true
turn--
}
if(X8 === true && X9 === true && X7 === false && O7 === false && turn === 1) {
document.getElementById("7").innerHTML = 'O';
O7 = true
turn--
}
if(X1 === true && X4 === true && X7 === false && O7 === false && turn === 1) {
document.getElementById("7").innerHTML = 'O';
O7 = true
turn--
}
if(X1 === true && X7 === true && X4 === false && O4 === false && turn === 1) {
document.getElementById("4").innerHTML = 'O';
O4 = true
turn--
}
if(X7 === true && X4 === true && X1 === false && O1 === false && turn === 1) {
document.getElementById("1").innerHTML = 'O';
O1 = true
turn--
}
if(X2 === true && X5 === true && X8 === false && O8 === false && turn === 1) {
document.getElementById("8").innerHTML = 'O';
O8 = true
turn--
}
if(X2 === true && X8 === true && X5 === false && O5 === false && turn === 1) {
document.getElementById("5").innerHTML = 'O';
O5 = true
turn--
}
if(X5 === true && X8 === true && X2 === false && O2 === false && turn === 1) {
document.getElementById("2").innerHTML = 'O';
O2 = true
turn--
}
if(X3 === true && X6 === true && X9 === false && O9 === false && turn === 1) {
document.getElementById("9").innerHTML = 'O';
O9 = true
turn--
}
if(X3 === true && X9 === true && X6 === false && O6 === false && turn === 1) {
document.getElementById("6").innerHTML = 'O';
O6 = true
turn--
}
if(X9 === true && X6 === true && X3 === false && O3 === false && turn === 1) {
document.getElementById("3").innerHTML = 'O';
O3 = true
turn--
}
if(X5 === true && X7 === true && X3 === false && O3 === false && turn === 1) {
document.getElementById("3").innerHTML = 'O';
O3 = true
turn--
}
if(X5 === true && X3 === true && X7 === false && O7 === false && turn === 1) {
document.getElementById("7").innerHTML = 'O';
O7 = true
turn--
}
if(X7 === true && X3 === true && X5 === false && O5 === false && turn === 1) {
document.getElementById("5").innerHTML = 'O';
O5 = true
turn--
}
if(X1 === true || X2 === true || X3 === true || X4 === true || X5 === true || X6 === true || X7 === true || X8 === true || X9 === true && turn === 1) {
if(O5 === false && X5 === false && turn === 1){
document.getElementById("5").innerHTML = 'O';
O5 = true
turn--} else {
if(X1 === false && O1 === false && turn === 1){
document.getElementById("1").innerHTML = 'O';
O1 = true
turn--
}
if(X2 === false && O2 === false && turn === 1){
document.getElementById("2").innerHTML = 'O';
O2 = true
turn--
}
if(X3 === false && O3 === false && turn === 1){
document.getElementById("3").innerHTML = 'O';
O3 = true
turn--
}
if(X4 === false && O4 === false && turn === 1){
document.getElementById("4").innerHTML = 'O';
O4 = true
turn--
}
if(X5 === false && O5 === false && turn === 1){
document.getElementById("5").innerHTML = 'O';
O5 = true
turn--
}
if(X6 === false && O6 === false && turn === 1){
document.getElementById("6").innerHTML = 'O';
O6 = true
turn--
}
if(X7 === false && O7 === false && turn === 1){
document.getElementById("7").innerHTML = 'O';
O7 = true
turn--
}
if(X8 === false && O8 === false && turn === 1){
document.getElementById("8").innerHTML = 'O';
O8 = true
turn--
}
if(X9 === false && O9 === false && turn === 1){
document.getElementById("9").innerHTML = 'O';
O9 = true
turn--
}
}
}
}
我有非常长的井字游戏代码来检查玩家是否即将获胜,但我不知道是否有办法缩短它。我知道我可以使用循环和数组来缩短它,但我不知道如何应用它们。这只是我的代码的一小部分,因此某些变量可能会让我感到困惑。庆幸的是我没有把整个东西都贴上去。你会对 if 语句做噩梦。
我一开始就学会了如何使用数组和循环,但我使用的网站(codecademy)没有告诉我如何将其应用到任何东西,除了打印出数组中的某些单词。
您可以通过使用数组和循环来显着简化和缩短代码。但避免使用 eval(考虑安全性)。
const winningCombinations = [
[1, 2, 3], [4, 5, 6], [7, 8, 9], // Rows
[1, 4, 7], [2, 5, 8], [3, 6, 9], // Columns
[1, 5, 9], [3, 5, 7] // Diagonals
];
for (const combination of winningCombinations) {
const [a, b, c] = combination;
const isPlayerWinning = eval(`X${a} && X${b} && !O${c}`);
if (isPlayerWinning && turn === 1) {
document.getElementById(`${c}`).innerHTML = 'O';
eval(`O${c} = true`);
turn--;
break;
}
}
// If no winning move is found, make a defensive move
for (let i = 1; i <= 9; i++) {
if (!eval(`X${i}`) && !eval(`O${i}`) && turn === 1) {
document.getElementById(`${i}`).innerHTML = 'O';
eval(`O${i} = true`);
turn--;
break;
}
}
如果你不想使用 eval,那么试试这个
const playerMoves = ['X1', 'X2', 'X3', 'X4', 'X5', 'X6', 'X7', 'X8', 'X9'];
const opponentMoves = ['O1', 'O2', 'O3', 'O4', 'O5', 'O6', 'O7', 'O8', 'O9'];
function checkWinningMove(player, opponent) {
for (const combination of winningCombinations) {
const [a, b, c] = combination;
const isPlayerWinning = player.includes(`X${a}`) && player.includes(`X${b}`) && !opponent.includes(`O${c}`);
if (isPlayerWinning && turn === 1) {
document.getElementById(`${c}`).innerHTML = 'O';
opponent.push(`O${c}`);
turn--;
return true;
}
}
return false;
}
function makeMove(moves, symbol) {
for (let i = 1; i <= 9; i++) {
const moveId = `${i}`;
if (!moves.includes(`X${i}`) && !moves.includes(`O${i}`) && turn === 1) {
document.getElementById(moveId).innerHTML = symbol;
moves.push(`${symbol}${i}`);
turn--;
break;
}
}
}
const isWinningMove = checkWinningMove(playerMoves, opponentMoves);
if (!isWinningMove) {
makeMove(opponentMoves, 'O');
}