In this article, we will create a covid fighter game using HTML, CSS, and JavaScript. In this game, we will create three objects the first object will represent the user which have to cross several hurdles to reach the final object.
Approach: We will create the HTML layout first, style it using CSS, and then write the logic in JavaScript. In our game, the first object represents the earth, the second represents the coronavirus, and the third represents the vaccine.
HTML code: We will use HTML to design the web page structure or layout. Create HTML canvas with id “mycanvas”. Include the JavaScript file “covid.js” in the HTML code.
<!DOCTYPE html> < html >
< body >
< h1 >COVID-19 Fighter Game</ h1 >
< canvas id = "mycanvas" ></ canvas >
< script src = "covid.js" ></ script >
</ body >
</ html >
|
CSS code: CSS is used to give general styling and make it more visually appealing. Give general styling to the whole page like color, alignment, and background color. We use flex to center canvas and set the background image to the background of our game. Include the following in the above HTML code in the style section of head part of the code.
body { text-align: center; color: #ffff; background: #000; } #mycanvas{ display: flex; align-items: center; justify-content: center; background-image: url(Assets/bg.gif) background-size: cover; }
Output: The result of the HTML layout and CSS styling looks like the following.
The resultant output does not look like the desired output but we will adjust canvas height and width using JavaScript.
Logic: The main logic part is implemented using JavaScript.
- According to our logic when the earth object collides with the coronavirus (the second object ) we will decrease the health of the player by 50 points.
- The initial health of the player will be 100.
- When the health of the player will be <= 0 our game will get over.
- When the player will reach the third object player wins.
- Our game is basically divided into basic six functions.
function load_assets(){ } function init(){ } function isOverlap(rect1, rect2){ } function draw(){ } function update(){ } function gameloop(){ }
Step 1:
- Initially, we will load all the required assets. We will require one enemy, one player, winning sound, losing sound and a third object which is vaccine.
- We will create the function load_assets() which will load all the required assets.
function load_assets(){
// Enemy object
enemy_img = new Image();
enemy_img.src = "Assets/enemy.png" ;
// Main user
player_img = new Image();
player_img.src = "Assets/fighter.png" ;
// Vaccine
gem_img = new Image;
gem_img.src = "Assets/vac.gif" ;
// Winning sound
win = new Audio();
win.src = "Audio/won.wav" ;
// Losing sound
lose = new Audio();
lose.src = "Audio/dead.mp3" ;
} |
Step 2:
- In this step, we will initialize our state of the game. We will set the height and width of the canvas.
- We will also set the number of second objects. We will create five enemies by setting their general position, speed,height and width.
- We will also create the player object with properties like position, height, width, speed health, and moving state.
- Create a gem object which will represent the final state of our game with properties like height, width and positions.
- At the end, add the event listener with mousedown and mouseup events to move the player and stop the player.
- We are ready with the initial setup. Let us look at the output below.
function init(){
cvs = document.getElementById( 'mycanvas' );
// Setting the height and width of canvas
W = cvs.width = 1252;
H = cvs.height = 516;
// Getting the context of canvas
pen = cvs.getContext( '2d' );
// Initially setting the variable to false
game_over = false ;
// Creating the enemies object with
// coordinates x y width(w) height(h)
// and speed
e1 = {
x:200,
y:50,
w:80,
h:80,
speed:20,
};
e2 = {
x:450,
y:150,
w:80,
h:80,
speed:35,
};
e3 = {
x:700,
y:300,
w:80,
h:80,
speed:40,
};
e4 = {
x:900,
y:100,
w:80,
h:80,
speed:30,
};
// Array of enemies
enemy = [e1, e2, e3, e4];
// Creating the player object
player = {
x:20,
y:H/2,
w:110,
h:110,
speed:30,
health:100,
moving: "false"
}
// Creating the vaccine gem
gem = {
x:W-150,
y:H/2,
w:150,
h:150,
}
// The main part lets move the player
// using event mouse down and stop
//using mouse up
cvs.addEventListener( 'mousedown' , function (){
console.log( "Mouse Pressed" );
player.moving = true ;
});
cvs.addEventListener( 'mouseup' , function (){
console.log( "Mouse Released" );
player.moving = false ;
});
} |
Output:
Step 3:
- In this step, we will see the overlap function which we will use to check if our player is colliding with some other object may be an enemy or a gem(vaccine).
function isOverlap(rect1, rect2) {
if (rect1.x < rect2.x + rect2.w &&
rect1.x + rect1.w > rect2.x &&
rect1.y < rect2.y + rect2.h &&
rect1.y + rect1.h > rect2.y) {
return true ;
}
return false ;
} |
Step 4:
- We will see the draw() function which will help in drawing graphical images of the enemy player and gem in their respective position.
function draw() {
// Drawing the images
for (let i = 0; i < enemy.length; i++) {
pen.drawImage(enemy_img, enemy[i].x,
enemy[i].y, enemy[i].w, enemy[i].h);
}
// Draw the player
pen.drawImage(player_img, player.x,
player.y, player.w, player.h);
// Draw the vaccine
pen.drawImage(gem_img, gem.x,
gem.y, gem.w, gem.h);
// Displaying score
pen.fillStyle = "white" ;
pen.font = "30px Roboto" ;
pen.fillText( "Score " +
player.health, 30, 30);
} |
Step 5:
- The following implements the update() function.
- It returns when the game is over.
- If the player is still moving, it will increase the player’s speed and health.
- If our player is colliding with any of the enemies, it will play the losing sound and decrease the health by 50 points.
- If health goes negative or 0, the game is over and it returns.
- If the game is still not over we will see if our player is colliding with the vaccine(gem). In this case the game is over which plays the winning sound, and alert the score.
- If the game is still not over, it will adjust the speed and positions of the enemy.
function update() {
// If player is moving
if (game_over){
return ;
}
if (player.moving == true ){
player.x += player.speed;
player.health += 20;
}
// Checking collision of player
// with all enemies
for (let i = 0; i < enemy.length; i++){
if (isOverlap(enemy[i], player)){
lose.play();
player.health -= 50;
if (player.health < 0){
draw();
lose.play();
alert( "You Lose " );
game_over = true ;
return ;
}
}
}
// checking the player and vaccine
// collision for the win.
if (isOverlap(player, gem)){
win.play();
alert( "You Won " + player.health);
game_over = true ;
return ;
}
// Adjusting the speed and positions
// of enemy
for (let i = 0; i<enemy.length; i++){
enemy[i].y += enemy[i].speed;
if (enemy[i].y > H-enemy[i].h || enemy[i].y <= 0){
enemy[i].speed *= -1;
}
}
} |
Step 6:
- Let us complete the gameloop() function which we will use to run the game.
- If the state of the game is over, it will clear the whole interval which we are calling in the end.
- We will draw the object and update the things according to the user’s action.
function gameloop(){
if (game_over){
clearInterval(f);
}
draw();
update();
} |
Step 7:
- Note: We call all the functions together in the JavaScript file “covid.js”.
- First, we will call the load_assets() and init() function.
- We will call the gameloop() function in an interval of every 100ms.
load_assets(); init(); var f = setInterval(gameloop, 100);
|
Output:
Source Code:
https://github.com/Nandini-72/Covid_Fighter_Game