Bubble game source code html javascript css 2024-25

Bubble Shooter is a classic arcade game where players aim and shoot colored bubbles to form groups of three or more, causing them to pop and clear the board. The objective is to clear all bubbles before they reach the bottom of the screen. Developing this game will deepen your understanding of web technologies and game logic.

Setting Up the Development Environment

To begin, create a project directory and set up the following files:

  • index.html: The main HTML file.
  • styles.css: The CSS file for styling.
  • script.js: The JavaScript file for game logic.

Ensure you have a code editor (such as Visual Studio Code) and a modern web browser for testing.

Designing the Game Interface with HTML and CSS

HTML Structure (index.html):

htmlCopy code<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bubble Shooter Game</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <canvas id="gameCanvas" width="800" height="600"></canvas>
    <script src="script.js"></script>
</body>
</html>

This HTML file sets up a canvas element where the game will be rendered.

CSS Styling (styles.css):

cssCopy codebody {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
    background-color: #f0f0f0;
}

canvas {
    border: 2px solid #000;
    background-color: #000;
}

The CSS centers the canvas on the page and provides a background color.

Implementing Game Mechanics with JavaScript

JavaScript Logic (script.js):

javascriptCopy codeconst canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');

const bubbleRadius = 20;
const colors = ['red', 'green', 'blue', 'yellow', 'purple'];
let bubbles = [];
let shooterAngle = 0;
let currentBubble = createBubble(canvas.width / 2, canvas.height - bubbleRadius, getRandomColor());

function createBubble(x, y, color) {
    return { x, y, color, radius: bubbleRadius };
}

function getRandomColor() {
    return colors[Math.floor(Math.random() * colors.length)];
}

function drawBubble(bubble) {
    ctx.beginPath();
    ctx.arc(bubble.x, bubble.y, bubble.radius, 0, Math.PI * 2);
    ctx.fillStyle = bubble.color;
    ctx.fill();
    ctx.closePath();
}

function drawShooter() {
    ctx.save();
    ctx.translate(canvas.width / 2, canvas.height);
    ctx.rotate(shooterAngle);
    ctx.beginPath();
    ctx.moveTo(0, 0);
    ctx.lineTo(0, -50);
    ctx.strokeStyle = '#fff';
    ctx.lineWidth = 5;
    ctx.stroke();
    ctx.closePath();
    ctx.restore();
}

function draw() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    drawShooter();
    drawBubble(currentBubble);
    bubbles.forEach(drawBubble);
}

function update() {
    // Game logic will be implemented here
}

function gameLoop() {
    draw();
    update();
    requestAnimationFrame(gameLoop);
}

canvas.addEventListener('mousemove', (event) => {
    const rect = canvas.getBoundingClientRect();
    const mouseX = event.clientX - rect.left;
    shooterAngle = Math.atan2(mouseX - canvas.width / 2, canvas.height - event.clientY);
});

canvas.addEventListener('click', () => {
    // Shooting logic will be implemented here
});

gameLoop();

This script sets up the game loop, draws the shooter, and handles mouse movement to aim.

Enhancing Gameplay with Animations and Effects

To make the game more engaging, add animations for bubble movement and popping effects. You can use CSS animations or JavaScript’s requestAnimationFrame for smooth rendering.

Example: Animating Bubble Movement

javascriptCopy codelet isShooting = false;
let shotBubble = null;
let shotVelocity = { x: 0, y: 0 };

canvas.addEventListener('click', () => {
    if (!isShooting) {
        isShooting = true;
        shotBubble = { ...currentBubble };
        shotVelocity = {
            x: Math.sin(shooterAngle) * 5,
            y: -Math.cos(shooterAngle) * 5
        };
        currentBubble = createBubble(canvas.width / 2, canvas.height - bubbleRadius, getRandomColor());
    }
});

function update() {
    if (isShooting) {
        shotBubble.x += shotVelocity.x;
        shotBubble.y += shotVelocity.y;

        // Check for collisions with walls
        if (shotBubble.x - bubbleRadius < 0 || shotBubble.x + bubbleRadius > canvas.width) {
            shotVelocity.x = -shotVelocity.x;
        }

        // Check for collisions with ceiling
        if (shotBubble.y - bubbleRadius < 0) {
            isShooting = false;
            bubbles.push(shotBubble);
            shotBubble = null;
        }

        // Check for collisions with other bubbles
        for (let bubble of bubbles) {
            const dx = bubble.x - shotBubble.x;
            const dy = bubble.y - shotBubble.y;
            const distance = Math.sqrt(dx * dx + dy * dy);
            if (distance < bubbleRadius * 2) {
                isShooting = false;
                bubbles.push(shotBubble);
                shotBubble = null;
                break;
            }
        }
    }
}

This code handles shooting bubbles, detecting collisions with walls, the ceiling, and other bubbles, and adding the shot bubble to the array of stationary bubbles when it stops moving.

Testing and Debugging

Regularly test your game to ensure all features work as intended. Use browser developer tools to debug issues, inspect elements, and monitor console outputs. Pay attention to edge cases, such as bubbles overlapping or incorrect collision detection.

Conclusion

Building a Bubble Shooter game with HTML, CSS, and JavaScript is a fantastic way to enhance your coding skills and create an interactive project. By implementing features such as shooting mechanics, collision detection, and animations, you’ve developed a game that is not only functional but also fun to play. With further improvements, such as adding sound effects, levels, or power-ups, you can create an even more engaging experience for players.

This project is an excellent demonstration of how web technologies can be used to build games, providing a strong foundation for exploring more advanced game development concepts in the future.

Frequently Asked Questions (FAQ)

Q1. How do I add sound effects to the game?
To add sound effects, you can use the <audio> element in HTML or JavaScript’s Audio API. For example:

javascriptCopy codeconst popSound = new Audio('pop.mp3');
popSound.play();

Play the sound effect when a bubble pops or the shooter fires a bubble.

Q2. How can I make the game mobile-friendly?
Use responsive design techniques, such as CSS media queries, to adjust the canvas size for smaller screens. Additionally, replace mouse-based controls with touch-based controls to enhance gameplay on mobile devices.

Q3. Can I save the player’s progress?
Yes, you can use the localStorage API to save the game state (e.g., the positions of bubbles, score, and current level) and reload it when the player returns.

Q4. How do I implement levels in the game?
You can create levels by changing the arrangement and number of bubbles at the start of each level. Increase the difficulty by adding new colors, reducing the number of moves, or speeding up the game as levels progress.

Q5. Can I use a framework or library for this project?
Absolutely. Frameworks like Phaser.js or libraries like p5.js can simplify game development by providing prebuilt functionalities for rendering, physics, and animations.

Q6. How do I handle performance issues if the game becomes slow?
Optimize your code by minimizing the number of draw calls, using efficient algorithms for collision detection, and clearing the canvas only as necessary. You can also implement techniques like off-screen rendering or batch rendering for better performance.

Q7. How can I customize the game further?
Some customization ideas include:

  • Adding power-ups like bombs to clear multiple bubbles.
  • Incorporating themes and backgrounds for visual appeal.
  • Allowing players to choose bubble colors or shooter styles.

Q8. Is this game suitable for multiplayer functionality?
Yes, you can extend the game for multiplayer by using WebSockets or APIs like Firebase for real-time communication. Players can take turns or compete simultaneously.

Also Read

How to create a website using html on notepad 2024-25

Leave a Comment

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

Scroll to Top