Compare commits
No commits in common. "409ab9c1dd6670ffed70362831da6a854f2c5812" and "afacacaa109fabc6feef4611531d0825853dc71b" have entirely different histories.
409ab9c1dd
...
afacacaa10
98
README.md
98
README.md
@ -1,87 +1,37 @@
|
|||||||
# Pokéguess
|
# pokedex
|
||||||
|
|
||||||
> Devine le Pokémon à partir de sa silhouette !
|
Projet d'exemple d'application Flutter pour les cours de bootcamp Ynov 2023.
|
||||||
|
Ce projet contient un début de pokédex, une application listant des pokémons et permettant d'en voir les détails.
|
||||||
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
|
## Installation
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://gitea.losvernos.com/guillaumev/quel-est-ce-pokemon.git
|
git clone https://github.com/Efilown/pokedex-example.git
|
||||||
cd quel-est-ce-pokemon
|
cd pokedex-example
|
||||||
flutter pub get
|
flutter pub get
|
||||||
```
|
```
|
||||||
|
|
||||||
Puis lancer l'application sur le device de votre choix (téléphone, émulateur ou
|
Ensuite, ouvrir le projet avec un IDE (tel que vscode) et le lancer sur le device de votre choix (téléphone, émulateur ou navigateur).
|
||||||
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
|
## Ressources utilisées
|
||||||
|
|
||||||
- [API Tyradex](https://tyradex.app) — données des Pokémon (français)
|
Pour les images (remplacer par l'id du pokémon désiré):
|
||||||
- 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)
|
|
||||||
|
|
||||||
## Pistes d'amélioration
|
- [Sprite normal](https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/6.png)
|
||||||
|
- [Sprite shiny](https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/shiny/6.png)
|
||||||
|
|
||||||
- Lecteur audio pour écouter le cri du Pokémon
|
Autres liens
|
||||||
- Internationalisation (FR / EN)
|
|
||||||
- Vue « mon équipe » (6 Pokémon choisis)
|
- [l'API pour récupérer les informations](https://pokeapi.co/api/v2/pokemon/6)
|
||||||
|
- [Les cris de bataille](https://pokemoncries.com/cries/1.mp3)
|
||||||
|
- [La documentation du paquet SQFlite](https://pub.dev/packages/sqflite)
|
||||||
|
- [La documentation du paquet HTTP](https://pub.dev/packages/http)
|
||||||
|
|
||||||
|
## Améliorations possible
|
||||||
|
|
||||||
|
- Mettre un lecteur audio pour écouter les cris des pokémons
|
||||||
|
- Rajouter la traduction (en fonction de la langue de l'application ? ☺)
|
||||||
|
- Compléter la vue détail avec des informations tirées de l'API
|
||||||
|
- Faire une vue "mon équipe" contenant 6 pokémons choisis en rajoutant un bouton "ajouter à mon équipe" sur la vue détail.
|
||||||
|
|
||||||
|
Amusez-vous !
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user