From 1837024117ebdceabead108a08e13023f46bdc6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B0=D0=B4=D1=8F?= Date: Tue, 25 Feb 2025 19:15:13 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=A2-202=20=D0=A1=D0=B8=D0=BC=D0=BA?= =?UTF-8?q?=D0=B8=D0=BD=D0=B0=20=D0=9D=D0=B0=D0=B4=D1=8F=20=D0=A2=D1=80?= =?UTF-8?q?=D0=B5=D1=82=D1=8C=D1=8F=D0=BA=D0=BE=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC=20(=D1=83=20=D0=BD=D0=B5=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=81=D0=B5=D0=B3=D0=BE=D0=B4=D0=BD=D1=8F=20=D0=B4=D1=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 ++ index.js | 98 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..00e55c1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5527 +} \ No newline at end of file diff --git a/index.js b/index.js index 7553909..94e0f7a 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,16 @@ +class Game { + constructor() { + this.Move = CROSS; + this.Field = [[-10, -10, -10],[-10, -10, -10],[-10, -10, -10]] + this.Counter = 0; + this.Win = false; + } +} + const CROSS = 'X'; const ZERO = 'O'; const EMPTY = ' '; +let GAME = new Game(); const container = document.getElementById('fieldWrapper'); @@ -27,15 +37,88 @@ function renderGrid (dimension) { } function cellClickHandler (row, col) { + if (GAME.Win){ + return; + } // Пиши код тут console.log(`Clicked on cell: ${row}, ${col}`); - + if (GAME.Field[row][col] === -10) { + renderSymbolInCell(GAME.Move, row, col); + GAME.Field[row][col] = GAME.Move == CROSS ? 1 : 0; + GAME.Counter += 1; + } + else { + return; + } + if (GAME.Move === CROSS) { + GAME.Move = ZERO; + } + else { + GAME.Move = CROSS; + } + let winner = findWinner(); + if (winner == 0) { + setTimeout(() => alert('Победил Нолик'),500); + GAME.Win = true; + return; + } else if (winner == 3) { + setTimeout(() => alert('Победил Крестик'), 500); + GAME.Win = true; + return; + } + if (GAME.Counter === 9) { + setTimeout(() => alert('Победила Дружба!'), 500); + } /* Пользоваться методом для размещения символа в клетке так: renderSymbolInCell(ZERO, row, col); */ } +function findWinner () { + const sum = [ + [GAME.Field[0][0] + GAME.Field[0][1] + GAME.Field[0][2], [[0, 0], [0, 1], [0, 2]]], + [GAME.Field[1][0] + GAME.Field[1][1] + GAME.Field[1][2], [[1, 0], [1, 1], [1, 2]]], + [GAME.Field[2][0] + GAME.Field[2][1] + GAME.Field[2][2], [[2, 0], [2, 1], [2, 2]]], + [GAME.Field[0][0] + GAME.Field[1][0] + GAME.Field[2][0], [[0, 0], [1, 1], [2, 0]]], + [GAME.Field[0][1] + GAME.Field[1][1] + GAME.Field[2][1], [[0, 1], [1, 1], [2, 1]]], + [GAME.Field[0][2] + GAME.Field[1][2] + GAME.Field[2][2], [[0, 2], [1, 1], [2, 2]]], + [GAME.Field[0][0] + GAME.Field[1][1] + GAME.Field[2][2], [[0, 0], [1, 1], [2, 2]]], + [GAME.Field[0][2] + GAME.Field[1][1] + GAME.Field[2][0], [[0, 2], [1, 1], [2, 0]]] + ] + for (const item of sum) { + if (item[0] == 0){ + draw(item[1]) + return 0; + } + if (item[0] == 3){ + draw(item[1]) + return 3; + } + } + return -1; +} + +function draw(indexes) { + indexes = indexes.map(x => x.join(" ")) + const matrix = [ + document.querySelectorAll("tr")[0].querySelectorAll("td"), + document.querySelectorAll("tr")[1].querySelectorAll("td"), + document.querySelectorAll("tr")[2].querySelectorAll("td"), + ] + + console.log(matrix); + + for (let i = 0; i < 3; i++) { + for (let j = 0; j < 3; j++) { + if (indexes.includes(`${i} ${j}`)){ + console.log(matrix[i][j]); + matrix[i][j].style.background = "red"; + } + } + } +} + function renderSymbolInCell (symbol, row, col, color = '#333') { const targetCell = findCell(row, col); @@ -54,6 +137,19 @@ function addResetListener () { } function resetClickHandler () { + GAME = new Game(); + const matrix = [ + document.querySelectorAll("tr")[0].querySelectorAll("td"), + document.querySelectorAll("tr")[1].querySelectorAll("td"), + document.querySelectorAll("tr")[2].querySelectorAll("td"), + ] + + for (let i = 0; i < 3; i++) { + for (let j = 0; j < 3; j++) { + matrix[i][j].style.background = "#fffcd4"; + matrix[i][j].textContent = ""; + } + } console.log('reset!'); }