Docs Concepts clés

Mode équitable

Un client injecté dans le jeu peut lire toute la carte. Le mode équitable ne montre au Bot que ce qui se trouve dans son champ de vision — comme pour un joueur humain, et comme le veut la règle de l’arène.

Les capacités d’observation de ce projet viennent du fait que « le client détient l’état de tous les joueurs » : l’instantané contient toutes les unités de la carte, y compris les ennemis cachés dans le brouillard de guerre. C’est très pratique pour déboguer, mais injuste en compétition.

Le mode équitable demande au SDK de filtrer selon votre vision :

python tools/play.py --bot my_bot.py --fair
python -m openwar3 run my_bot.py --inst 5 --fair
from openwar3 import Game, run
g = Game(inst=5, fair=True)            # en utilisant Game directement
run(MyBot, inst=5, fair=True)          # ou en passant par le lanceur

Ce qui est filtré

ContenuEn mode équitable
UnitésToutes les vôtres + les unités ennemies et neutres que votre camp voit à cet instant
Objets au solSeulement ceux qui sont dans la vision de vos unités (vision de jour / de nuit calculée séparément d’après les tables de données)
Table de productionSeulement les bâtiments visibles (impossible de voir ce que l’adversaire entraîne)
ÉvénementsLes vôtres ; ceux qui sont visibles (ou l’ont été dans la dernière seconde) ; les dégâts infligés par votre camp

D’où vient la vision

  • Chaque unité de l’instantané porte un masque de visibilité : le bit p = le joueur p la voit à cet instant (seuls comptent les joueurs 0 à 11 ayant des unités sur la carte ; vos propres unités vous sont toujours visibles). u.visible_to(g.me()) le lit directement, sans attente.
  • Pour un point quelconque : g.visible(x, y) interroge le moteur (visible / brouillard de guerre / masque noir) via la voie rapide, environ une frame par appel. Si vous devez juger de nombreuses unités pendant un tick, utilisez u.visible_to() de l’instantané au lieu d’appeler g.visible() pour chacune.

La mémoire des ennemis : last_seen

Un joueur humain se souvient d’avoir « vu un groupe de pillards par là tout à l’heure ». Le SDK tient ce registre pour vous : à chaque rafraîchissement de l’instantané, il note les unités ennemies et les creeps que votre camp voit à cet instant (dernière position, points de vie, heure) ; il les efface quand il les voit mourir, et tout est remis à zéro à chaque nouvelle partie.

for u, t, age in g.last_seen(max_age=60):         # ennemis vus au cours des 60 dernières secondes de jeu
    print(u.type, u.x, u.y, f"il y a {age:.0f}s")

heroes = [r for r in g.last_seen() if r[0].is_hero]   # où étaient les héros adverses la dernière fois
camps  = g.last_seen(owner="creep")                   # creeps déjà repérés

En mode équitable, c’est votre seule « source d’information sur l’adversaire » — comme pour un joueur humain. Le mode normal enregistre lui aussi selon la vision : le même code fonctionne dans les deux cas.

Jouer en tant que joueur N

python tools/play.py --bot my_bot.py --player 1 --attach

--player N (ou Game(player=N)) fait jouer le Bot en tant que joueur N : il ne peut commander que les unités du joueur N. Pour faire s’affronter deux IA, ouvrez deux canaux de ce type dans la même partie.

En mode local, l’équité est une convention, pas une barrière de sécurité

Sur votre propre machine, rien ne peut empêcher un programme de lire toute la carte. --fair est une contrainte que vous vous imposez ; les vrais matchs sont garantis par le processus arbitre de l’Arène : le Bot ne touche jamais à la mémoire partagée, ne reçoit que des observations filtrées par l’arbitre selon la vision, ne peut que soumettre des actions, et chaque action est d’abord contrôlée pour vérifier que l’unité lui appartient.

Pourquoi l’activer dès maintenant

  • Ce sera la règle de l’arène : en écrivant dès maintenant en mode équitable, vous n’aurez pas une ligne à changer le moment venu ;
  • Privé de l’information de toute la carte, votre Bot révèle son vrai niveau (le cerveau de référence dépend encore beaucoup de cette information globale, par exemple du point ciblé par le capitaine de l’ordinateur — c’est justement un bon test) ;
  • La reconnaissance, la mémoire et le jugement écrits en mode équitable : voilà les capacités d’IA qui ont une vraie valeur.