JavaScript Work done

pull/60/head
Mazhar Hussain 4 years ago
parent 0c68873c6a
commit 3769b76708

@ -0,0 +1,92 @@
const X_Class = 'x'
const CIRCLE_CLASS = 'circle'
const WINNING_COMBINATIONS = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6]
]
const cellElements = document.querySelectorAll('[data-cell]')
const winningMessageTextElement = document.querySelector('[data-winning-message-text]')
const winningMessageElement = document.getElementById('winningMessage')
const restartButton = document.getElementById('restartButton')
const board = document.getElementById('board')
let circleTurn
startGame()
restartButton.addEventListener('click', startGame)
function startGame(params) {
circleTurn = false
cellElements.forEach(cell => {
cell.classList.remove(X_Class)
cell.classList.remove(CIRCLE_CLASS)
cell.removeEventListener('click', handleClick)
cell.addEventListener('click', handleClick, { once: true })
})
setBoardHoverClass()
winningMessageElement.classList.remove('show')
}
function handleClick(e) {
const cell = e.target
const currentClass = circleTurn ? CIRCLE_CLASS : X_Class
placeMark(cell, currentClass)
if (checkWin(currentClass)) {
endGame(false)
} else if (isDraw()) {
endGame(true)
} else {
swapTurns()
setBoardHoverClass()
}
}
function endGame(draw) {
if (draw) {
winningMessageTextElement.innerText = 'Draw!'
} else {
winningMessageTextElement.innerText = `${circleTurn ? "O's Wins" :"X's Wins" }`
}
winningMessageElement.classList.add('show')
}
function placeMark(cell, currentClass) {
cell.classList.add(currentClass)
}
function swapTurns() {
circleTurn = !circleTurn
}
function isDraw() {
return [...cellElements].every(cell => {
return cell.classList.contains(X_Class) || cell.classList.contains(CIRCLE_CLASS)
})
}
function setBoardHoverClass() {
board.classList.remove(X_Class)
board.classList.remove(CIRCLE_CLASS)
if (circleTurn) {
board.classList.add(CIRCLE_CLASS)
} else {
board.classList.add(X_Class)
}
}
function checkWin(currentClass) {
return WINNING_COMBINATIONS.some(combinations => {
return combinations.every(index => {
return cellElements[index].classList.contains(currentClass)
})
})
}
Loading…
Cancel
Save