In this blog post, I shared the source code of the Javascript Catching game using js and Jquery. just follow the steps.
First, create an index.html page
<!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>Chicken Eggs Catcher</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
</head>
<body>
<div id="container">
<div id="score_help"> Score:
<span id="score">0</span> | Life:
<span id="life"></span> | Use mouse to control
</div>
<div id="branch"></div>
<div id="hen1" class="hen"></div>
<div id="hen2" class="hen"></div>
<div id="hen3" class="hen"></div>
<div id="egg1" class="egg" data-bullseye='1'></div>
<div id="egg2" class="egg" data-bullseye='2'></div>
<div id="egg3" class="egg" data-bullseye='3'></div>
<div id="bullseye1" class="bullseye"></div>
<div id="bullseye2" class="bullseye"></div>
<div id="bullseye3" class="bullseye"></div>
<div id="basket">
<span id="score_1"></span>
</div>
<div id="floor"></div>
<button id="restart">Restart</button>
</div>
</body>
</html>
put some styles
style.css
html,
body {
width: 100%;
height: 100%;
margin: 0;
font-family: sans-serif;
}
#container {
height: 90%;
width: 90%;
margin-left: 5%;
position: relative;
border: 1px solid red;
overflow: hidden;
background-color: #31b6ce;
}
#score_help {
text-align: center;
font-size: 25px;
background-color: #eaeaea;
}
#branch {
position: absolute;
height: 2%;
width: 100%;
background-color: #7b2e00;
top: 23%;
}
.hen {
position: absolute;
height: 15%;
width: 8%;
top: 10%;
background: url("https://raw.githubusercontent.com/arshadasgar/arshadasgar.github.io/master/eggs/hen-right.png");
background-size: cover;
background-repeat: no-repeat;
z-index: 100;
}
#hen1 {
left: 20%;
}
#hen2 {
left: 40%;
}
#hen3 {
left: 60%;
}
.egg {
position: absolute;
top: 18%;
height: 5%;
width: 2%;
background-color: #fff;
border-radius: 50%;
z-index: 99;
}
#egg1 {
left: calc(20% + 8%/2 - 2%/2);
}
#egg2 {
left: calc(40% + 8%/2 - 2%/2);
}
#egg3 {
left: calc(60% + 8%/2 - 2%/2);
}
.bullseye {
display: none;
position: absolute;
bottom: 0px;
height: 7%;
width: 7%;
background: url("https://raw.githubusercontent.com/arshadasgar/arshadasgar.github.io/master/eggs/bullseye1.png");
background-size: cover;
background-repeat: no-repeat;
z-index: 11;
}
#bullseye1 {
left: calc(20% + 8%/2 - 7%/2);
}
#bullseye2 {
left: calc(40% + 8%/2 - 7%/2);
}
#bullseye3 {
left: calc(60% + 8%/2 - 7%/2);
}
#floor {
position: absolute;
height: 7%;
width: 100%;
background-color: #292929;
bottom: 0;
z-index: 10;
}
#basket {
height: 100px;
width: 85px;
position: absolute;
bottom: 5px;
background: url("https://raw.githubusercontent.com/arshadasgar/arshadasgar.github.io/master/eggs/basket.png");
background-size: cover;
background-repeat: no-repeat;
text-align: center;
z-index: 11;
}
#score_1 {
position: absolute;
color: #424242;
font-size: 30px;
top: 45%;
left: 30%;
}
#restart {
border: 0;
position: absolute;
height: 10%;
width: 100%;
background-color: fuchsia;
color: white;
top: 40%;
font-size: 35px;
display: none;
cursor: pointer;
}
script.js
/***** Variables part *****/
var basket = $("#basket"),
container = $("#container"),
hen = $(".hen"),
eggs = $(".egg"),
egg1 = $("#egg1"),
egg2 = $("#egg2"),
egg3 = $("#egg3"),
restart = $("#restart"),
score_span = $("#score"),
score_1 = $("#score_1"),
life_span = $("#life"),
floor = $("#floor"),
basket_height = basket.height(),
container_height = container.height(),
egg_height = eggs.height(),
egg_initial_position = parseInt(eggs.css("top")),
score = 0,
life = 5,
speed = 2,
max_speed = 15,
counter = 0,
score_updated = false,
the_game = 0,
anim_id = 0,
egg_current_position = 0,
egg_top = 0,
basket_top = container_height - basket_height,
bullseye_num = 0;
life_span.text(life);
/*****Script Part*****/
$(function() {
the_game = function() {
if (check_egg_hits_floor(egg1) || check_egg_hits_basket(egg1)) {
set_egg_to_initial_position(egg1);
} else {
egg_down(egg1);
}
if (check_egg_hits_floor(egg2) || check_egg_hits_basket(egg2)) {
set_egg_to_initial_position(egg2);
} else {
egg_down(egg2);
}
if (check_egg_hits_floor(egg3) || check_egg_hits_basket(egg3)) {
set_egg_to_initial_position(egg3);
} else {
egg_down(egg3);
}
if (life > 0) {
anim_id = requestAnimationFrame(the_game);
} else {
stop_the_game();
}
};
anim_id = requestAnimationFrame(the_game);
});
/*****Functions Part*****/
$(document).on("mousemove", function(e) {
basket.css("left", e.pageX);
});
function egg_down(egg) {
egg_current_position = parseInt(egg.css("top"));
egg.css("top", egg_current_position + speed);
}
function check_egg_hits_floor(egg) {
if (collision(egg, floor)) {
show_bulls_eye(egg);
decrement_life();
return true;
}
return false;
}
function set_egg_to_initial_position(egg) {
egg.css("top", egg_initial_position);
}
function show_bulls_eye(egg) {
bullseye_num = egg.attr("data-bullseye");
$("#bullseye" + bullseye_num).show();
hide_bulls_eye(bullseye_num);
}
function hide_bulls_eye(bullseye_num) {
setTimeout(function() {
$("#bullseye" + bullseye_num).hide();
}, 800);
}
function decrement_life() {
life--;
life_span.text(life);
}
function check_egg_hits_basket(egg) {
if (collision(egg, basket)) {
egg_top = parseInt(egg.css("top"));
if (egg_top < basket_top) {
update_score();
return true;
}
}
return false;
}
function update_score() {
score++;
if (score % 10 === 0 && speed <= max_speed) {
speed++;
}
score_span.text(score);
score_1.text(score);
}
function stop_the_game() {
cancelAnimationFrame(anim_id);
restart.slideDown();
}
restart.click(function() {
location.reload();
});
/*****collision_detection part*****/
function collision($div1, $div2) {
var x1 = $div1.offset().left;
var y1 = $div1.offset().top;
var h1 = $div1.outerHeight(true);
var w1 = $div1.outerWidth(true);
var b1 = y1 + h1;
var r1 = x1 + w1;
var x2 = $div2.offset().left;
var y2 = $div2.offset().top;
var h2 = $div2.outerHeight(true);
var w2 = $div2.outerWidth(true);
var b2 = y2 + h2;
var r2 = x2 + w2;
if (b1 < y2 || y1 > b2 || r1 < x2 || x1 > r2) return false;
return true;
}

Brijpal Sharma is a web developer with a passion for writing tech tutorials. Learn JavaScript and other web development technology.