Create a Car Racing Game using HTML, CSS & JS with source code

Are you a gaming lover who wants to make his own car racing game? If so, you have come to the right place! In this blog, we will show you how to create a simple and fun full car racing game in HTML CSS and Javascript. After going through this tutorial, you should have enough knowledge to build an interactive web-based game, which you can share with friends and family.

Let’s get started!

Step 01: Create HTML File

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Game</title>
<link href="https://fonts.googleapis.com/css2?family=Lobster&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="game">
<div class="score"></div>
<div class="highScore"></div>
<div class="startScreen">
<p class="ClickToStart">🚗 START GAME 🚗<br><br></p>
<p> <strong>INSTRUCTIONS:</strong> <br>
Use Arrow keys to move the car <br>
If you hit any car then game will end</p>
</div>
<div class="gameArea"></div>
</div>
<script src="script.js"></script>
</body>
</html>

Step 02: Add CSS

* {
    margin: 0;
    padding: 0;
    font-family: Georgia, 'Times New Roman', Times, serif;
    }
    .game{
    background-image: url(https://i.postimg.cc/638cb21D/bg.jpg);
    background-repeat: no-repeat;
    background-size: 100% 100%;
    }
    .hide {
    display: none;
    }
    .startScreen {
    width: 500px;
    height: 107px;
    line-height: 20px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 2;
    margin: auto;
    background-color: rgb(162, 226, 43);
    text-align: center;
    border-bottom: 2px solid rgb(132, 197, 197);
    }
    .score,
    .highScore {
    position: absolute;
    top: 10px;
    left: 20px;
    text-align: center;
    background-color: rgb(100, 209, 224);
    width: 200px;
    color: rgb(59, 40, 40);
    line-height: 40px;
    border-radius: 4px;
    font-size: 1.2em;
    }
    .ClickToStart {
    cursor: pointer;
    font-family: roboto;
    font-weight: 600;
    }
    .ClickToStart:hover{
        color: red;    
    }
    .gameArea {
    height: 100vh;
    width: 400px;
    margin: auto;
    position: relative;
    background-color: rgb(32, 32, 32);
    overflow: hidden;
    border-left: 4px dashed rgb(165, 4, 4);
    border-right: 4px dashed rgb(165, 4, 4);
    }
    .car{
    background: url(https://i.postimg.cc/Dzj5cd5r/car.png);
    background-repeat: no-repeat;
    background-size: 100% 100%;
    height: 70px;
    width: 40px;
    position: absolute;
    top: 520px;
    }
    .Opponents {
    background: url(https://i.postimg.cc/yNYv9rh6/opponentcar.png);
    background-repeat: no-repeat;
    background-size: 100% 100%;
    height: 75px;
    width: 35px;
    position: absolute;
    top: 520px;
    border-radius: 20px;
    }
    .roadLines {
    height: 100px;
    width: 10px;
    background-color: rgb(42, 148, 56);
    position: absolute;
    margin-left: 195px;
    }

Step 03: Add JavaScript

const score = document.querySelector('.score');
const highScore = document.querySelector('.highScore');
const startScreen = document.querySelector('.startScreen');
const gameArea = document.querySelector('.gameArea');
const ClickToStart = document.querySelector('.ClickToStart');
ClickToStart.addEventListener('click', Start);
document.addEventListener('keydown', keydown);
document.addEventListener('keyup', keyup);
let keys = {
ArrowUp: false,
ArrowDown: false,
ArrowLeft: false,
ArrowRight: false,
}
let player = {
speed: 5,
score: 0,
highScore: 0
};
function keydown(e) {
keys[e.key] = true
}
function keyup(e) {
keys[e.key] = false;
}
function Start() {
gameArea.innerHTML = "";
startScreen.classList.add('hide');
player.isStart = true;
player.score = 0;
window.requestAnimationFrame(Play);
for (i = 0; i < 5; i++) {
let roadLines = document.createElement('div');
roadLines.setAttribute('class', 'roadLines');
roadLines.y = (i * 140);
roadLines.style.top = roadLines.y + "px";
gameArea.appendChild(roadLines);
}
for (i = 0; i < 3; i++) {
let Opponents = document.createElement('div');
Opponents.setAttribute('class', 'Opponents');
Opponents.y = ((i) * -300);
Opponents.style.top = Opponents.y + "px";
gameArea.appendChild(Opponents);
Opponents.style.left = Math.floor(Math.random() * 350) + "px";
Opponents.style.backgroundColor=randomColor();
}
let car = document.createElement('div');
car.setAttribute('class', 'car');
gameArea.appendChild(car);
player.x = car.offsetLeft;
player.y = car.offsetTop;
}
function randomColor(){
function c(){
let hex=Math.floor(Math.random()*256).toString(16);
return ("0"+String(hex)).substr(-2);
}
return "#"+c()+c()+c();
}
function Play() {
let car = document.querySelector('.car');
let road = gameArea.getBoundingClientRect();
if (player.isStart) {
moveLines();
moveOpponents(car);
if (keys.ArrowUp && player.y > (road.top + 70)) { player.y -= player.speed }
if (keys.ArrowDown && player.y < (road.height - 75)) { player.y += player.speed }
if (keys.ArrowRight && player.x < 350) { player.x += player.speed }
if (keys.ArrowLeft && player.x > 0) { player.x -= player.speed }
car.style.top = player.y + "px";
car.style.left = player.x + "px";
highScore.innerHTML = "HighScore" + ":" + (player.highScore - 1);
player.score++;
player.speed += 0.01;
if (player.highScore < player.score) {
player.highScore++;
highScore.innerHTML = "HighScore" + ":" + (player.highScore - 1);
highScore.style.top="80px";
}
score.innerHTML = "Score" + ":" + (player.score - 1);
window.requestAnimationFrame(Play);
}
}
function moveLines() {
let roadLines = document.querySelectorAll('.roadLines');
roadLines.forEach(function (item) {
if (item.y >= 700)
item.y -= 700;
item.y += player.speed;
item.style.top = item.y + "px";
})
}
function moveOpponents(car) {
let Opponents = document.querySelectorAll('.Opponents');
Opponents.forEach(function (item) {
if (isCollide(car, item)) {
endGame();
}
if (item.y >= 750) {
item.y -= 900;
item.style.left = Math.floor(Math.random() * 350) + "px";
}
item.y += player.speed;
item.style.top = item.y + "px";
})
}
function isCollide(a, b) {
aRect = a.getBoundingClientRect();
bRect = b.getBoundingClientRect();
return !((aRect.top > bRect.bottom) || (aRect.bottom < bRect.top) || (aRect.right < bRect.left) || (aRect.left > bRect.right))
}
function endGame() {
player.isStart = false;
player.speed = 5;
startScreen.classList.remove('hide');
}

OutPut :-

car-racing-game-codejuster

Download Ebooks – Click Me

Download Notes – Click Me

All Govt. Exam Notes/Books – Click Me

Leave a Comment

Your email address will not be published. Required fields are marked *