universL'état du jeu est centralisé dans le dictionnaire principal univers, alimenté au démarrage par charger_univers().
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 |
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": []
}
]
}
joueur.get("poss_planetes", []) et joueur.get("poss_lunes", []).joueur["technologies_connues"].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
}
]
}
]
}
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"
}
]
}
}
bat_instance["batiment_id"] (et non "id").bat_instance["status"] == "done" avec un s (et non "statut").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
}
]
}
]
}
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
}
cible : "quota_temps", "effort_recherche", "prod_ressource", etc.operation :
"add" : Bonus fixe additionnel (+X)."sub" / "sup" : Malus fixe à soustraire (-X)."mul" : Coefficient multiplicateur (×X).ressource, type_objet, race) : si renseignés, l'effet ne s'applique que si le contexte correspond.# 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", {})
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