Показать сообщение отдельно
  #4 (permalink)  
Старый 08.05.2020, 00:23
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 108

Я б на твоем месте прислушался к Рони, но раз ты так начал, то здесь продолжение

const checkWin = (field) =>{
    for (let i = 0; i < field.length; i++) {
      for(let j = 0; j < field[i].length; j++){
        if(gameTurn === field[i][j] &&
          (field[i][j+1] !==undefined && gameTurn === field[i][j+1] && 
            field[i][j+2] !==undefined && gameTurn === field[i][j+2]) ||
          (field[i+1][j] !==undefined && gameTurn === field[i+1][j] && 
            field[i+2][j] !==undefined && gameTurn === field[i+2][j]) ||
          (field[i+1][j+1] !==undefined && gameTurn === field[i+1][j+1] && 
            field[i+2][j+2] !==undefined && gameTurn === field[i+2][j+2]) ||
          (field[i-1][j-1] !==undefined && gameTurn === field[i-1][j-1] && 
            field[i-2][j-2] !==undefined && gameTurn === field[i-2][j-2])
        )
          alert('Ты победил!')
      }
    }
  }


но лучше делать отдельные циклы по всем четырем направлениям (горизонт, вертикаль, диагонали в разных направлениях) и в for "не добегать" до края на 2 клетки. И тогда у нас можно не проверять на существования элемента и меньше операций будет совершено


const checkWin = (field) =>{
    gameTurn=1;
    for (let i = 0; i < field.length; i++) {
      for(let j = 0; j < field[i].length-2; j++){
        if(gameTurn === field[i][j] &&
          (gameTurn === field[i][j+1] && gameTurn === field[i][j+2])
        )
          alert('Ты победил! 1')
      }
    }
    for (let i = 0; i < field.length-2; i++) {
      for(let j = 0; j < field[i].length; j++){
        if(gameTurn === field[i][j] &&
          (gameTurn === field[i+1][j] && gameTurn === field[i+2][j])
        )
          alert('Ты победил! 2')
      }
    }
    for (let i = 0; i < field.length-2; i++) {
      for(let j = 0; j < field[i].length-2; j++){
        if(gameTurn === field[i][j] &&
          (gameTurn === field[i+1][j+1] && gameTurn === field[i+2][j+2])
        )
          alert('Ты победил! 3')
      }
    }
    for (let i = 0; i < field.length-2; i++) {
      for(let j = 2; j < field[i].length; j++){
        if(gameTurn === field[i][j] &&
          (gameTurn === field[i+1][j-1] && gameTurn === field[i+2][j-2])
        )
          alert('Ты победил! 4')
      }
    }
  }

  checkWin([[,1,1],[,1,],[1,,]])

Последний раз редактировалось od0201, 08.05.2020 в 01:20.
Ответить с цитированием