# City Builder Multiplayer Game 🎮 **STATUS: ✅ COMPLETE AND READY TO PLAY** Transport Tycoon-style city building game with real-time multiplayer functionality. ## 🚀 Quick Start ```bash # 1. Setup python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt # 2. Run python run.py # 3. Play Open http://127.0.0.1:9901 in your browser ``` ## Features - Real-time multiplayer via WebSockets - Transport Tycoon visual style - Persistent economy system - 10+ building types with unique benefits - Road connectivity system - Player-specific colors - Live cursor tracking - IRC-style chat - Offline economy processing (10% power) ## Technology Stack - **Backend**: FastAPI, SQLite, WebSockets - **Frontend**: Three.js (vanilla JS) - **Server**: 127.0.0.1:9901 ## Progress Tracker ### ✅ Phase 1: Project Structure - [x] Create directory structure - [x] Setup backend skeleton - [x] Setup frontend skeleton - [x] Database schema ### ✅ Phase 2: Backend Core - [x] FastAPI server setup - [x] WebSocket manager - [x] Database models - [x] Game state manager - [x] Economy system - [x] Player authentication (nickname-based) ### ✅ Phase 3: Frontend Core - [x] Three.js scene setup - [x] Tile rendering system - [x] Camera controls (zoom, pan) - [x] Input handling - [x] WebSocket client ### ✅ Phase 4: Game Mechanics - [x] Building placement - [x] Building types implementation - [x] Road connectivity algorithm - [x] Economy calculations - [x] Building interactions ### ✅ Phase 5: UI Components - [x] Login screen - [x] Stats display (money, population) - [x] Building toolbox - [x] Context menu - [x] Chat system ### ✅ Phase 6: Multiplayer - [x] Cursor synchronization - [x] Building synchronization - [x] Player colors - [x] Chat messages ### 🚧 Phase 7: Ready for Testing - [x] Core gameplay complete - [x] All features implemented - [ ] Needs real-world testing - [ ] Performance optimization TBD - [ ] Bug fixes as discovered ## Installation ``` ## Troubleshooting ### Server won't start - Check if port 9901 is already in use - Ensure all dependencies are installed: `pip install -r requirements.txt` - Make sure you're in the virtual environment ### Can't connect to WebSocket - Verify server is running on http://127.0.0.1:9901 - Check browser console for connection errors - Try refreshing the page ### Buildings not appearing - Check that WebSocket connection is established - Look for errors in browser console - Verify server logs for any exceptions ### Performance issues - Close other browser tabs - Reduce browser zoom level - The game only renders visible tiles for optimization ### Database errors - Delete the `data/game.db` file to reset - Ensure `data/` directory exists - Check file permissions ## Technical Details ### Architecture - **Backend**: FastAPI with WebSocket support - **Frontend**: Three.js for 3D rendering (orthographic view) - **Database**: SQLite for persistence - **Communication**: WebSocket for real-time multiplayer ### Performance Optimizations - Only visible tiles are rendered - Cursor position updates are throttled (100ms) - Database saves every 10 seconds - Viewport culling for rendering ### Data Persistence - Game state saved to SQLite every 10 seconds - Players reconnect using their nickname - Offline economy continues at 10% power - Buildings persist across sessions ## Future Enhancements (Not Implemented) - Sound effects - More building types - Advanced road types (highways, bridges) - City happiness/satisfaction metrics - Natural disasters or random events - Building upgrades - Trade system between players - Leaderboards - Mobile responsiveness ## License This is an educational project created following Transport Tycoon's visual style for a multiplayer city building game. ## Credits Created using: - FastAPI for backend - Three.js for 3D rendering - WebSockets for real-time communication - SQLite for data storagebash # Create virtual environment python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate # Install dependencies pip install -r requirements.txt # Run server (Option 1 - using run script) python run.py # Run server (Option 2 - direct command) python -m uvicorn server.main:app --host 127.0.0.1 --port 9901 --reload # Open browser and navigate to: # http://127.0.0.1:9901 ``` ## Quick Start Guide 1. **Launch the game** - Start the server and open http://127.0.0.1:9901 2. **Enter nickname** - Type your nickname and press Enter 3. **Start building** - You begin with $100,000 4. **Build roads first** - Roads connect buildings and boost economy 5. **Build houses** - Houses provide population for commercial buildings 6. **Build shops** - Shops generate income but need population 7. **Expand your city** - Connect buildings with roads for economy bonuses 8. **Chat with others** - Use the chat box to communicate with other players ## Gameplay Tips ### Starting Strategy 1. Start with a few **Small Houses** to build population 2. Build a **Road** network to connect your buildings 3. Add **Small Shops** once you have 20+ population 4. Build a **Power Plant** before adding large buildings 5. Connect everything with roads for economy boosts ### Economy Optimization - **Road connections matter!** Buildings connected to larger road networks produce more income - Each road in a connected zone adds **5% income boost** to commercial/industrial buildings - Balance income vs. expenses - some buildings cost money per tick - Population affects commercial building income - Industrial buildings provide jobs (negative population) ### Building Synergies - **Houses + Shops**: Houses provide population, shops need population - **Factories + Power Plants**: Large factories need power - **Roads + Everything**: Roads boost all connected buildings - **Parks/Plazas**: Increase population happiness (future feature potential) ### Multiplayer Strategy - Watch other players' cities for inspiration - Your economy runs at 10% power when offline - Protect your buildings - only you can delete them - Use chat to coordinate with other players - Build near roads for maximum connectivity ## Building Types 1. **Residential** - Small House: +10 population, -$50/tick - Medium House: +25 population, -$120/tick - Large House: +50 population, -$250/tick 2. **Commercial** - Small Shop: +$100/tick, requires 20 population - Supermarket: +$300/tick, requires 50 population - Mall: +$800/tick, requires 100 population 3. **Industrial** - Small Factory: +$200/tick, -20 population (jobs) - Large Factory: +$500/tick, -50 population 4. **Infrastructure** - Road: Connects buildings, boosts economy - Park: +5 population happiness - Plaza: +10 population happiness 5. **Special** - Town Hall: Required for city, +100 max population - Power Plant: Required for large buildings ## Economy System - Base tick: Every 10 seconds - Offline processing: 10% power - Building costs are realistic - Income based on building type and connectivity - Population affects commercial income - Roads create economic zones ## Controls - **Right Mouse**: Hold to pan camera - **Mouse Wheel**: Zoom in/out - **Left Click**: Place building / Select tile - **Right Click on Building**: Context menu - **Enter**: Send chat message / Confirm input - **Escape**: Cancel input ## File Structure ``` city-builder/ ├── server/ │ ├── main.py # FastAPI app │ ├── websocket_manager.py # WebSocket handling │ ├── game_state.py # Game state management │ ├── economy.py # Economy calculations │ ├── database.py # SQLite operations │ └── models.py # Data models ├── static/ │ ├── index.html # Main HTML │ ├── js/ │ │ ├── App.js # Main app class │ │ ├── GameRenderer.js # Three.js renderer │ │ ├── InputHandler.js # Input management │ │ ├── WebSocketClient.js # WS client │ │ ├── UIManager.js # UI components │ │ └── components/ │ │ ├── LoginScreen.js │ │ ├── StatsDisplay.js │ │ ├── BuildingToolbox.js │ │ ├── ContextMenu.js │ │ └── ChatBox.js │ └── css/ │ └── style.css # Styling ├── data/ │ └── game.db # SQLite database ├── requirements.txt └── README.md ``` ## Current Status **All core features implemented and ready for testing!** The game is fully functional with: - ✅ Multiplayer WebSocket connections - ✅ Real-time cursor and building synchronization - ✅ 13 different building types with unique economics - ✅ Road connectivity system with economy boosts - ✅ Offline economy processing (10% power) - ✅ IRC-style chat - ✅ Context menus for building management - ✅ Camera controls (pan, zoom) - ✅ Persistent database storage Ready to play! See installation instructions below.