DEV Community

Cover image for Guess The Die : Javascript Game
Fidal Mathew
Fidal Mathew

Posted on

10 1

Guess The Die : Javascript Game

Hi guys, hope you are doing good. In this post, we are going to make a game using Javascript.
The game involves the following functionalities-

  • The user has to guess a number on the die 🎲 while it gets rolled in a span of 10 secs.
  • If the guess is right then the score will be incremented by one.
  • There is a 10 second wait/countdown between rolls during which we have to guess the number on the die.
  • When the user select his/her guess, the roll happens immediately and the result is displayed.
  • If the 10 seconds on the roll expires, it simply resets and there is no impact to the score.

Dice Load

Gameplay

First, let us look at the HTML structure.

Index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Roll the Dice Game</title>

    <link rel="stylesheet" href="css/style.css">
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap" rel="stylesheet">
</head>

<body>


    <div class="container">

        <h1>ROLL THE DICE</h1>
        <div class="info">
            <div>
                <div style="display: inline-block">Selected<br> variable:</div> <span id="SV">_</span>
            </div>
            <div class="image-dice">
                <img id="dice" src="img/load.gif" alt="">

            </div>

            <div>Score: <span id="CV">0</span></div>
        </div>

        <div class="number">

            <button>1</button>
            <button>2</button>
            <button>3</button>
            <button>4</button>
            <button>5</button>
            <button>6</button>

        </div>

        <div id="report"> </div>

        <div id="h">Dice will change in <span id="timeS">0</span> seconds</div>

        <div id="result"></div>

    </div>


    <script src="index.js"></script>
</body>

</html>

Enter fullscreen mode Exit fullscreen mode

And here’s the index.js

Index.js

"use strict";

let score = 0;
let randomVar;

let buttonVal = document.getElementsByTagName("button");
let result = document.getElementById("result");
let report = document.getElementById("report");
let timeS = document.getElementById("timeS");
let dice = document.getElementById("dice");



const Clicked = (e) => {
    let selectVar = (e.target.innerText);

    dice.src = `img/${randomVar}.png`;        //To change the dice picture          

    document.getElementById("SV").innerHTML = selectVar;


    if (randomVar == selectVar) {
        result.style.color = "#1CE1BE";
        result.innerHTML = "Guess was right!";
        score++;
        document.getElementById("CV").innerHTML = score;

    }
    else {
        result.style.color = "#FF6D2E";
        result.innerHTML = "Guess was wrong!";
    }


    Array.from(buttonVal).forEach(element => {
        element.disabled = true;
        element.classList.toggle("disabled");
    });

}




const load = () => {
    report.innerHTML = "loading game will start in a few seconds!";
    document.getElementById('h').style.display = "none";
    document.getElementById('result').style.display = "none";

    Array.from(buttonVal).forEach(element => {

        element.addEventListener("click", Clicked); //added event click

        element.disabled = false;
        element.classList.add("disabled");

    });


    setTimeout(() => {
        document.getElementById('report').style.display = "none";
        document.getElementById('h').style.display = "block";
        document.getElementById('result').style.display = "block";


    }, 6000);

}



const DisplayTime = () => {
    let timesecond = 9;

    setInterval(() => {

        timeS.innerHTML = timesecond;
        timesecond--;
        if (timesecond == 0) {

            timesecond = 10;
        }


    }, 1000);


}


const addNewRandom = () => {

    setInterval(() => {
        randomVar = Math.floor(Math.random() * 6) + 1;

        dice.src = `img/load.gif`;
        dice.style.width = "37.5%";
        result.innerHTML = "";
    document.getElementById("SV").innerHTML = "_";


        Array.from(buttonVal).forEach(element => {

            element.disabled = false;
            element.classList.remove("disabled");

        });

    }, 10000);

}



window.onload = () => {

    load();
    DisplayTime();
    addNewRandom();
}





Enter fullscreen mode Exit fullscreen mode

Game Description

Before moving to Javascript part, do take a look at index.html and game UI. It will help you understand the game better.

Declaration

Declare all necessary variables in index.js

let score = 0;
let randomVar;  // to select a random value from 1 to 6 

let buttonVal = document.getElementsByTagName("button");
let result = document.getElementById("result");
let report = document.getElementById("report");
let timeS = document.getElementById("timeS");
let dice = document.getElementById("dice");
Enter fullscreen mode Exit fullscreen mode

The game mainly comprises 3 sections, we call these functions after the browser window loads

window.onload = () => {

    load();
    DisplayTime();
    addNewRandom();
}
Enter fullscreen mode Exit fullscreen mode

Load()

The load() function involves-

  • Setting up report element =" loading game will start in a few seconds!"
  • Setting display of id “h” and “result” as none.
  • Add event listener to all the buttons/numbers element.addEventListener("click", Clicked); and add class “disabled” which disables pointer events. ( I will tell you about Clicked() later on in the tutorial.)
.disabled{
    background-color: gray;
    pointer-events: none;
}

.disabled:hover{
    background-color: gray;
    color: white;

}
Enter fullscreen mode Exit fullscreen mode

Add a set timeout of 6 secs after which “report” is not displayed
meanwhile “h” & “result” are displayed

DisplayTime()

DisplayTime() function is used to-

  • Display time, which is denoted by
    timeS.innerHTML = timesecond;

  • Timesecond value is updated each sec using setInterval()

addNewRandom()

addNewRandom() function consists of a set interval of 10 secs.

  • It sets a new random value to randomVal between 1 and 6.
    randomVar = Math.floor(Math.random() * 6) + 1;

  • After updating randomVar, we remove class "disabled" from each of the keys/buttons.

Clicked()

Last but not least, let’s look at Clicked() function.
It's functionalites include -

  • Set the picture of die depending on randomVar.

  • Compare the selected button and randomVar and
    display the result and score accordingly.

Source Code : https://github.com/FidalMathew/ROLL-THE-DICE
Note: Some additional features have been added to the game

Thank you all for reading, have a great day :)

Connect with me on -

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (8)

Collapse
 
tyxod profile image
Roland C O

Great job.

Collapse
 
fidalmathew profile image
Fidal Mathew

Thank you 😄

Collapse
 
suhakim profile image
sadiul hakim

Great Job 👍

Collapse
 
fidalmathew profile image
Fidal Mathew

Thank you 😁

Collapse
 
zippcodder profile image
Deon Rich

Nice!

Collapse
 
fidalmathew profile image
Fidal Mathew

Thank you 😄

Collapse
 
dy2004 profile image
Dun Yan

What a Blog Mathew

Collapse
 
fidalmathew profile image
Fidal Mathew

Thank you Yan! 😊

Cloudinary image

Video API: manage, encode, and optimize for any device, channel or network condition. Deliver branded video experiences in minutes and get deep engagement insights.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay