monquigrid/README.md
2025-07-16 23:56:37 +00:00

170 lines
No EOL
5.1 KiB
Markdown

# Grid Battle Game
A 2-player turn-based tactical shooter played on a 20x20 grid with real-time multiplayer functionality.
## Quick Start
### Option 1: Simple Start
```bash
npm start
```
### Option 2: Script Start (Recommended)
```bash
./start.sh
```
### Option 3: Clean Start (Reset Database)
```bash
npm run reset
```
## How to Play
### Creating a Game
1. Navigate to `http://localhost:8050`
2. Enter your name when prompted
3. Share the invite link with your opponent
4. Wait for them to join
### Joining a Game
1. Click the invite link shared by player 1
2. Enter your name when prompted
3. Game starts automatically when both players are connected
### Gameplay
- **Movement**: Use compass buttons to move (4 moves per turn max)
- **Shooting**: Use gun buttons to shoot (1 shot per turn, doesn't cost a move)
- **Turn System**: Both players submit actions → execute simultaneously
- **Win Condition**: Hit opponent with bullet = instant victory
### Controls
- **Compass Layout**: North/South/East/West positioned intuitively
- **Ghost Preview**: See where your moves and shots will go
- **Undo**: Remove last action with "↶ Undo Last" button
- **Submit**: Submit all actions when ready
## Technical Features
### Database System
- **SQLite Backend**: Persistent game state and history
- **Complete Replays**: Every action recorded for playback
- **Leaderboards**: Win/loss records, skill ratings
- **Tournament Support**: Ready for competitive play
### API Endpoints
- `POST /api/games` - Create new game
- `POST /api/games/:id/join` - Join existing game
- `POST /api/games/:id/submit-turn` - Submit turn actions
- `GET /api/games/:id/status` - Poll for game updates
- `GET /api/leaderboard` - View rankings
- `GET /api/games/:id/replay` - Get full game replay
### Real-time Updates
- **Polling System**: Client polls server every 1.5 seconds
- **Efficient Updates**: Only updates when game state changes
- **Connection Recovery**: Handles temporary disconnections
## Game Mechanics
### Turn Structure
1. **Planning Phase**: Both players queue actions privately
2. **Submission**: Players submit when ready (or timeout after 30s)
3. **Execution**: All actions execute simultaneously
4. **Resolution**: Check for hits, update positions, next turn
### Movement Rules
- **4 moves maximum** per turn in cardinal directions
- **No backtracking** through your own path
- **Boundary checking** prevents moves off the grid
- **Visual feedback** for invalid moves (red flash)
### Combat System
- **1 shot per turn** (free, doesn't cost a move)
- **Straight line trajectory** in cardinal directions
- **Instant hit detection**
- **Winner declared immediately** on successful hit
## Advanced Features
### Replay System
- Full game history stored in database
- View any past game move-by-move
- Access via `/api/games/:id/replay`
### Leaderboard
- Skill ratings (ELO-style system)
- Win/loss statistics
- Total games played
- View at `/api/leaderboard`
### Tournament Ready
- Database schema supports tournaments
- Bracket management system
- Multiple tournament formats
- Prize pool tracking
## Development
### Project Structure
```
/
├── server.js # Main server
├── package.json # Dependencies & scripts
├── start.sh # Startup script
├── server-config.js # Server settings
├── game-config.js # Game mechanics
├── database/
│ ├── init.js # Database manager
│ └── schema.sql # Complete schema
├── api/
│ └── game-api.js # REST API endpoints
└── public/
├── index.html # Game interface
├── style.css # Styling
└── multiplayer-game.js # Client logic
```
### Configuration
- **Server**: Edit `server-config.js` (port, host, paths)
- **Game**: Edit `game-config.js` (grid size, moves, shots)
- **Database**: SQLite file at `database/gridbattle.db`
### Scripts
- `npm start` - Start server
- `npm run clean` - Delete database
- `npm run reset` - Clean + start fresh
- `./start.sh` - Full startup with checks
## Troubleshooting
### Common Issues
1. **Port already in use**: Change port in `server-config.js`
2. **Database errors**: Run `npm run clean` to reset
3. **Missing dependencies**: Run `npm install`
4. **Permission errors**: Run `chmod +x start.sh`
### Database Management
- **Reset**: `npm run clean && npm start`
- **Backup**: Copy `database/gridbattle.db`
- **Inspect**: Use any SQLite browser tool
### Network Access
- **Local**: `http://localhost:8050`
- **Network**: `http://YOUR_IP:8050` (server binds to 0.0.0.0)
- **Health Check**: `http://localhost:8050/health`
## Clear Code Principles
This codebase follows strict clarity principles:
- **No clever tricks**: Straightforward, readable code
- **Descriptive naming**: `calculateFinalPlayerPosition()` not `calc()`
- **Single responsibility**: Each function does ONE thing
- **Explicit error handling**: No silent failures
- **Configurable settings**: All magic numbers in config files
Perfect for maintenance by violent psychopaths who know where you live! 🔪
---
**Ready to play?** Run `npm start` and navigate to `http://localhost:8050`!