From 745874df30439027f44ec85d197aec2a8adb056d Mon Sep 17 00:00:00 2001 From: JustSock Date: Wed, 29 Sep 2021 20:32:29 +0500 Subject: [PATCH 1/2] =?UTF-8?q?Tic-tie-toe=20(=D0=B2=D1=81=D0=B5=20=D0=BA?= =?UTF-8?q?=D1=80=D0=BE=D0=BC=D0=B5=206,=2011,=2012)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Усынин Андрей Вячеславович --- index.js | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 111 insertions(+), 8 deletions(-) diff --git a/index.js b/index.js index 7553909..c20d67d 100644 --- a/index.js +++ b/index.js @@ -4,16 +4,29 @@ const EMPTY = ' '; const container = document.getElementById('fieldWrapper'); +let fullGrid=[]; +let switcherX = true; +let movesLeft; +let x; +let win = false; startGame(); addResetListener(); function startGame () { - renderGrid(3); + x = prompt('Введите длинну стороны поля', 3) + renderGrid(x); + movesLeft = x*x; + for(let i=0; i0)&(!win)){ + let y = Math.floor(Math.random() * x); + let z = Math.floor(Math.random() * x); + while (fullGrid[y][z] != EMPTY) + { + y = Math.floor(Math.random() * x); + z = Math.floor(Math.random() * x); + } + Click(y, z); + } + } +} - /* Пользоваться методом для размещения символа в клетке так: +function Click (row, col){ + if (movesLeft<=0) + { + if (!win) + alert('Победила дружба'); + return; + } + if (switcherX){ + renderSymbolInCell(CROSS, row, col); + switcherX = false; + fullGrid[row][col] = CROSS; + checkWin(row, col, CROSS) + } + else{ renderSymbolInCell(ZERO, row, col); - */ + 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; + for (i=0; i Date: Thu, 30 Sep 2021 23:05:34 +0500 Subject: [PATCH 2/2] =?UTF-8?q?Tic-tac-toe=20all=20done=20=D0=A3=D1=81?= =?UTF-8?q?=D1=8B=D0=BD=D0=B8=D0=BD=20=D0=90.=20=D0=92.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Усынин Андрей Вячеславович --- README.md | 24 +++++----- index.js | 141 +++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 137 insertions(+), 28 deletions(-) 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 c20d67d..33f6826 100644 --- a/index.js +++ b/index.js @@ -9,19 +9,21 @@ let switcherX = true; let movesLeft; let x; let win = false; +let coolPosition = [0, 0]; startGame(); addResetListener(); function startGame () { - x = prompt('Введите длинну стороны поля', 3) - renderGrid(x); + 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); } @@ -45,9 +47,13 @@ function cellClickHandler (row, col) { 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 = Math.floor(Math.random() * x); - let z = Math.floor(Math.random() * x); + let y = coolPosition[0]; + let z = coolPosition[1]; + //console.log(y+' '+z); while (fullGrid[y][z] != EMPTY) { y = Math.floor(Math.random() * x); @@ -56,6 +62,10 @@ function cellClickHandler (row, col) { Click(y, z); } } + //Увеличение поля + if (win != true) + if ((+(movesLeft*2)) <= (+x*x)) + enlageGrid(); } function Click (row, col){ @@ -66,13 +76,13 @@ function Click (row, col){ return; } if (switcherX){ - renderSymbolInCell(CROSS, row, col); + renderSymbolInCell(CROSS, row, col, '#333'); switcherX = false; fullGrid[row][col] = CROSS; checkWin(row, col, CROSS) } else{ - renderSymbolInCell(ZERO, row, col); + renderSymbolInCell(ZERO, row, col), '#333'; switcherX = true; fullGrid[row][col] = ZERO; checkWin(row, col, ZERO) @@ -88,56 +98,155 @@ function Click (row, col){ function checkWin(row, col, player){ let amount = 0; + let potentialPosition =[] + //Проверка на полную горизонталь for (i=0; i