Skip to main content

Six Degrees of Kevin Bacon

Six Degrees — Analyse & Prototype

Ce document rassembleprésente l'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.


📊 Source de données

  • TMDB (The Movie Database) :
    • API gratuite avec clé,
    • excellente
    • Excellente couverture,couverture
    • simple
    • Simple à utiliser.utiliser
    • ➡️
    • Extraction On extrait d’un sous-ensemble (personnes + films/séries) et on stockestocké en local pour éviter les limites de requêtes.

      tes

💾 Stockage

  • Neo4j Community Edition :
      base
    • Base graphe native, parfaiteparfaitement pouradaptée
    • ce type de problème. ➡️
    • Pas besoin de surcouche relationnelle,relationnelle
    • et l’
    • API Cypher est idéale pour trouver des chemins.

      chemins

⚙️ Backend

  • Node.js (Express) :
      rapide à mettre
    • Mise en place,place bonnerapide
    • inté
    • Intégration avec Neo4j via neo4j-driver.driver
    • ➡️
    • Endpoints REST simples pour recherche et calcul de chemin.chemin


🎨 Frontend

  • React + Vite :
      léger,
    • Léger moderne,et parfaitmoderne
    • pour un prototype. ➡️
    • WebSocket pour mode temps réel (co-op, challenge).

📐 Modèle de données (fixé)

Noeuds

  • Person Person {id, name, type, popularity}
  • Title {id, name, year, type}

Arêtes

  • ACTED_IN (Person → Title)
  • CREWED (Person → Title)

⚙️🔎 Algorithmes

  • Bidirectional BFS pour trouver le chemin le plus court (rapide et efficace).
  • Cache mémoire (simple Map en Node.js) pour stocker les résultats récents.cents
  • Profondeur max = 12 (équivalent à 6 degrés).

🎮 Modes de jeu (retenus)

  • Classic : trouver le chemin le plus court entre deux célébrités.s
  • Challenge Temps : limite de 2 minutes pour trouver un chemin.chemin
  • Co-op : 2 à 4 joueurs construisent le chemin ensemble via WebSocket.WebSocket

🏆 Scoring (fixé)

  • Base points = (6 - degrees) × 100
  • Bonus temps : +50 points si trouvé en moins de 1 minute.minute
  • Bonus rareté : +50 points si le chemin inclut un titre peu populaire (< seuil TMDB popularity).

🌐 API (fixée)

  • GET /api/people?q=search → recherche personnes
  • GET /api/title?q=search → recherche films/séries
  • POST /api/path → calcule chemin { fromPersonId, toPersonId } ➡️
    • Retourne : chemin (liste de nodes/edges), longueur, score calculé.

🏗️ Architecture finale

  • Data ingestion : script Node.js qui appelle TMDB et insère dans Neo4j.Neo4j
  • Backend : Express + Neo4j-driver + cache mémoire.moire
  • Frontend : React + Vite + WebSocket.WebSocket
  • Auth : simple login par pseudo (pas besoin d’OAuth pour usage privé).
  • Analytics : log en mémoire des chemins joués (top 10 affichés en frontend).

🚀 Prototype minimal (MVP)

  • Script d’ingestion TMDB → Neo4j.Neo4j
  • Backend Express avec 3 endpoints.endpoints
  • Frontend React avec :
    • Formulaire pour choisir deux personnes
    • Affichage du chemin (liste ou graphe visuel avec vis.js ou d3.js)js)
    • Timer pour mode Challenge Temps
    • WebSocket pour mode Co-op