How to make a brick breaker using html and javascript
A classic game! Here's a step-by-step guide on how to create a Brick Breaker game using HTML, CSS, and JavaScript:
HTML Structure
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Brick Breaker</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<canvas id="gameCanvas" width="400" height="600"></canvas>
<script src="script.js"></script>
</body>
</html>
CSS Styles (in style.css file)
body {
background-color: #f0f0f0;
}
#gameCanvas {
border: 1px solid #000;
}
JavaScript Code (in script.js file)
// Get the canvas element
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
// Set the canvas dimensions
canvas.width = 400;
canvas.height = 600;
// Initialize game variables
let paddleX = canvas.width / 2;
let paddleY = canvas.height - 20;
let paddleWidth = 100;
let paddleHeight = 20;
let ballX = canvas.width / 2;
let ballY = canvas.height / 2;
let ballRadius = 10;
let ballSpeedX = 5;
let ballSpeedY = 5;
let bricks = [];
let score = 0;
// Create the bricks
for (let i = 0; i < 5; i++) {
bricks.push([]);
for (let j = 0; j < 10; j++) {
bricks[i].push({ x: j * 40, y: i * 20, width: 40, height: 20 });
}
}
// Draw the game
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = '#000';
ctx.fillRect(paddleX, paddleY, paddleWidth, paddleHeight);
ctx.fillStyle = '#fff';
ctx.beginPath();
ctx.arc(ballX, ballY, ballRadius, 0, 2 * Math.PI);
ctx.fill();
for (let i = 0; i < bricks.length; i++) {
for (let j = 0; j < bricks[i].length; j++) {
const brick = bricks[i][j];
ctx.fillStyle = '#fff';
ctx.fillRect(brick.x, brick.y, brick.width, brick.height);
}
}
ctx.fillStyle = '#000';
ctx.font = '24px Arial';
ctx.textAlign = 'left';
ctx.textBaseline = 'top';
ctx.fillText(`Score: ${score}`, 10, 10);
}
// Update the game
function update() {
// Move the ball
ballX += ballSpeedX;
ballY += ballSpeedY;
// Check for collisions with the paddle
if (ballY + ballRadius > paddleY && ballY + ballRadius < paddleY + paddleHeight) {
if (ballX + ballRadius > paddleX && ballX + ballRadius < paddleX + paddleWidth) {
ballSpeedY = -ballSpeedY;
}
}
// Check for collisions with the bricks
for (let i = 0; i < bricks.length; i++) {
for (let j = 0; j < bricks[i].length; j++) {
const brick = bricks[i][j];
if (ballX + ballRadius > brick.x && ballX + ballRadius < brick.x + brick.width) {
if (ballY + ballRadius > brick.y && ballY + ballRadius < brick.y + brick.height) {
ballSpeedY = -ballSpeedY;
bricks[i][j] = null;
score++;
}
}
}
}
// Check for collisions with the edges
if (ballX + ballRadius > canvas.width || ballX + ballRadius < 0) {
ballSpeedX = -ballSpeedX;
}
if (ballY + ballRadius > canvas.height) {
ballSpeedY = -ballSpeedY;
}
// Check for game over
if (ballY + ballRadius > canvas.height) {
alert(`Game Over! Your score is ${score}`);
location.reload();
}
}
// Handle user input
document.addEventListener('keydown', (event) => {
if (event.key === 'ArrowLeft') {
paddleX -= 10;
} else if (event.key === 'ArrowRight') {
paddleX += 10;
}
});
// Main game loop
setInterval(() => {
update();
draw();
}, 16); // 16ms = 60fps
How it works
- The game is rendered on a
<canvas>
element using the 2D drawing context. - The game initializes with a paddle, a ball, and a set of bricks.
- The game updates and draws the game state every 16ms (60fps).
- The user can control the paddle using the arrow keys.
- The ball bounces off the paddle and bricks, and the score increases when a brick is hit.
- The game ends when the ball hits the bottom of the screen, and the user is alerted with their final score.
Note: This is a basic implementation, and you can improve it by adding features like sound effects, smoother animations, and more challenging levels.
I hope this helps you create a Brick Breaker game using HTML, CSS, and JavaScript!