Skip to content

Instantly share code, notes, and snippets.

@AlexanderSutul
Created June 19, 2018 09:22
Show Gist options
  • Save AlexanderSutul/bca92699ce620163a24d121e845966c2 to your computer and use it in GitHub Desktop.
Save AlexanderSutul/bca92699ce620163a24d121e845966c2 to your computer and use it in GitHub Desktop.
Tic-toe yandex interview
<div class="current__player">
O
</div>
<br>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<br>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<br>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<br>
<div class="winner"></div>
<div class="reset">Начать заново</div>
window.onload = function() {
function winning(cells, player) {
if (
(cells[0].innerHTML == player &&
cells[1].innerHTML == player &&
cells[2].innerHTML == player) ||
(cells[3].innerHTML == player &&
cells[4].innerHTML == player &&
cells[5].innerHTML == player) ||
(cells[6].innerHTML == player &&
cells[7].innerHTML == player &&
cells[8].innerHTML == player) ||
(cells[0].innerHTML == player &&
cells[3].innerHTML == player &&
cells[6].innerHTML == player) ||
(cells[1].innerHTML == player &&
cells[4].innerHTML == player &&
cells[7].innerHTML == player) ||
(cells[2].innerHTML == player &&
cells[5].innerHTML == player &&
cells[8].innerHTML == player) ||
(cells[0].innerHTML == player &&
cells[4].innerHTML == player &&
cells[8].innerHTML == player) ||
(cells[2].innerHTML == player &&
cells[4].innerHTML == player &&
cells[6].innerHTML == player)
) {
return `Winner is ${player}`;
} else {
return false;
}
}
var cells = document.getElementsByClassName("cell");
var winner = "";
var currentPlayer = 1;
document.getElementsByClassName(
"current__player"
)[0].innerHTML = currentPlayer;
var currentPlayerTitle = "O";
Array.from(cells).map(function(cell, index) {
cell.addEventListener("click", function(e) {
if (e.target.innerHTML == "X" || e.target.innerHTML == "O") {
return;
}
if (currentPlayer === 1) {
e.target.innerHTML = "X";
winner = winning(cells, "X");
currentPlayerTitle = "O";
currentPlayer = 2;
} else if (currentPlayer === 2) {
e.target.innerHTML = "O";
winner = winning(cells, "O");
currentPlayerTitle = "X";
currentPlayer = 1;
}
if (winner != false) {
document.getElementsByClassName("winner")[0].innerHTML = winner;
var resetButton = document.getElementsByClassName("reset")[0];
resetButton.style.display = "block";
resetButton.addEventListener("click", function(e) {
document.getElementsByClassName("reset")[0].style.display = "none";
document.getElementsByClassName("winner")[0].innerHTML = "";
this.cells = [];
Array.from(cells).map(function(cell, index) {
cell.innerHTML = "";
});
currentPlayer = 1;
});
} else {
document.getElementsByClassName(
"current__player"
)[0].innerHTML = currentPlayer == 1
? 'Current player is ' + currentPlayer + ' and sign is "X"'
: 'Current player is ' + currentPlayer + ' and sign is "O"'
}
});
});
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.2.0/umd/react.development.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.2.0/umd/react-dom.development.js"></script>
@import url("https://fonts.googleapis.com/css?family=Roboto:400,400i,700");
div {
display: inline-block;
font-size: 30px;
color: forestgreen;
box-sizing: border-box;
vertical-align: middle;
font-family: Roboto, sans-serif;
}
.current__player {
color: black;
}
.cell {
width: 35px;
height: 35px;
text-align: center;
border: 1px solid black;
margin-bottom: 5px;
margin-top: 5px;
}
.winner {
color: red;
font-size: 35px;
}
.reset {
display: none;
}
.reset:hover {
cursor: pointer;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment