Other
•
Nov 25, 2025
A Classic Revisited: Using Claude's Opus 4.5 to build a 3D Battleships Game
Introduction
This project documents the full journey of building a 3D Battleship multiplayer game using Emergent. What started as a simple idea became a complete interactive 3D experience with ship placement, live attacks, synchronized turns and stable multiplayer behavior. The result is a polished, immersive game with smooth visuals and reliable real-time updates.
Final Tech Stack:
Frontend: React, Three.js, @react-three/fiber, @react-three/drei, Tailwind CSS
Backend: FastAPI with WebSocket support
Database: MongoDB via Motor
Real-time Features: WebSockets with polling fallback
3D Interaction: Raycasting and optimized scene updates
The game includes dual 3D grids, ship placement logic, invite code matchmaking, hit/miss visuals and victory detection.
Problem Statement and Proposed Solution
Our Vision
Most Battleship games feel flat or disconnected. They lack visual immersion, rely on simple 2D grids and use cumbersome multiplayer systems.
Problems with existing Battleship games:
They lack dynamic visuals
They require accounts or slow matchmaking
They do not feel reactive or real-time
They rarely show satisfying hit or sink animations
The Proposed Solution
Build a visually engaging 3D Battleship game that runs in the browser, requires no accounts and supports instant 1v1 matches through invite codes.
Key elements defined early:
Styling: cartoon-like water and clean 3D grids
Gameplay: classic 10x10 grid and 5 ships
Multiplayer: WebSockets for real-time state sync
Simplicity: no login system, just invite codes
Interaction: click-to-place and click-to-attack mechanics
Learning Outcomes
Throughout the process, we learned how to:
Gather requirements before coding
Translate classic game rules into clear mechanics
Build and optimize 3D scenes using React-Three-Fiber
Implement synchronized multiplayer logic
Debug complex browser issues like memory leaks and event conflicts
Continuously iterate until the game became stable and playable
Step 0: Prerequisites
What We Had
Emergent environment with React, FastAPI and MongoDB already connected.
What Was Needed
Clear agreement on ship sizes
Grid layout and turn flow
Decision to use invite codes instead of accounts
After confirming these, we were ready to send the initial prompt into Emergent.
Step 1: Initial Prompt and Requirement Gathering
Our First Message
Agent’s Clarification Questions:
Grid size
Ship list
Matchmaking style [Whether user accounts were needed]
Visual theme
Multiplayer protocol
Our Answers
Use a 10x10 grid
Use the classic 5 ships
Only invite codes, no user accounts
Use a cartoon water style
Enable WebSockets
Step 2: UI and 3D Improvements
Our Request
Agent’s Interpretation
Two separate grids labelled clearly
Water shader kept light and stylized
Camera rotation disabled during placement
Pointer interactions prioritized over 3D orbiting
Panels for turn messages and status updates
Ships resized and aligned cleanly on the grid
Placement highlighting added
Step 3: First Major Gameplay Issue
Our Report
Again, it's important to note that opening the inspect pane and searching for errors in red popping up on the console or network tabs is one of the best ways to troubleshoot complicated apps. Here's the error we found:
Agent’s Fix
Added open-connection checks
Added retry logic
Added fallback syncing from REST endpoints
This stabilized the attack flow.
Step 4: Additional Feature Requests
Our Request
Agent’s Fix
Backend now returns opponent_hits_on_me [an identifier tag]
Frontend shows hits on your fleet
Ship sinking detection improved
Tile indicators updated in both grids
Common Issues
During testing we faced:
Blank screen issues from wrong URLs
Ship placement blocked by OrbitControls
Attacks not firing due to socket timing
Delayed updates due to server-client desync
Browser crashes from excessive animations
Overflow clipping affecting logos and panels
For troubleshooting your app:
Describe what you see
Take a screenshot
Open browser console and check for red errors
Share both with the agent
Iterate until resolved
Deploying Your App
Preview Your Game

Use the Preview feature in Emergent and test the following:
Gameplay and logic
Ship placement
Click detection
WebSocket syncing
Turn order
Hit and sink logic
Fix Any Issues
Send findings to the agent for quick iteration.
Deploy the Application

Click Deploy, wait for Emergent to finalize the hosting and use the final production URL to play the game with others!
Wrapping Up
You now have a fully interactive 3D Battleship game built step-by-step with the brand - new Opus 4.5 model by Claude through Emergent. Here's the comparison of Opus 4.5 and Sonnet 4.5 models, using which we built the same 3D battleship game:
Features | Battleships 3D (Sonnet 4.5) | Battleships 3D (Opus 4.5) |
|---|---|---|
Fully 3D Dual-Grid Battlefield | Yes (lower quality models) | Yes (sleek look and camera view) |
Interactive Ship Placement | Basic blocks as ships | Fully interactive, hover effects, more detailed ship models |
Real-Time Multiplayer with Invite Codes | Yes | Yes |
Memory Optimization | Yes | Yes - can support better graphics for a long play time. |
Why don't you test the previous game and see if our preview down below looks better? Tweet at us on X or reach out on Discord to play the updated game with friends!
Your build now includes:
A complete 3D battlefield
Real-time turn-based gameplay
Clear hit and miss animations
Ship sinking logic
Invite code matchmaking
Optimized memory usage for long play sessions
If you want to push the game further, possible upgrades include:
Explosion or splash animations
Sound effects
Fog of war or other power-ups that a user can buy from a store (get coins from winning)
Smarter camera for mobile
AI opponent mode
Match history
Ready when you are to extend or refine your game.

