A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.geeksforgeeks.org/design-dragons-world-game-using-html-css-and-javascript/ below:

Design Dragon's World Game using HTML CSS and JavaScript

Design Dragon's World Game using HTML CSS and JavaScript

Last Updated : 12 Apr, 2023

Project Introduction: "Dragon's World" is a game in which one dragon tries to save itself from the other dragon by jumping over the dragon which comes in its way. The score is updated when one dragon saves himself from the other dragon. 

The project will contain HTML, CSS and JavaScript files. The HTML file adds structure to the game followed by styling using CSS. JavaScript adds functionality to the game.

File structure:

 

HTML Code:

index.html 

HTML
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content=
        "width=device-width, initial-scale=1.0">

    <link rel="stylesheet" href=
        "style.css?_cacheOverride=1606401798626">

    <link href=
"https://fonts.googleapis.com/css2?family=Ubuntu:ital, 
        wght@0, 300;1, 700&display=swap"
        rel="stylesheet">
</head>

<body>
    <h1 id="gameName">Welcome to Dragon's world</h1>
    <div class="container">
        <div class="gameover">Game Over</div>
        <div id="scorecount">Your score : 0</div>
        <div class="obstacle animateobstacle"></div>
        <div class="dragon" style="left: 426px;"></div>
    </div>
</body>

</html>

CSS code:

style.css

/* CSS Reset */
*{
    margin:0px;
    padding:0px;
}
body {
    /* Hides the  bottom scrollbar */
    overflow: hidden;
}
/* Styling of the Game's Name */
#gameName {
    position: absolute;
    top:30vh;
    left:38vw;
}
/* Background image styling */
.container {
    background-image: url(cover.png);
    background-size: cover;
    width:100vw;
    height:100vh;
}
/* ScoreCard Styling */
#scorecount {
    position: absolute;
    top:20px;
    right:20px;
    background-color: black;
    padding: 28px;
    border-radius: 20px;
    color: white;
}
/* Obstacle image styling and positioning */
.obstacle {
    background-image: url(obstacle.png);
    background-size: cover;
    width:154px;
    height: 126px;
    position: absolute;
    bottom:0px;
    right:120px;
}
/* Applying animation to the obstacle
 so that it can move towards left */
.animateobstacle {
    animation: aniob 5s linear infinite;
}
@keyframes aniob {
    0% {
        left:100vw;
    }
    100% {
        left:-10vw;
    }
}
/* Dragon's styling */
.dragon {
    background-image: url(dragon.png);
    background-size: cover;
    width: 194px;
    height: 126px;
    position: absolute;
    bottom:0px;
    left:90px;
}
/* Applying animation to the dragon so 
that it can save himself by jumping up */
.animatedragon {
    animation: ani 1s linear;
}
@keyframes ani {
    0% {
        bottom:0px;
    }
    25% {
        bottom:150px;
    }
    50% {
        bottom:300px;
    }
    75% {
        bottom:211px;
    }
    100% {
        bottom:0px;
    }
}
/* gameover styling and positioning */
.gameover {
    visibility: hidden;
    font-family: 'Ubuntu', sans-serif;
    position: absolute;
    top: 50vh;
    left: 35vw;
    color: red;
    font-weight: bold;
    font-size: 6rem;
    background-color: firebrick;
    border-radius: 20px;
}

JavaScript Code:

1. Movement of the dragon: This is provided by the onkeydown event.

document.onkeydown = function(e) {
    console.log(e.keyCode);
    if (e.keyCode == 38) {
        dragon = document.querySelector('.dragon');
        dragon.classList.add('animatedragon');
        setTimeout(() => {
            dragon.classList.remove('animatedragon');
        }, 700);
    }
    if (e.keyCode == 37) {
        dragon = document.querySelector('.dragon');
        dragonx = parseInt(window.getComputedStyle(dragon, null)
            .getPropertyValue('left'));
        dragon.style.left = dragonx - 112 + "px";
    }
    if (e.keyCode == 39) {
        dragon = document.querySelector('.dragon');
        dragonx = parseInt(window.getComputedStyle(
            dragon, null).getPropertyValue('left'));
        dragon.style.left = dragonx + 112 + "px";
    }
}

2. Updating the score: The score is satisfied only when a given condition is satisfied. We will compute the left and bottom values of both the obstacle and the dragon and then increase the score based on a proper value which shows that the dragon has saved himself from the obstacle. For this, we have taken "cross" variable and assigned "true" to it. When the dragon crosses the obstacle safely, we set the value to "false". After approximately 1s we change the value of cross to "true". We have also made the obstacle run faster after each cross and thus increasing the difficulty level.

setInterval(() => {
    dragon = document.querySelector('.dragon');
    gameover = document.querySelector('.gameover');
    obstacle = document.querySelector('.obstacle');

    dx = parseInt(window.getComputedStyle(
        dragon, null).getPropertyValue('left'));

    dy = parseInt(window.getComputedStyle(
        dragon, null).getPropertyValue('bottom'));

    ox = parseInt(window.getComputedStyle(
        obstacle, null).getPropertyValue('left'));

    oy = parseInt(window.getComputedStyle(
        obstacle, null).getPropertyValue('bottom'));

    offsetx = Math.abs(dx - ox);
    offsety = Math.abs(dy - oy);

    console.log(offsetx, offsety);

    if (offsetx < 120 && offsety <= 144) {
        gameover.style.visibility = 'visible';
        obstacle.classList.remove('animateobstacle');
    } else if (offsetx < 125 && cross) {
        score += 1;
        updateScore(score);
        cross = false;
        setTimeout(() => {
            cross = true;
        }, 1000);
        setInterval(() => {
            obsanidur = parseFloat(window
                .getComputedStyle(obstacle, null)
                .getPropertyValue('animation-duration'));

            obstacle.style.animationDuration
                = obsanidur - 0.01 + 's';
        }, 500);
    }
}, 10);

function updateScore(score) {
    scorecount.innerHTML = "Your score : " + score;
}

script.js 

javascript
<script>
    cross = true;
    score = 0;
    document.onkeydown = function(e) {
        console.log(e.keyCode);
        if (e.keyCode == 38) {
            dragon = document.querySelector('.dragon');

            dragon.classList.add('animatedragon');
            
            setTimeout(() => {
                dragon.classList.remove('animatedragon');
            }, 700);
        }
        if (e.keyCode == 37) {
            dragon = document.querySelector('.dragon');

            dragonx = parseInt(window.getComputedStyle(
                dragon, null).getPropertyValue('left'));

            dragon.style.left = dragonx - 112 + "px";
        }
        if (e.keyCode == 39) {
            dragon = document.querySelector('.dragon');

            dragonx = parseInt(window.getComputedStyle(
                dragon, null).getPropertyValue('left'));
            
            dragon.style.left = dragonx + 112 + "px";
        }
    }
    setInterval(() => {
        dragon = document.querySelector('.dragon');
        gameover = document.querySelector('.gameover');
        obstacle = document.querySelector('.obstacle');

        dx = parseInt(window.getComputedStyle(
            dragon, null).getPropertyValue('left'));

        dy = parseInt(window.getComputedStyle(
            dragon, null).getPropertyValue('bottom'));

        ox = parseInt(window.getComputedStyle(
            obstacle, null).getPropertyValue('left'));

        oy = parseInt(window.getComputedStyle(
            obstacle, null).getPropertyValue('bottom'));

        offsetx = Math.abs(dx - ox);
        offsety = Math.abs(dy - oy);

        console.log(offsetx, offsety);

        if (offsetx < 120 && offsety <= 144) {
            if (score != 0)
                scorecount.innerHTML = "Your score : " + score;
            gameover.style.visibility = 'visible';
            obstacle.classList.remove('animateobstacle');
        } else if (offsetx < 125 && cross) {
            score += 1;
            updateScore(score);
            cross = false;
            setTimeout(() => {
                cross = true;
            }, 1000);
            setInterval(() => {
                obsanidur = parseFloat(window
                .getComputedStyle(obstacle, null)
                .getPropertyValue('animation-duration'));

                obstacle.style.animationDuration
                    = obsanidur - 0.01 + 's';
            }, 500);
        }
    }, 10);

    function updateScore(score) {
        scorecount.innerHTML = "Your score : " + score;
    }
</script>

Reference: Dragon game

Output:


Design Dragon's World Game using HTML CSS and JavaScript


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4