# Pokéguess

> Devine le Pokémon à partir de sa silhouette !

Application mobile Flutter développée dans le cadre du cours **DEV MOBILE** (Ynov).
À l'origine basée sur l'exemple de pokédex du bootcamp, le projet est devenu un jeu
complet « Who's that Pokémon ? » adossé à un pokédex.

## Fonctionnalités

- **Jeu de devinette** : une silhouette de Pokémon à identifier, avec un système de
  vies, d'indices et de passes (skips), des Pokémon **shiny** (bonus de points), un
  score courant et un meilleur score persistant.
- **Filtre par génération** : on choisit les générations (I à IX) dont les Pokémon
  peuvent tomber pendant le jeu.
- **Pokédex** : liste nationale des Pokémon avec filtre `ALL` / `CAUGHT` et compteur de
  progression (découverts / total).
- **Fiche détaillée** : statistiques de base, description, types, bascule normal/shiny.
- **Page Système** : statistiques globales (attrapés, vus, complétion, meilleur score)
  et choix de la **palette de couleurs** de l'app.
- **Offline-first** : les données sont mises en cache localement (SQLite) ; l'app reste
  utilisable hors-ligne une fois la synchronisation initiale faite.

## Architecture

Le projet suit une **Clean Architecture allégée** en trois couches, avec **Riverpod**
pour la gestion d'état :

```text
lib/
├── core/          # constantes, logger (Dart pur)
├── domain/        # entités, interface de repository, moteur de jeu (Dart pur, testé)
├── data/          # DTO de parsing, datasources SQLite/HTTP, implémentation du repository
└── presentation/  # providers Riverpod, pages et widgets (chacun < 150 lignes)
```

La règle de dépendance pointe vers l'intérieur : `domain` ne dépend de rien,
`data` et `presentation` dépendent de `domain`. Détails dans
[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).

## Stack technique

- [Flutter](https://flutter.dev) / Dart
- [flutter_riverpod](https://pub.dev/packages/flutter_riverpod) — gestion d'état
- [sqflite](https://pub.dev/packages/sqflite) — persistance locale (SQLite)
- [http](https://pub.dev/packages/http) — appels réseau
- [shared_preferences](https://pub.dev/packages/shared_preferences) — préférences (meilleur score, palette)
- [google_fonts](https://pub.dev/packages/google_fonts) — police rétro

## Installation

```sh
git clone https://gitea.losvernos.com/guillaumev/quel-est-ce-pokemon.git
cd quel-est-ce-pokemon
flutter pub get
```

Puis lancer l'application sur le device de votre choix (téléphone, émulateur ou
navigateur) :

```sh
flutter run
```

## Tests

```sh
flutter test
```

Les tests couvrent le moteur de jeu (`GameEngine`), le parsing (`PokemonDto`) et le
repository.

## Ressources utilisées

- [API Tyradex](https://tyradex.app) — données des Pokémon (français)
- Sprites officiels via le dépôt [TyraDex/sprites](https://raw.githubusercontent.com/Yarkis01/TyraDex/images/sprites/)
  (remplacer `<id>` par le numéro du Pokémon) :
  - normal : `.../sprites/<id>/regular.png`
  - shiny : `.../sprites/<id>/shiny.png`
- [Cris des Pokémon](https://pokemoncries.com/cries/1.mp3)

