Fast-paced dual-control arcade game built with Flutter and Flame.
- Dual players with lane-switch mechanics
- Randomized obstacle spawning with difficulty scaling
- Game state via Provider (
start,pause,resume,game over) - Audio manager for background music and SFX with toggles
- Unit, widget, and end-to-end tests
- Flutter, Flame
- Provider
- audioplayers, shared_preferences
- flutter_test, integration_test, mocktail
lib/core/app-wide services (GameProvider, AudioManager)lib/gameplay/Flame components (GameScene, Player, Obstacle, ObstacleSpawner, TapHandler)lib/ui/Flutter UI (Home, PauseOverlay, GameOver)test/unit & widget testsintegration_test/E2E tests
flutter pub get
flutter run- Unit & widget tests:
flutter test- E2E integration tests (requires emulator/simulator or device):
flutter test integration_testGenerate coverage locally:
flutter test --coverage
# lcov.info at coverage/lcov.infoView HTML report (requires lcov/genhtml installed):
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.htmlOptional CI/Codecov (add later):
- Upload
coverage/lcov.infoin your CI and enable Codecov. Then replace the Coverage badge with your Codecov badge.
- Gameplay is
dt-scaled and designed for 60 FPS. On >60Hz displays logic remains stable. - Object churn minimized (reused
Paintin obstacles; optimizedPauseOverlayrebuilds). - Profile:
- Android:
flutter run --profile, open DevTools for frame/memory/CPU. - iOS:
flutter run --profile, use Xcode Instruments (Time Profiler, Core Animation).
- Android:
Audio assets are referenced in pubspec.yaml under assets/audio/.
MIT