83 lines
3.1 KiB
Markdown
83 lines
3.1 KiB
Markdown
# 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)
|
|
|