A polished 2-player hot-seat UNO game built with Python and Pygame, featuring smooth animations, a fan-style hand UI, hover effects, invalid move feedback, and a clean modular architecture.
This project is a desktop UNO game built with Pygame that focuses on both gameplay and visual polish.
It started as a single-file prototype and was later refactored into a modular multi-file structure for better maintainability, scalability, and future feature expansion.
The game includes:
- A 2-player hot-seat mode
- Animated card movement
- A fan-style hand layout
- A thrown-style discard pile
- Hover lift effects
- Invalid move shake/jiggle feedback
- Wild card color selection
- Game over menu
- A clear top card info label
- 🃏 2-player hot-seat UNO gameplay
- 👁️ Only the active player’s hand is visible
- 🖱️ Click cards to play
- 📥 Click draw pile to draw
- 🌈 Wild / +4 color selection UI
- 🏆 Game over menu
- Play Again
- Exit
- 🎴 Fan-style hand layout
- 🪄 Hovered card lifts upward/downward
- 📚 Thrown-style discard pile
- Recent cards appear with random offsets + angles
- 🔲 Rounded card corners
- 📝 Top card label
- Avoids confusion between cards like 6 and 9
- 🌀 Play-to-discard animation
- 📦 Draw animation
- ⚡ Stacked draw animations for +2 / +4
- ❌ Invalid move hand shake
- If a player clicks an unplayable card, their visible hand jiggles/shakes
- Refactored from one file into modular files
- Clear separation of:
- game state
- rules
- models
- UI
- assets
- animations
- settings
