diff --git a/README.md b/README.md index 884044a..a357e57 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ Задача дописать игру в крестики-нолики. - +Я Усынин Андрей Вячеславович! Сейчас в коде описаны функции для рисования поля любого размера и рисования любого символа в клетке этого поля. Твоя задача дописать код, чтобы это стало полноценной игрой в Крестики-нолики. -1. Реши, как будешь хранить поле. Тебе нужна будет такая структура, в которой удобно понимать есть ли победитель: три клетки по горизонтали, вертикали или диагонали, заполненные одинаковыми символами. -2. Допиши функцию cellClickHandler, чтобы после клика ставился крестик или нолик в соответствующее поле. -3. Если поле, по которому кликнули, не пустое, символ ставиться не должен. -4. Если кончились ходы, выведи alert с текстом "Победила дружба". -5. Напиши функцию, которая считает: есть ли уже победитель. Если есть победитель, выведи alert с названием победителя. -6. Если есть победитель, покрась победные значения в клетках в красный. -7. После победы, клик по полю больше не должен ставить крестик или нолик. -8. Обрабатывай клик по кнопке "Сначала": допиши метод resetClickHandler, чтобы поле очищалось. -9. \* Сделай так, чтобы можно было в начале игры задавать поле произвольного размера. -10. \* Напиши "искусственный интеллект" — функцию, которая будет ставить нолики с случайное пустое поле. +1. Реши, как будешь хранить поле. Тебе нужна будет такая структура, в которой удобно понимать есть ли победитель: три клетки по горизонтали, вертикали или диагонали, заполненные одинаковыми символами. +2. Допиши функцию cellClickHandler, чтобы после клика ставился крестик или нолик в соответствующее поле. +3. Если поле, по которому кликнули, не пустое, символ ставиться не должен. +4. Если кончились ходы, выведи alert с текстом "Победила дружба". +5. Напиши функцию, которая считает: есть ли уже победитель. Если есть победитель, выведи alert с названием победителя. +6. Если есть победитель, покрась победные значения в клетках в красный. +7. После победы, клик по полю больше не должен ставить крестик или нолик. +8. Обрабатывай клик по кнопке "Сначала": допиши метод resetClickHandler, чтобы поле очищалось. +9. \* Сделай так, чтобы можно было в начале игры задавать поле произвольного размера. +10. \* Напиши "искусственный интеллект" — функцию, которая будет ставить нолики с случайное пустое поле. 11. \* Напиши чуть более умный искусственный интеллект — функция, ставящая нолики в случайном месте обязана поставить нолик в такое поле, нолик в котором приведет к выигрышу "ИИ". -12. \* Сделай так, чтобы при заполнении больше половины клеток на поле, оно бы расширялось: добавлялось бы по одному ряду с каждой стороны. +12. \* Сделай так, чтобы при заполнении больше половины клеток на поле, оно бы расширялось: добавлялось бы по одному ряду с каждой стороны. diff --git a/index.js b/index.js index 7553909..33f6826 100644 --- a/index.js +++ b/index.js @@ -4,21 +4,36 @@ const EMPTY = ' '; const container = document.getElementById('fieldWrapper'); +let fullGrid=[]; +let switcherX = true; +let movesLeft; +let x; +let win = false; +let coolPosition = [0, 0]; startGame(); addResetListener(); function startGame () { - renderGrid(3); + x = prompt('Введите длинну стороны поля', 3) + movesLeft = x*x; + coolPosition = [Math.floor(Math.random() * x), Math.floor(Math.random() * x)]; + for(let i=0; i cellClickHandler(i, j)); row.appendChild(cell); } @@ -27,18 +42,212 @@ function renderGrid (dimension) { } function cellClickHandler (row, col) { - // Пиши код тут - console.log(`Clicked on cell: ${row}, ${col}`); + if (win === true) + return; + console.log(`Clicked on cell: ${row}, ${col}`); + if (fullGrid[row][col]===EMPTY){ + Click(row, col); + if (win != true) + if ((+(movesLeft*2)) <= (+x*x)) + enlageGrid(); + if ((movesLeft >0)&(!win)){ + let y = coolPosition[0]; + let z = coolPosition[1]; + //console.log(y+' '+z); + while (fullGrid[y][z] != EMPTY) + { + y = Math.floor(Math.random() * x); + z = Math.floor(Math.random() * x); + } + Click(y, z); + } + } + //Увеличение поля + if (win != true) + if ((+(movesLeft*2)) <= (+x*x)) + enlageGrid(); +} + +function Click (row, col){ + if (movesLeft<=0) + { + if (!win) + alert('Победила дружба'); + return; + } + if (switcherX){ + renderSymbolInCell(CROSS, row, col, '#333'); + switcherX = false; + fullGrid[row][col] = CROSS; + checkWin(row, col, CROSS) + } + else{ + renderSymbolInCell(ZERO, row, col), '#333'; + switcherX = true; + fullGrid[row][col] = ZERO; + checkWin(row, col, ZERO) + } + movesLeft=movesLeft-1; + if (movesLeft<=0) + { + if (!win) + alert('Победила дружба'); + return; + } +} +function checkWin(row, col, player){ + let amount = 0; + let potentialPosition =[] + //Проверка на полную горизонталь + for (i=0; i