🔧 AI Nachrichten Two Minute Papers: I Never Thought I’d See This Happen(10.09.2026 um 10:47 Uhr)
🔧 AI Nachrichten Google DeepMind: How AI is transforming weather prediction(09.09.2026 um 18:10 Uhr)
🔧 ProgrammierungCompiler Construction for Dummies (mrmcd26)(12.09.2026 um 00:00 Uhr)
🕵️ SicherheitslückenUSENIX: WOOT '26 - SoK: The Constant Time Model(10.09.2026 um 00:26 Uhr)
🕵️ SicherheitslückenUSENIX: WOOT '26 - SoK: Insecurity of Cellular Basebands(10.09.2026 um 00:26 Uhr)
🕵️ SicherheitslückenUSENIX: WOOT '26 - A Dummy's Guide to Agentic Exploit Generation(10.09.2026 um 00:26 Uhr)
🔧 AI Nachrichten Two Minute Papers: I Never Thought I’d See This Happen(10.09.2026 um 10:47 Uhr)
🔧 AI Nachrichten Google DeepMind: How AI is transforming weather prediction(09.09.2026 um 18:10 Uhr)
🔧 ProgrammierungCompiler Construction for Dummies (mrmcd26)(12.09.2026 um 00:00 Uhr)
🕵️ SicherheitslückenUSENIX: WOOT '26 - SoK: The Constant Time Model(10.09.2026 um 00:26 Uhr)
🕵️ SicherheitslückenUSENIX: WOOT '26 - SoK: Insecurity of Cellular Basebands(10.09.2026 um 00:26 Uhr)
🕵️ SicherheitslückenUSENIX: WOOT '26 - A Dummy's Guide to Agentic Exploit Generation(10.09.2026 um 00:26 Uhr)

🔧 Programmierung 🕛 vor 3 Monaten 6 Min Lesezeit
0

Lava Leap: Shipping an Endless Climber with an AI Pair Programmer

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

Lava Leap is an endless vertical climber: you scale procedurally generated platforms while lava rises from below, and your score is your height plus the coins you grab on the way up. I built it with Claude as a pair programmer over two release cycles, and it's now public on and run npm run dev to see it move — a game about momentum is better experienced than screenshotted.






How it was built



The division of labor was consistent: I decided what the game should be, Claude wrote nearly all of the code. We started with a brainstorming session that produced a design spec, then a plan that broke v1 into 28 test-driven tasks across 8 milestones. Claude implemented each milestone with separate reviewer passes, and I played the build live before signing off on each one. v1 shipped in 31 commits; v2 repeated the process with 9 more milestones.



The architectural decision I care most about is parametric reachability: every generated level is provably climbable. The generator doesn't place platforms randomly and hope. It clamps every next platform inside the player's actual movement envelope — jump height, double-jump extension, dash distance — using reach-budget constants that live in one tuning file alongside the physics values they're derived from. Difficulty scaling raises the lava speed and biases toward crumbling and moving platforms as you climb, but it never places a gap the movement system can't cross. The generator alone has 12 unit tests asserting this. When v2 added hand-authored set-piece chunks, they had to pass a validateChunk gate that rejects any template exceeding the reach widths — and, after a reviewer pass caught it, any template that puts coins on crumbling platforms, which created sucker bets the player couldn't win.



The second load-bearing piece is a typed event spine: a small, framework-free event emitter in src/core/events.ts. Gameplay code emits events (platform landed, coin collected, death) and everything else subscribes — achievements, run analytics, the audio director, score popups. That's what made v2's feature pile tractable: the achievements system never touches the player class. One naming landmine: the field on the game scene is gameEvents, because events already exists on Phaser.Scene and shadowing it breaks the scene lifecycle.



The juice pass came last and mattered more than I expected: squash-and-stretch on landings, dust particles, screen shake, floating score popups, drifting embers, and a slow-motion beat on death. Even the audio is code — tools/gen-music.mjs synthesizes the chiptune loops from scratch, so the repo contains no purchased third-party asset packs — sprites are PixelLab-generated and all audio is regenerable from the synthesis scripts.






The gotchas



Three real ones, each of which cost real debugging time.



A bare tsc in the build script silently shadowed our sources. The build ran tsc && vite build, and tsc emitted compiled .js files next to their .ts sources. Vite resolves .js before .ts, so the dev server started serving stale compiled output while we edited the TypeScript — changes just stopped appearing. The fix is "noEmit": true in tsconfig.json (the build only needs tsc as a type-check; Vite does the bundling). The rule we took away: never let stray .js files sit in src/.



You can't reliably screenshot a WebGL game, so verify behaviorally. Phaser's canvas doesn't set preserveDrawingBuffer, so screenshots taken between frames come back blank or flaky. Synthetic KeyboardEvents with keyCode are ignored by the browser, so you can't fake input that way either. Our fix: in dev builds the game instance is exposed as window.__game, and verification reads scene and physics state directly — player y-position, lava height, platform counts — instead of pixels. Input is driven by setting Phaser Key.isDown flags and stepping the player update, or emitting keydown-SPACE on scene.input.keyboard for menu handlers. Related: a hidden browser tab stops requestAnimationFrame, which freezes the whole game loop mid-test — you can pump frames manually with game.step().



scene.start() stops the scene that calls it. Opening Settings from the main menu used scene.start('Settings'), which silently stopped the Menu scene. Backing out of Settings then revealed... nothing. A black screen, because the menu no longer existed. The fix is that Settings must explicitly scene.start('Menu') on exit rather than assuming there's a live scene to return to. If you're using Phaser's scene manager for overlay-style screens, launch/pause semantics versus start semantics will bite you exactly once.






What shipped



v0.2.0 is live and public at .

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
10 Quellen
GitHub Release: dependabot/dependabot-core v0.393.0 (24.08.2026)
1 Quelle
CC2tv #433: Was CachyOS anders macht als Linux Mint 🐧️
1 Quelle
Arti 2.6.0 released
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Lava Leap: Shipping an Endless Climber with an AI Pair Programmer

Thematisch verwandte Begriffe: Lava, Leap, Shipping, Endless · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...