Pop How to Make Bubble Shooter (Browser Match Pop 2026)

By Arron R.11 min read
How to make bubble shooter in 2026: model hex-grid snap and match-three pop logic, wire aim and floating-bubble drops in WizardGenie, then add Quick Sprites col

Most beginners who search “how to make bubble shooter” want a hex grid of colored bubbles at the top, a cannon at the bottom that follows the mouse angle, a snap-and-match pop when three or more neighbors share a color, and floating clusters that drop when their ceiling anchor disappears. A full Puzzle Bobble arcade cabinet with power bubbles, boss rows, and two-player versus is a studio product. A browser match pop loop is different. A coding agent scaffolds grid snap and flood-fill pop from one prompt, and AI generation covers the bubble sprites, pop stingers, and arcade music bed. On desktop or web, that means WizardGenie for the aim-and-snap interpreter, Quick Sprites for the colored bubble art, SFX Gen for launch and pop audio, and Music Gen for a light arcade loop. This guide is the honest end-to-end for how to make bubble shooter in 2026, as a weekend build you can finish once.

How to make bubble shooter browser pipeline: generate colored bubbles in Quick Sprites, wire aim snap and match-three pop in WizardGenie, and ship a browser match pop loop
The 2026 how to make bubble shooter recipe: color bubbles in Quick Sprites, model aim snap and match-three pop in WizardGenie, then add SFX Gen pops and Music Gen arcade audio.

What how to make bubble shooter actually means in 2026

The query “how to make bubble shooter” hides three intents. Some searchers want a Unity or Godot template with physics joints and particle systems — that is engine shopping, not a minimal playable loop. A second intent is a franchise-scale puzzle bobble clone with rainbow bubbles, laser power-ups, and fifty level maps — a multi-month roadmap, not a solo jam. The third intent, and the one this guide targets, is a browser match pop loop: one staggered hex grid of colored bubbles, a shooter that rotates toward the pointer, wall-bounce aim preview, snap on collision, match-three-or-more flood fill, and floating clusters that fall when disconnected from the top row. That is a weekend build, it demos the Sorceress toolset, and it is the format most bubble shooter tutorial and javascript bubble shooter searchers actually want.

The presentation contract is small and strict. A title screen shows the game name, optional Continue if localStorage stores a high score, and Play. The play screen shows the bubble grid, the shooter with current and next bubble preview, a dashed aim line, score in the corner, a mute toggle, and a visible danger line three rows above the shooter. On pop, play a burst sting and tween popped bubbles smaller. On floating clusters, animate them falling off-screen. On danger-line breach after a cascade, show Game Over with Retry. On zero bubbles remaining, show Level Clear with final score and Play Again. The Puzzle Bobble overview on Wikipedia (verified 2026-08-27) traces the genre from Taito’s 1994 arcade hit through mobile clones — cite it when you write your itch.io blurb so players know which promise you kept. If you already shipped a swap-grid match game, the sibling guide on how to make a match 3 game covers gem swaps and gravity cascades on a flat grid; this post owns aim angles and hex snap instead.

The bubble shooter loop in one minute (aim, shoot, snap, pop, drop)

Five moving parts, repeated every shot until the player wins or loses. First, aim — rotate the shooter toward the mouse or touch position and draw a preview line that reflects once off the left and right walls. Second, shoot — launch the current bubble along that angle at a fixed speed until it hits a wall or an existing bubble. Third, snap — find the nearest empty hex cell adjacent to the collision point and insert the bubble into the grid. Fourth, pop — flood-fill same-color neighbors from the snap cell; if the cluster count is three or more, remove those bubbles and add score. Fifth, drop — run a reachability pass from the top row; any bubble not connected to the ceiling falls and awards bonus points. Swap the current bubble with the preview, then repeat. Rainbow wild bubbles, chain multipliers, and boss rows are polish layered after one honest level clears without bubbles crossing the danger line.

Bubble shooter loop state machine diagram showing aim angle, shoot bubble, snap to hex grid, match-three pop, and drop floating clusters
The bubble shooter loop: aim and shoot toward the grid, snap on collision, pop matched neighbors, then drop any bubbles no longer attached to the ceiling.

Pick your engine for how to make bubble shooter: canvas, Phaser, or WizardGenie

Three good targets in 2026, each with a different trade-off. Vanilla JavaScript with canvas is the honest default and the pick this guide recommends for a first build. One <canvas> draws each bubble as an arc fill or drawImage from a spritesheet, the aim line as a dashed segment, and popped bubbles as shrinking circles. Total code footprint for a working browser match three bubbles game is under 450 lines including hex snap, flood fill, and ceiling reachability. The MDN Canvas API docs cover drawing, and 2D collision detection covers circle-circle overlap for shot collision.

Hex-grid storage without a physics engine stays readable: store bubbles in a 2D array where even rows have cols slots and odd rows offset by half a bubble diameter. Neighbor lookup uses six fixed delta pairs instead of four cardinal directions. When the flying bubble collides, iterate empty neighbor slots around the hit bubble and pick the slot with minimum distance to the projectile center.

Phaser 4.1.0 (verified 2026-08-27 on the official Phaser API documentation page) becomes the right pick if you want pointer aim with touch support, tweens on pop particles, or ten level layouts with different ceiling patterns. Phaser does not invent your hex snap math — you still need the same flood-fill pop and ceiling reachability. Use Phaser when animated bubble wobble and multi-level progression are the product; use raw canvas when the product is an html5 bubble pop walkthrough people can read in one sitting.

WizardGenie is not a separate rendering engine — it scaffolds whichever of the two you pick from a single natural-language prompt. WizardGenie ships as both a desktop app (Windows installer with auto-update, available to Early Access supporters and above) and a no-install web build. Its coding-model lineup covers Claude Opus 4.7, GPT-5.5, Gemini 3.1 Pro, DeepSeek V4 Pro, Kimi K2.5, Grok 4.2, and MiniMax M2.7 (verified 2026-08-27 in src/app/_home-v2/_data/tools.ts). For bubble shooters, any frontier model scaffolds hex snap, flood fill, and danger-line checks in one prompt. Pair a frontier planner with a budget executor like DeepSeek V4 Pro or Kimi K2.5 for the typing pass — the Dual-agent pattern lands most projects at roughly one-fifth the single-frontier cost.

Step 1 — model hex snap, match-three pop, and ceiling reachability

Nothing else in the pipeline matters if shots pass through bubbles or pops ignore floating clusters. Start with grid data before you paint sprites:

const R = 18; // bubble radius
const COLS = 11;
const ROWS = 14;

// grid[row][col] = null | { color: 'red'|'blue'|'green'|'yellow'|'purple'|'orange' }
const grid = Array.from({ length: ROWS }, () => Array(COLS).fill(null));

const NEIGHBORS_EVEN = [
  [-1,0],[1,0],[0,-1],[0,1],[-1,-1],[-1,1]
];
const NEIGHBORS_ODD  = [
  [-1,0],[1,0],[0,-1],[0,1],[1,-1],[1,1]
];

function neighbors(r, c) {
  const deltas = r % 2 === 0 ? NEIGHBORS_EVEN : NEIGHBORS_ODD;
  return deltas
    .map(([dr, dc]) => [r + dr, c + dc])
    .filter(([nr, nc]) => nr >= 0 && nr < ROWS && nc >= 0 && nc < COLS);
}

function floodPop(r, c, color) {
  const stack = [[r, c]];
  const cluster = [];
  while (stack.length) {
    const [cr, cc] = stack.pop();
    const cell = grid[cr][cc];
    if (!cell || cell.color !== color || cell.marked) continue;
    cell.marked = true;
    cluster.push([cr, cc]);
    for (const [nr, nc] of neighbors(cr, cc)) stack.push([nr, nc]);
  }
  cluster.forEach(([cr, cc]) => { grid[cr][cc].marked = false; });
  return cluster;
}

function dropFloaters() {
  const attached = new Set();
  const stack = [];
  for (let c = 0; c < COLS; c++) if (grid[0][c]) stack.push([0, c]);
  while (stack.length) {
    const [r, c] = stack.pop();
    const key = r + ',' + c;
    if (attached.has(key) || !grid[r][c]) continue;
    attached.add(key);
    for (const [nr, nc] of neighbors(r, c)) stack.push([nr, nc]);
  }
  const falling = [];
  for (let r = 0; r < ROWS; r++)
    for (let c = 0; c < COLS; c++)
      if (grid[r][c] && !attached.has(r + ',' + c)) {
        falling.push(grid[r][c]);
        grid[r][c] = null;
      }
  return falling;
}

Unit-test three cases before you generate art: a shot that completes a line of three same-color neighbors pops immediately; a snap into a tight gap still finds the correct hex cell; and a floating cluster drops after its only ceiling anchor pops. Those three tests catch ninety percent of javascript bubble shooter bugs. Keep bubble colors to six distinct hues so color-blind players can still read matches — add a subtle pattern overlay in Quick Sprites if you want extra accessibility.

Step 2 — wire aim, shooting, and pop cascade in WizardGenie

With level.json drafted for the starting ceiling pattern, open WizardGenie. Drop in a bare index.html shell referencing your bubble spritesheet placeholder. Give the agent one paragraph: Build a browser bubble shooter. Load starting grid from level.json. Shooter at bottom center rotates toward mouse. Draw dashed aim line with one wall bounce. Space or click fires current bubble at 400px/s. On collision snap to nearest empty hex neighbor. Flood-fill pop on three or more same color. Drop floaters not connected to row 0. Danger line at row 11 — game over if any bubble center crosses it. Score 10 per pop, 5 per floater, 5 per leftover shot on clear. Show current and next bubble preview. Autosave high score to localStorage. Feed that to any coding model in the lineup and the interpreter scaffolds in under five minutes.

The remaining hour is polish via follow-up prompts. Add a pop particle burst — eight tiny circles fly outward on match — ten lines. Add a shooter recoil — translate cannon back 4px on fire — four lines. Add a wall glow where the aim line reflects — six lines. Add a combo text that shows “Nice!” on four-or-more pops — eight lines. Each item is a follow-up prompt, and the whole browser match three bubbles experience comes together over a Saturday afternoon.

Optional sibling: if your level needs a swap-grid bonus round between bubble stages, borrow the cascade gravity pattern from how to make a match 3 game — same flood-fill idea, different input model.

Step 3 — Quick Sprites bubble colors, SFX Gen pops, and Music Gen arcade bed

Flat colored circles read as a tech demo even when snap math is perfect. Three asset passes cover the whole aim shoot bubbles experience:

  • Colored bubble sprites — six glossy sphere variants from Quick Sprites. Prompt for “glossy cartoon bubble sphere, 64x64, single color [red/blue/green/yellow/purple/orange], white highlight, transparent background, puzzle game asset”. Quick Sprites bills 9 credits per generation per src/app/quick-sprites/page.tsx. Six colors is 54 credits.
  • Launch whoosh — short air rush under 0.4 seconds when the bubble fires.
  • Pop burst — bright glass crack under 0.5 seconds on match-three.
  • Drop plop — soft thud under 0.3 seconds when floaters hit the floor.
  • Level clear chime — 1 to 2 seconds on win screen.

Open SFX Gen, describe each clip in plain language (“cartoon bubble pop, glassy burst, single hit”), and export WAV into your assets/audio/ folder. Billing is 1 credit per second of generated audio per src/app/sfx-gen/page.tsx — four short clips land around 6 credits total.

For the background loop, open Music Gen and prompt for “light arcade puzzle loop, 110 BPM, major key, bouncy marimba, no vocals, seamless loop, 30 seconds”. Music Gen costs 10 credits per generation (MUSIC_CREDIT_COST in src/app/music-gen/page.tsx). Mute by default with a toggle — mobile browsers often block autoplay until the first click anyway.

After Quick Sprites returns the six bubbles, pack them into a single spritesheet or load individual PNGs. Map colors in your level JSON as string keys so swapping art never touches game logic. This separation is non-negotiable — puzzle bobble clone players forgive simple shapes when pops feel snappy and audio reinforces each match.

Bubble shooter asset stack diagram showing colored bubbles from Quick Sprites, aim snap logic in WizardGenie, SFX Gen pop audio, and Music Gen arcade bed
The bubble shooter asset stack: Quick Sprites covers the six bubble colors; WizardGenie owns aim snap and pop logic; SFX Gen covers launch and pop stingers; Music Gen covers the arcade bed.

Optional polish: if your ceiling pattern needs irregular gaps, reuse the grid-fill pattern from how to make a crossword for designing row layouts in a spreadsheet before you paste into level.json — same “fill a grid from data” mindset, different win condition. For a pure aim-and-pop sprint with no word grids, stay on this post’s snap-and-drop spine.

What a how to make bubble shooter project costs on Sorceress in 2026

Concrete asset and generation budget for a browser match pop loop — one ceiling pattern, six bubble colors, three-minute clear time — from empty repo to zip-and-ship playable, all numbers verified 2026-08-27 against local Sorceress source:

  • Bubble sprites (Quick Sprites): 6 generations at 9 credits each = 54 credits (0.54 USD). Red, blue, green, yellow, purple, orange glossy spheres.
  • Stingers (SFX Gen): 4 clips at 1 credit per second, roughly 6 seconds total = 6 credits (0.06 USD). Launch whoosh, pop burst, drop plop, level clear.
  • Arcade bed (Music Gen): 1 loop at 10 credits = 10 credits (0.10 USD). Light puzzle background track.
  • WizardGenie coding time: effectively free on the Sorceress side. Model-side API cost for a one-to-two-hour prompt session on a cheap Executor like DeepSeek V4 Pro is typically under 0.40 USD.
  • Total for one complete browser bubble shooter: roughly 70 credits — roughly 0.70 USD in Sorceress credits, plus under 0.40 USD in model API time. Under 1.50 USD end-to-end for a first bubble shooter with six colored bubbles, pop audio, and a music bed.

Sorceress bills 100 credits per dollar at the standard rate. New accounts start with 100 free credits (SIGNUP_GRANT = 100 in src/app/api/admin/credits/route.ts), which covers the sprites, stingers, and music loop with room to spare. The Sorceress Lifetime tier at 49 USD one-time covers unlimited SFX Gen use forever, which matters if you plan a series of bubble levels — each additional level is essentially Quick Sprites art and one Music Gen pass only.

For related browser-game pipelines that share this generate-art-wire-grid-logic-ship-the-browser-build spine, the closest reads are how to make a match 3 game for swap-grid siblings, how to make a breakout game for another ball-physics puzzle, and how to make a browser game for the Phaser migration path when you outgrow raw canvas. The Sorceress Tools Guide is the master index for every tool this guide referenced. Under two dollars, one afternoon, and how to make bubble shooter is a done deal.

Frequently Asked Questions

Which bubble shooter rules should a beginner implement first?

Start with one hex-style bubble grid at the top, a shooter at the bottom with current and next bubble preview, mouse-aim angle, and match-three pop on snap. If three or more same-color neighbors connect after a shot lands, remove them and drop any bubbles no longer attached to the ceiling row. Skip power-ups, chain combos, and boss rows until one honest level clears without bubbles crossing the danger line. That is what most how to make bubble shooter and bubble shooter tutorial searchers expect from a weekend build.

How does bubble snap work in javascript bubble shooter code?

Store bubbles in a row-column grid with odd-row offset (staggered hex). When a flying bubble hits a wall or another bubble, find the nearest empty grid cell within snap radius using distance to each neighbor slot. Insert the bubble, scan connected same-color neighbors with flood fill, and if count is three or more, mark them popped. Then run a reachability pass from the top row: any bubble not connected to the ceiling falls. Unit-test three cases: a direct color match pops, a snap into a gap still counts neighbors correctly, and a floating cluster drops after its anchor pops.

Canvas or Phaser for a browser match three bubbles game?

Canvas with arc draws and manual grid lookup is the honest default for a first html5 bubble pop build — under 450 lines including aim line, snap, and pop cascade. Phaser 4.1.0 (verified 2026-08-27 on the official Phaser API documentation page) adds pointer aim, tweens on pop particles, and Arcade Physics circle overlap if you plan five or more level layouts. Pick Phaser when animated bubble wobble and multi-level progression are the product; pick raw canvas when the product is an aim shoot bubbles walkthrough people can fork in one file.

How should aim, bounce, and lose conditions behave?

Draw a dashed aim line from the shooter to the first wall or bubble intersection. Reflect once off left and right walls before the shot travels. Cap shots per level or use a danger line three rows from the shooter — if any bubble center crosses that Y threshold after a pop cascade, show Game Over. On zero bubbles remaining, show Level Clear with score equal to pops times ten plus leftover shots times five. Persist high score in localStorage. Most puzzle bobble clone searchers forgive binary lose states if the danger line reads clearly on screen.

How much does it cost to build a bubble shooter on Sorceress?

A first-project browser match pop loop with art and audio budgets like this against the 2026 Sorceress rate card (verified 2026-08-27 against local source). Six colored bubble sprites from Quick Sprites at 9 credits each = 54 credits. Four SFX clips at 1 credit per second (src/app/sfx-gen/page.tsx) — launch whoosh, pop burst, drop plop, level clear — roughly 6 credits. One Music Gen arcade bed at 10 credits (MUSIC_CREDIT_COST in src/app/music-gen/page.tsx). Total roughly 70 credits or 0.70 USD plus under 0.40 USD in coding-model API time. The free 100-credit signup grant (src/app/api/admin/credits/route.ts) covers the full stack outright.

Sources

  1. Puzzle Bobble - Wikipedia
  2. MDN - Canvas API
  3. MDN - 2D collision detection
  4. Phaser 4.1.0 API Documentation
Written by Arron R.·2,435 words·11 min read

Related posts