2D Bubble Shooter Game
details
summary
A classic 2D Bubble Shooter game using HTML5 Canvas and JavaScript with minimal design.
prompt
Create a classic 2D game 'Bubble Shooter' as an interactive HTML page using HTML5 Canvas and JavaScript. The game should be fully functional with basic mechanics and a minimalist design. --- 1. Main Game Elements: - Game Field: - Canvas size 800x600 pixels. - Top of the screen: grid of bubbles in a checkerboard pattern. - Bottom of the screen: bubble shooter cannon. - Cannon: - Controlled with mouse or arrow keys (left/right) for aiming. - Display the current bubble in the cannon and the next bubble (preview). - Bubbles: - Minimum of 5 colors (e.g., red, blue, green, yellow, purple). - Bubbles stick to the grid or other bubbles when hit. --- 2. Basic Mechanics: - Shooting: - Click LMB or press SPACE to shoot a bubble. - The bubble travels in a straight line in the shooter direction. - When colliding with another bubble or border, the bubble sticks. - Matching and Popping: - If 3+ bubbles of the same color connect, they pop and the player scores points. - Chain reactions: unconnected bubbles fall down and get destroyed. - Losing Condition: - Game ends if the bubbles reach the bottom of the screen. --- 3. Visuals and Interface: - Style: - Minimalist design: bubbles are circles with gradient fill. - Bubble popping animation (e.g., size decrease with transparency effect). - UI: - Display score in the top corner of the screen. - 'Restart' button to restart the game. - Winning/losing message (e.g., 'You won!' or 'Game Over'). - Sounds: - Sound effects for shooting, popping bubbles, background music (optional). --- 4. Technical Requirements: - Use HTML5 Canvas for drawing game elements. - Implement bubble collision and sticking physics. - Optimize match checking (e.g., search neighboring bubbles recursively). - Save score in localStorage to display high score. --- Code Structure Example: HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Bubble Shooter</title> <style> body { margin: 0; overflow: hidden; } canvas { display: block; background: #87CEEB; } </style> </head> <body> <canvas id="gameCanvas" width="800" height="600"></canvas> <script src="game.js"></script> </body> </html> JavaScript (game.js): const canvas = document.getElementById('gameCanvas'); const ctx = canvas.getContext('2d'); // Main variables let bubbles = []; let currentBubble, nextBubble; let score = 0; // Game initialization function init() { createBubbleGrid(); spawnBubble(); gameLoop(); } // Create bubble grid function createBubbleGrid() { // Logic for creating initial grid } // Spawn new bubble function spawnBubble() { currentBubble = { x: 400, y: 550, color: getRandomColor() }; nextBubble = { color: getRandomColor() }; } // Main game loop function gameLoop() { ctx.clearRect(0, 0, canvas.width, canvas.height); drawBubbles(); drawCannon(); requestAnimationFrame(gameLoop); } // Draw bubbles function drawBubbles() { bubbles.forEach(bubble => { ctx.beginPath(); ctx.arc(bubble.x, bubble.y, 20, 0, Math.PI * 2); ctx.fillStyle = bubble.color; ctx.fill(); ctx.stroke(); }); } // Collision handling function checkCollisions() { // Collision and match-checking logic } // Start game init(); --- Outcome: A ready HTML page with the 'Bubble Shooter' game, where the player shoots bubbles to connect 3+ of the same color. The game features basic physics and a minimalist design.
original prompt
"Разработай классическую 2D-игру «Bubble Shooter» в виде интерактивной HTML-страницы с использованием HTML5 Canvas и JavaScript. Игра должна быть полностью функциональной, с базовой механикой и минималистичным дизайном. --- ### **1. Основные элементы игры:** - **Игровое поле:** - Холст (Canvas) размером 800x600 пикселей. - Верхняя часть экрана: сетка из пузырей, расположенных в шахматном порядке. - Нижняя часть экрана: пушка для стрельбы пузырями. - **Пушка:** - Управление мышью или стрелками клавиатуры (влево/вправо) для наведения. - Отображение текущего пузыря в пушке и следующего пузыря (предварительный просмотр). - **Пузыри:** - Минимум 5 цветов (например, красный, синий, зеленый, желтый, фиолетовый). - Пузыри прилипают к сетке или другим пузырям при попадании. --- ### **2. Основная механика:** - **Стрельба:** - Нажатие ЛКМ или SPACE для выстрела пузырем. - Пузырь летит по прямой траектории в направлении пушки. - При столкновении с другим пузырем или верхней границей пузырь прилипает. - **Совпадения и уничтожение:** - Если 3+ пузыря одного цвета соединяются, они лопаются, игрок получает очки. - Цепные реакции: пузыри, оставшиеся без опоры, падают вниз и уничтожаются. - **Условия поражения:** - Игра заканчивается, если пузыри достигают нижней границы экрана. --- ### **3. Визуал и интерфейс:** - **Стиль:** - Минималистичный дизайн: пузыри — это круги с градиентной заливкой. - Анимация лопания пузырей (например, уменьшение размера с эффектом прозрачности). - **UI:** - Отображение счета в верхнем углу экрана. - Кнопка «Рестарт» для перезапуска игры. - Сообщение о победе/поражении (например, «Вы выиграли!» или «Игра окончена»). - **Звуки:** - Звук выстрела, лопания пузырей, фоновой музыки (опционально). --- ### **4. Технические требования:** - Использовать HTML5 Canvas для отрисовки игровых элементов. - Реализовать физику столкновений и прилипания пузырей. - Оптимизировать проверку совпадений (например, поиск соседних пузырей через рекурсию). - Сохранение счета в localStorage для отображения лучшего результата. --- ### **Пример структуры кода:** **HTML:** ```htmlBubble Shooter ``` **JavaScript (game.js):** ```javascript const canvas = document.getElementById('gameCanvas'); const ctx = canvas.getContext('2d'); // Основные переменные let bubbles = []; let currentBubble, nextBubble; let score = 0; // Инициализация игры function init() { createBubbleGrid(); spawnBubble(); gameLoop(); } // Создание сетки пузырей function createBubbleGrid() { // Логика создания начальной сетки } // Спавн нового пузыря function spawnBubble() { currentBubble = { x: 400, y: 550, color: getRandomColor() }; nextBubble = { color: getRandomColor() }; } // Основной игровой цикл function gameLoop() { ctx.clearRect(0, 0, canvas.width, canvas.height); drawBubbles(); drawCannon(); requestAnimationFrame(gameLoop); } // Отрисовка пузырей function drawBubbles() { bubbles.forEach(bubble => { ctx.beginPath(); ctx.arc(bubble.x, bubble.y, 20, 0, Math.PI * 2); ctx.fillStyle = bubble.color; ctx.fill(); ctx.stroke(); }); } // Обработка столкновений function checkCollisions() { // Логика проверки столкновений и совпадений } // Запуск игры init(); ``` --- ### **Результат:** Готовая HTML-страница с игрой «Bubble Shooter», где игрок стреляет пузырями, собирая группы из 3+ одинаковых цветов. Игра должна быть интерактивной, с базовой физикой и минималистичным дизайном. Q: Как должен управляться игровой процесс? A: Управление мышью или стрелками клавиатуры (влево/вправо) для наведения Q: Как именно должны двигаться пузыри? A: Пузырь летит по прямой траектории в направлении пушки. При столкновении с другим пузырем или верхней границей пузырь прилипает. Q: Какую информацию должен отображать интерфейс? A: Отображение счета в верхнем углу экрана. Кнопка «Рестарт» для перезапуска игры. Сообщение о победе/поражении (например, «Вы выиграли!» или «Игра окончена»)
generation cost summary
model name: claude-3-7-sonnet-latest
response time: 251.13 sec.
result tokens: 15,298
cost: $0.23474400