Let’s create classic hangman game with HTML, CSS and Javascript.
HTML
<div class="container">
<div class="hangman_container">
<div class="hangman">
<div class="head"></div>
<div class="body"></div>
<div class="left_hand"></div>
<div class="right_hand"></div>
<div class="left_leg"></div>
<div class="right_leg"></div>
</div>
</div>
<div class="word_container">
<div class="word"></div>
</div>
</div>
<div class="game_over">
<div class="game_over_content"></div>
</div>CSS
html {
box-sizing: border-box;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
body {
padding: 0;
margin: 0;
font-family: Arial, Helvetica, sans-serif;
background-color: #EBF0F6;
}
.container {
width: 1200px;
margin: 0 auto;
}
.hangman_container {
margin-top: 50px;
}
.hangman {
width: 250px;
height: 250px;
border-top: 5px solid #000;
border-left: 5px solid #000;
margin: 0 auto;
position: relative;
}
.hangman::before {
content: '';
width: 5px;
height: 90px;
background-color: #000;
border-left: 2px solid #000;
position: absolute;
top: -20px;
left: 30px;
transform: rotate(52deg);
}
.hangman::after {
content: '';
width: 20px;
height: 5px;
background-color: #000;
border-left: 2px solid #000;
position: absolute;
top: 7px;
left: 125px;
transform: rotate(90deg);
}
.head {
width: 50px;
height: 50px;
border-radius: 50%;
border: 2px solid #000;
position: absolute;
top: 19px;
left: 110px;
display: none;
}
.body {
width: 3px;
height: 90px;
background-color: #000;
position: absolute;
left: 133px;
top: 68px;
display: none;
}
.left_hand {
width: 2px;
height: 50px;
background-color: #000;
position: absolute;
transform: rotate(35deg);
top: 80px;
left: 120px;
display: none;
}
.right_hand {
width: 2px;
height: 50px;
background-color: #000;
position: absolute;
transform: rotate(-35deg);
top: 82px;
left: 149px;
display: none;
}
.left_leg {
width: 3px;
height: 70px;
background-color: #000;
position: absolute;
transform: rotate(25deg);
top: 150px;
left: 118px;
display: none;
}
.right_leg {
width: 3px;
height: 70px;
background-color: #000;
position: absolute;
transform: rotate(-25deg);
top: 150px;
left: 148px;
display: none;
}
.display_feature {
display: block;
}
.word_container {
width: 250px;
margin: 85px auto;
}
.word {
display: flex;
}
.letter {
width: 50px;
height: 40px;
margin: 2px;
font-size: 27px;
text-align: center;
background-color: #ccc;
padding: 2px 15px;
border-bottom: 3px solid #000;
display: flex;
justify-content: center;
}
.correct_guess_color {
color: #fff;
background-color: #00C2CB;
}
.game_over {
display: none;
position: fixed;
z-index: 1;
padding-top: 100px;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(0, 0, 0, 0.4);
}
.game_over_content {
background-color: #fefefe;
margin: auto;
padding: 20px;
border: 1px solid #888;
width: 60%;
}
.game_over_content>p {
font-size: 2rem;
text-align: center;
}JS
let word = document.querySelector('.word');
let words_list = ["javascript", "python", "computer", "technology", "software", "programming", "application", "algorithm"];
let random_index = Math.floor(Math.random() * 8);
let random_word = words_list[random_index];
let press_word = [];
let head = document.querySelector('.head');
let body = document.querySelector('.body');
let left_hand = document.querySelector('.left_hand');
let right_hand = document.querySelector('.right_hand');
let left_leg = document.querySelector('.left_leg');
let right_leg = document.querySelector('.right_leg');
let wrong_letter_count = 0;
let game_over = document.querySelector('.game_over');
let game_over_content = document.querySelector('.game_over_content');
function hangman_start() {
for (let i = 0; i < random_word.split("").length; i++) {
word.innerHTML += ` <span class="letter"></span>`
}
}
window.addEventListener("keydown", event => {
let letter = document.querySelectorAll('.letter');
if (event.keyCode >= 65 && event.keyCode <= 90) {
if (random_word.includes(event.key)) {
if (!press_word.includes(event.key)) {
press_word.push(event.key);
random_word.split("").forEach((element, i) => {
if (event.key === element) {
letter[i].innerHTML = `${event.key}`
letter[i].classList.add('correct_guess_color');
}
})
}
let correct_guess_color = document.querySelectorAll('.correct_guess_color');
if (correct_guess_color.length === random_word.split("").length) {
showNotification("w");
};
} else {
wrong_letter();
}
}
})
function wrong_letter() {
wrong_letter_count += 1;
switch (wrong_letter_count) {
case 1:
head.classList.add('display_feature');
break;
case 2:
body.classList.add('display_feature');
break;
case 3:
left_hand.classList.add('display_feature');
break;
case 4:
right_hand.classList.add('display_feature');
break;
case 5:
left_leg.classList.add('display_feature');
break;
case 6:
right_leg.classList.add('display_feature');
showNotification("l");
}
}
function showNotification(state) {
game_over.style.display = "block";
if (state === "w") {
let p = document.createElement("p");
let text_content = document.createTextNode("You Won! Game Will Restart Soon")
p.appendChild(text_content);
game_over_content.appendChild(p)
} else if (state === "l") {
let p = document.createElement("p");
let text_content = document.createTextNode("You Lost! Game Will Restart Soon")
p.appendChild(text_content);
game_over_content.appendChild(p)
}
setTimeout(() => {
reset()
}, 3000);
}
function reset() {
game_over.style.display = "none";
head.classList.remove('display_feature');
body.classList.remove('display_feature');
left_hand.classList.remove('display_feature');
right_hand.classList.remove('display_feature');
left_leg.classList.remove('display_feature');
right_leg.classList.remove('display_feature');
game_over_content.innerHTML = ""
document.querySelectorAll(".letter").forEach(e => e.remove());
press_word = [];
wrong_letter_count = 0;
random_index = Math.floor(Math.random() * 5);
random_word = words_list[random_index];
hangman_start();
}
hangman_start();