Histoday
Application de quiz historique quotidien avec modes multijoueurs en ligne, système gacha, mini-jeux et chat IA
FlutterDartFirebaseMultijoueur temps réelBlocGetItGroq AISystème Gacha
Ma passion pour l'histoire m'a conduit à développer Histoday : un jeu mobile qui transforme l'apprentissage de l'histoire en une expérience ludique et interactive.
Histoday est un jeu développé avec Flutter dont le concept central repose sur des quiz historiques quotidiens. J'ai voulu aller au-delà du simple quiz en imaginant un système de jeu en ligne permettant de s'affronter avec des amis ou d'autres joueurs du monde entier à travers des duels. Pour apporter davantage de compétition et d'objectifs, j'ai intégré un système de collection de personnages historiques avec un mécanisme gacha, ainsi qu'une variété de mini-jeux éducatifs et un chat innovant avec des mentors historiques propulsé par l'IA Groq.
D'un point de vue technique, le projet utilise une architecture Clean avec injection de dépendances (GetIt), une gestion d'état moderne (Bloc/Cubit), et Firebase pour la synchronisation cloud et le multijoueur en temps réel. L'authentification supporte Google Sign-In et email/mot de passe.
Une fois le jeu suffisamment testé et abouti, je compte le déployer sur le Play Store et l'App Store pour le rendre accessible au grand public.
Quiz Quotidien




Le quiz quotidien est la fonctionnalité phare : chaque jour de l'année (1er janvier au 31 décembre) propose un quiz unique lié aux événements historiques survenus ce jour-là. Le package intl formate les dates, tandis que des fichiers JSON structurés stockent 365 quiz avec questions à choix multiples, explications détaillées, et anecdotes historiques.
Le système utilise un Cubit pour gérer l'état du quiz : questions chargées depuis Firestore, progression trackée, score calculé en temps réel. Les Deniers gagnés dépendent du score et du temps de complétion. Le quiz se débloque à minuit et reste disponible 24h, créant une routine d'engagement quotidien. Un calendrier historique avec package table_calendar permet de consulter les quiz passés.
Multijoueur en Temps Réel




Le système multijoueur offre deux modes pour s'affronter en 1v1 : un mode Buzzer rapide où le premier à appuyer peut répondre, et un mode Card Duel stratégique avec des cartes de personnages historiques. Les parties sont synchronisées en temps réel via Firebase, permettant une expérience fluide entre les deux joueurs. Les joueurs peuvent également parier des Deniers sur leurs performances pour rendre les duels plus excitants.
Card Duel - Jeu de Cartes Stratégique




Mode de jeu où chaque joueur reçoit 10 cartes avec des dates historiques aléatoires. À chaque tour, un joueur pose une carte et l'adversaire doit répondre à une question liée à cette date. Si l'adversaire répond correctement, il gagne le point, sinon le point revient au joueur qui a posé la carte. Le premier à atteindre 5 points l'emporte. Les parties se synchronisent en temps réel via Firebase et les gains en Deniers dépendent du pari initial.
Buzzer Multijoueur



Mode de jeu rapide où une question est posée simultanément aux deux joueurs. Le premier à appuyer sur le buzzer peut répondre. S'il répond correctement, il remporte le point, sinon l'adversaire a une chance de tenter sa réponse. Les parties se synchronisent en temps réel via Firebase pour détecter qui a buzzé en premier.
Chat IA avec Mentors Historiques




Fonctionnalité permettant de converser avec des personnages historiques (Einstein, Cléopâtre, Napoléon, etc.) via l'API Groq. Chaque personnage a sa propre personnalité et son style de langage pour rendre les conversations authentiques. Les échanges sont sauvegardés dans Firebase pour pouvoir les consulter plus tard.
14 Mini-Jeux Éducatifs




Collection de 14 mini-jeux thématiques débloqués progressivement par niveau joueur. Exemples : Timeline (placer événements sur frise chronologique), Devinettes (indices progressifs), Memory historique, Cartes géographiques (situer batailles), Portrait chinois, Mots croisés thématiques. Chaque mini-jeu rapporte des Deniers et XP.
Les mini-jeux partagent une architecture commune : classe abstraite MiniGameBase avec méthodes initialize(), play(), calculateScore(). Chaque jeu concret étend cette base. Le package shared_preferences sauvegarde les high scores localement. Les assets incluent 200+ images historiques optimisées avec flutter_image_compress. Les animations flutter_animate ponctuent les succès. Un système d'achievements Firebase tracking unlock les mini-jeux et débloque des badges de collection.
Character of the Day


Chaque jour, un personnage historique différent est mis en avant. Je me suis inspiré du livre "The 100: A Ranking of the Most Influential Persons in History" de Michael H. Hart pour sélectionner les 100 premiers personnages. Chaque personnage est présenté avec une description et un lien vers sa page Wikipedia pour approfondir. Les personnages n'apparaissent qu'une fois par an, permettant de les collectionner et de les consulter à tout moment dans l'application.
Profils, Classements et Économie





Le système de profils affiche les statistiques de chaque joueur : quiz complétés, victoires en multijoueur, personnages collectionnés, et Deniers accumulés. Un système de niveaux et de badges récompense la progression, tandis qu'un classement global permet de se mesurer aux autres joueurs avec des rangs allant de Bronze à Diamant.
Les Deniers sont la monnaie virtuelle du jeu, gagnés en complétant des quiz quotidiens, en remportant des parties multijoueurs ou en jouant aux mini-jeux. Ils permettent d'acheter des éléments de personnalisation pour son avatar et d'autres bonus dans le jeu.
Animations et Design
L'UI adopte un dark theme cohérent avec palette pourpre/or évoquant l'histoire. Le ThemeData utilise ColorScheme.dark avec primaryColor violet profond. Les fonds emploient LinearGradient et BoxDecoration pour profondeur visuelle.
Les animations sont omniprésentes via flutter_animate : fadeIn sur apparitions, slideY sur listes, scale sur boutons. Les transitions de pages utilisent Hero widgets pour continuité visuelle. Le package lottie anime les loaders, succès, défaites avec des animations vectorielles fluides. Les cartes utilisent Material avec elevation et shadowColor animés au hover. Un système de particles (package simple_animations) crée des confettis lors des victoires. Le design responsive s'adapte aux tablettes avec LayoutBuilder. Les polices Google Fonts (Cinzel pour titres, Lato pour body) renforcent l'esthétique historique.