有什么方法可以更有效地使用某些东西而不是if语句?

问题描述 投票:0回答:1
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)没有告诉我如何将其应用到任何东西,除了打印出数组中的某些单词。

javascript tic-tac-toe
1个回答
0
投票

您可以通过使用数组和循环来显着简化和缩短代码。但避免使用 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');
}

© www.soinside.com 2019 - 2024. All rights reserved.