Spécification Technique du Modèle de Données univers

L'état du jeu est centralisé dans le dictionnaire principal univers, alimenté au démarrage par charger_univers().


1. Dictionnaire Global univers (Chargement)

Clé univers Fichier source Type Rôle
univers["joueurs"] joueurs.json dict Liste des joueurs et leurs possessions
univers["batiments_def"] batiments.json dict Référentiel / Catalogue des définitions de bâtiments
univers["batiments"] constructions_univers.json dict Carte des instances de bâtiments construites sur les astres
univers["technologies"] techno.json dict Référentiel / Catalogue des définitions de technologies

2. Structure des Données

A. Joueurs et Possessions (joueurs.json)

univers["joueurs"]["joueurs"] contient la liste des objets joueurs.

{
  "joueurs": [
    {
      "id": "J001",
      "nom": "Empire Zert",
      "poss_planetes": ["P001", "P002"],
      "poss_lunes": ["L001"],
      "technologies_connues": ["T_INFRA_1", "T_IA_1"],
      "recherches_en_cours": [
        {
          "techno": "T_PROPULSION_2",
          "effort_acquis": 45.0,
          "effort_total": 100.0,
          "priorite": 3,
          "tour_debut": 2
        }
      ],
      "livre_technologies": [],
      "livre_du_temps": []
    }
  ]
}

B. Bâtiments : Définitions vs Instances

1. Définitions / Catalogue (batiments.json)

Accès : univers["batiments_def"]["batiments"] (Liste de dictionnaires).

{
  "batiments": [
    {
      "id": "B_LABO_1",
      "nom": "Laboratoire de Recherche I",
      "effets": [
        {
          "cible": "effort_recherche",
          "operation": "add",
          "valeur": 20
        },
        {
          "cible": "quota_temps",
          "operation": "add",
          "valeur": 50
        }
      ]
    }
  ]
}

2. Instances sur le terrain (constructions_univers.json)

Accès : univers["batiments"]["batiments"] (Dictionnaire dont les clés sont les id_astre).

{
  "batiments": {
    "P001": [
      {
        "batiment_id": "B_LABO_1",
        "status": "done"
      },
      {
        "batiment_id": "B_MINE_1",
        "status": "in_progress"
      }
    ]
  }
}

C. Technologies (techno.json)

Accès : univers["technologies"]["technos"] (Liste de dictionnaires).

{
  "technos": [
    {
      "id": "T_IA_1",
      "nom": "Intelligence Artificielle de Gestion",
      "effets": [
        {
          "cible": "quota_temps",
          "operation": "mul",
          "valeur": 1.10
        }
      ]
    }
  ]
}

D. Format standardisé des Effets (effets)

Les objets d'effets dans les bâtiments et technologies suivent cette structure :

{
  "cible": "quota_temps",
  "operation": "add",
  "valeur": 50,
  "ressource": null,
  "type_objet": null,
  "race": null
}

3. Snippets d'accès rapide (Code de référence)

Indexation des référentiels (Lookups rapide en temps constant)

# Dictionnaire des définitions de bâtiments par ID
batiments_db = {b["id"]: b for b in univers.get("batiments_def", {}).get("batiments", []) if "id" in b}

# Dictionnaire des définitions de technos par ID
technos_db = {t["id"]: t for t in univers.get("technologies", {}).get("technos", []) if "id" in t}

# Dictionnaire des instances de bâtiments par ID d'astre
constructions_db = univers.get("batiments", {}).get("batiments", {})

Récupération de tous les bâtiments achevés d'un joueur

def obtenir_batiments_acheves_joueur(joueur, univers, batiments_db, constructions_db):
    batiments_acheves = []
    ids_astres = joueur.get("poss_planetes", []) + joueur.get("poss_lunes", [])
    
    for id_astre in ids_astres:
        for inst in constructions_db.get(id_astre, []):
            if inst.get("status") == "done":
                bat_def = batiments_db.get(inst.get("batiment_id"))
                if bat_def:
                    batiments_acheves.append(bat_def)
    return batiments_acheves