Battle Arena devient algo-battle

algo-battle : l'arène des bots de DevHub

Des chars pilotés par ton code, par de simples requêtes HTTP. L'arène est maintenant un donjon : le niveau 0 reste ouvert à tous comme avant, le niveau 1 se joue avec ton compte Discord et rapporte de l'XP, et le niveau 2 se prépare.

L'arène en ce moment

Connexion…
–chars en jeu · niveau 0
–chars en jeu · niveau 1
–joueurs classés · niveau 1
–kills depuis le début · niveau 0
–tirs depuis le début · niveau 0

Niveau 1 · classement par XP

  1. Chargement…

Niveau 0 · kills de tous les temps

  1. Chargement…

Le visualiseur a déménagé sur algo.devhub-community.fr : un onglet par niveau, en direct, et une page de stats avec le classement complet et la fiche de chaque joueur (XP, kills, précision, heures où il est souvent là, derniers combats).

Les niveaux

Niveau 0 · ArèneNiveau 1 · Les CatacombesNiveau 2 · Machine learning
Accèsouvert à tousouvert à tousà 500 XP (bientôt)
Connexionpseudo seul, comme Battle Arenaobligatoire : compte Discordobligatoire
Adresse/api/join, /api/move…/api/niveau/1/join…
XPaucune+15 par kill, −8 par mort, +1 par fuyard
Le défiles bots des autres joueursen plus, des fuyards qui esquiventdes adversaires qui apprennent de vos bots
Charsautant que tu veux3 par compte

Aux deux niveaux, un char peut avoir 10 balles en vol en même temps. Pourquoi pas d'XP au niveau 0 ? Sans compte, rien ne prouve qui pilote un char : n'importe qui peut envoyer des ordres au char d'un autre. Au niveau 1, chaque char est attaché à un compte.

Jouer au niveau 0

L'API de Battle Arena n'a pas changé : les bots qui jouaient avant marchent toujours, sans modification.

RouteCorpsCe que ça fait
POST /api/join{"username": "MonBot"}entre dans l'arène, renvoie ton player_id
POST /api/moveplayer_id, direction_x, direction_yroule dans cette direction (entre −1 et 1)
POST /api/shootplayer_id, direction_x, direction_ytire dans cette direction
GET /api/statechars, balles, obstacles, taille de la carte
GET /api/statstotaux de l'arène et meilleurs joueurs du moment
POST /api/leaveplayer_idquitte l'arène
bot_niveau0.py
# pip install requests
import requests, time

API = "https://devhub-community.fr/api"
pid = requests.post(f"{API}/join", json={"username": "MonBot"}).json()["player_id"]

while True:
    etat = requests.get(f"{API}/state").json()                # qui est où ?
    requests.post(f"{API}/move", json={"player_id": pid, "direction_x": 1, "direction_y": 0})
    requests.post(f"{API}/shoot", json={"player_id": pid, "direction_x": 0, "direction_y": -1})
    time.sleep(0.1)

Les règles

  • Carte de 100 × 100 avec 20 obstacles ; les balles rebondissent sur les bords.
  • 100 PV, 10 dégâts par balle ; balle à 15 unités/s, char à 5 unités/s ; un tir toutes les 0,5 s.
  • La vie remonte toute seule après 3 s sans dégât, plus vite à l'arrêt qu'en roulant.
  • Après une mort, on peut revenir 10 s plus tard ; un char qui ne reçoit plus d'ordre pendant 120 s est retiré.
  • Toutes les valeurs exactes : GET /api/regles. Documentation interactive : /api/docs.
Trop de requêtes d'un coup : le serveur répond 429 avec l'en-tête Retry-After. Attends ce délai et recommence : 10 tours par seconde suffisent largement.

Jouer au niveau 1

  1. Sur le Discord DevHub, tape /algo-battle connexion et choisis ton mot de passe (8 caractères minimum, sans ton pseudo dedans). Ton identifiant, c'est ton pseudo Discord (ou ton identifiant Discord en chiffres).
  2. Ton bot entre avec POST /api/niveau/1/join : identifiant, mot_de_passe, char (1, 2 ou 3) et un nom pour ton char. Il reçoit un player_id qui reste secret.
  3. Ensuite, mêmes routes qu'au niveau 0 sous /api/niveau/1/ : move, shoot, state, leave, plus me pour l'état de ton char.
  4. /algo-battle profil sur Discord affiche ton XP, ton rang et tes kills.
bot_niveau1.py
import os, requests, time

BASE = "https://devhub-community.fr/api/niveau/1"
corps = {"identifiant": os.environ["ALGO_IDENTIFIANT"],     # ton pseudo Discord
         "mot_de_passe": os.environ["ALGO_MOT_DE_PASSE"],  # jamais écrit dans le code
         "char": 1, "nom": "MonBot"}
pid = requests.post(f"{BASE}/join", json=corps).json()["player_id"]

while True:
    etat = requests.get(f"{BASE}/state").json()
    fuyards = [p for p in etat["players"] if p.get("fuyard")]   # +1 XP chacun
    requests.post(f"{BASE}/move", json={"player_id": pid, "direction_x": 1, "direction_y": 0})
    time.sleep(0.1)

Les Catacombes sont plus grandes et plus encombrées que l'arène, les balles y vont plus vite, et des fuyards y tournent en permanence : des chars pilotés par le jeu qui ne tirent pas, mais esquivent très bien et vont plus vite que toi. Seul, on ne les rattrape pas : il faut anticiper, les coincer ou chasser à plusieurs. Dans state, ce sont des joueurs avec "fuyard": true.

XP et bonus de loot

  • +15 XP par kill, −8 XP par mort, +1 XP par fuyard abattu. L'XP ne descend jamais sous 0.
  • Des garde-fous empêchent le farm : l'XP gagnée par heure est plafonnée, et tuer encore la même victime rapporte de moins en moins.
  • Le bonus de chance de loot monte doucement tant que ton bot joue (jusqu'à 5 %). Il servira pour le loot des prochains niveaux.
  • À 500 XP, le niveau 2 · Machine learning t'attend dès son ouverture : l'XP gagnée maintenant compte déjà.

Un script, une boucle, et ton char est dans l'arène. Rendez-vous sur le panel pour le regarder jouer.