Six Degrees of Kevin Bacon
Six Degrees — Analyse & Prototype
Ce document rassemble l'analyse, le design, le modèle de données et un prototype minimal (backend + frontend) pour un jeu en ligne entre potes inspiré du principe des Six Degrees of Kevin Bacon.
1) Objectif du jeu
Permettre à des joueurs de trouver le chemin le plus court entre deux personnes publiques (acteurs, réalisateurs, etc.) via des films/séries communs. Variante sociale pour un usage entre amis (ex. lier des amis à des célébrités, ou lier deux amis via événements/jeux communs).
Contraintes / décisions à prendre plus tard
- Quelle source de données utiliser (IMDb, TMDB, Wikidata...) — attention aux licences et limites d'usage.
- Stockage: graphe natif (Neo4j), base relationnelle, ou simple graphe en mémoire pour prototypage.
2) Données et licences
Options courantes :
- TMDB (The Movie Database): API gratuite (avec clé), bonne couverture, terms of use à respecter.
- IMDb: données propriétaires — usage restreint ; meilleure éviter pour un projet public sans licence.
- Wikidata: open data, moins "prête à l'emploi" mais très flexible.
Pour un prototype entre potes, on peut démarrer avec un petit jeu de données JSON extrait manuellement ou via TMDB.
3) Modèle conceptuel (graphe)
Noeuds:
Person(id, name, type: actor/director, known_for...)Title(id, name, year, type: movie/series)
Arêtes:
ACTED_IN/CREWED(Person — Title)
Chemin entre deux personnes = alternance Person → Title → Person → Title → ...
4) Algorithmes
4.1 Trouver le chemin le plus court
- BFS (Breadth-First Search) sur le graphe non orienté (ou bi-partite Person<->Title). Retourne le plus court chemin en nombre de sauts.
- Pour graphe très large, utiliser bidirectional BFS (départ des deux extrémités), bien plus rapide.
4.2 Optimisations
- Indexer par personId → list(titleId) et titleId → list(personId).
- Cacher résultats fréquents (Redis ou mémoire).
- Limiter profondeur max (ex: 6*2 sauts = 12 traversées si on compte Person+Title).
4.3 Mesures additionnelles
- Centralité (degène / betweenness) pour proposer des personnes "faciles".
- Popularité pour choisir des cibles (éviter personnes trop obscures dans mode casual).
5) Modes de jeu (idées)
- Classic: Trouver le chemin le plus court entre deux célébrités. (en solo ou à plusieurs)
- Challenge Temps: Trouver un chemin en X minutes.
- Co-op: Équipe de 2-4 joueurs construisent le chemin ensemble.
6) Scoring
Quelques suggestions de formule :
- Base points = (6 - degrees) * 100. (si degree = 0..6)
- Bonus temps si trouvé rapidement.
- Bonus créativité si le chemin n'est pas trivial (par ex. utiliser des titres rares).
7) API & endpoints (prototype)
GET /api/people?q=search— recherche de personnes.GET /api/title?q=search— recherche de films/séries.POST /api/path— corps{ fromPersonId, toPersonId }, retourne chemin (liste de nodes et edges) et métriques.
8) Architecture recommandée pour production
- Data ingestion: pipeline pour récupérer/normaliser TMDB/Wikidata -> stockage graphe (Neo4j / Dgraph)
- API: Node/Go service exposant endpoints + cache (Redis)
- Frontend: React + WebSocket pour jeu temps réel
- Auth & Social: OAuth / invites
- Analytics: suivre chemins populaires, taux de résolution