Une bataille d’intelligences se prépare pour nos jus de liens en herbe, cette année sur le terrain de l’école Supinfo Caen 🧠⚔️
Avant la journée d’affrontement du 22/05/2024, pendant laquelle les équipes des NSI d’Argentan affronteront celles des 1A de Supinfo sur l’arène virtuelle Pynals, un Capture The Zone !
A vos claviers et vos neurones, il est temps de coder 🤖
🗺️ La map
Dans l’arène PYnals, 2 équipes se combattent pour prendre le contrôle d’une zone au centre de la map ci-dessous 👇
Map réalisée avec ❤️🔥 par le talentueux Mathys (le 4e Ma de l’équipe)
Symétrique de 30×30 31×31 cases, cette map est constituée de 2 zones de spawn, 1 pour chaque équipe, une en bas à gauche, et une en haut à droite, reliée par plusieurs chemins. Attention à ne pas vous égarer dans les buissons ralentisseurs, vous risqueriez de mettre un certain temps pour retrouver chemin !
Chaque équipe est constituée de 3 agents (=robots virtuels), qui apparaissent au début d’une manche dans la zone d’équipe dans un coin de la map. Au spawn, l’agent se verra attribuer un profile par le serveur de jeu, selon la demande formulée dans son programme (voir statistiques dans le paragraphe ci-après 👇).
🏆Condition de victoire
Pour gagner, une équipe doit obtenir le score le plus fort à la fin de la partie.
2 manière de finir la partie :
- Expiration du temps réglementaire de 5 minutes
- Atteinte du score maximal de 200 points par une équipe
Le score de chaque équipe est mis à jour par l’arbitre du jeu, en comptabilisant les points des agents de cette équipe :
- 5 points accordés par kill d’un agent ennemi
- 20 secondes dans la zone centrale sans aucun ennemi octroie 100 points à l’équipe contrôlant la zone
- Le temps de présence dans la zone d’une équipe est cumulé, et est mis pause (mais jamais réinitialisé) si 1 ou plusieurs ennemi(s) rentre(nt) dans la zone
Le code de l’arbitre made with 💖 by Evann d’Argentan est 👉 disponible sur replit. Cet agent un peu spécial car invisible et invincible, sera dans l’arène durant chaque manche, pour modifier le header du viewer et afficher le score (🏆) ainsi que le temps cumulé dans la zone par équipe (⏱️).
👾 Les agents
3 profiles sont disponibles par équipe avec les statistiques suivantes : ”Light”, ”Medium”, ”Heavy”. Pour les choisir, nommer votre agent du nom de celui que vous souhaiter incarner (le paramètre playerId du constructeur de la classe Agent).
Statistics | Light | Medium | Heavy |
---|---|---|---|
Life points | 30 | 60 | 100 |
Couldown between 2 moves | 100 | 250 | 500 |
Couldown between 2 fires | 200 | 400 | 800 |
Hit fire | 15 | 25 | 30 |
🏆 Les équipes
- Supinfo Caen
- 6 joueurs
- 3 joueurs distincts par équipe
- 2 équipes : SC1, SC2
- JDA Argentan (JA)
- 7
à 8joueurs - 1 équipe de 3 et 1 de 4 avec 1 personne remplaçante
- 2 équipes : JA1, JA2
- 7
⏱️ Déroulé de la journée
- 10h-10h30 : Arrivée des élèves. Accueil de Supinfo
- 10h30-11h : Présentation du challenge et des mises à jour, installation des environnements en LAN
- 11h-12h30 : Début du challenge. Chaque participant entraine son robot dans une arène virtuelle d’entrainement (réplique de l’arène officielle) mais en mode bac à sable
- 12h30-13h30 : Déjeuner sur le campus
- 13h30-15h : Début de l’affrontement officiel. Phase de sélection (phase 1)
- 15h-15h30 : Finale des affrontements (phase 2) entre les 2 meilleures équipes
- 15h30-16h : Affichage du classement final, code review des robots de l’équipe gagnante
- 16h : Départ des élèves de Supinfo
Phase 1
🎯 Sélection des 2 meilleures équipes JA et SC en 2 manches.
⏱️ Durée maximale 1h30 : 5 minutes par manche, 2 minutes de pause entre chaque manche
✅ Modification du code des agents équipes spectatrices autorisé
⛔ Modification du code interdit pour les équipes participantes en cours de manche, seulement autorisé pendant la pause inter-manche
– 1ere manches : 45 minutes max : 6×5 minutes max d’affrontement + 6×2 minutes de pause inter-manche + 3 minutes de pause avant début 2e manche
- SC1 – JA1
- SC2 – JA2
- SC1 – JA2
- SC2 – JA1
- JA1 – JA2
- SC1 – SC2
– 2e manches : 45 minutes max : 6×5 minutes max d’affrontement + 6×2 minutes de pause inter-manche + 3 minutes de pause avant début finale
- SC1 – JA1
- SC2 – JA2
- SC2 – JA1
- SC1 – JA2
- SC1 – SC2
- JA1 – JA2
Phase 2
🎯 Finale en 2 manches gagnantes (3 manches si égalité)
⏱️ Durée maximale 30 minutes : 5 minutes par manche, 5 minutes de pause entre chaque manche
⛔ Modification du code interdit pour les équipes de finale en cours de manche, seulement autorisé pendant la pause inter-manche
🎲 L’arène
Pour commencer à coder votre agent dans l’arène, il vous faut télécharger l’API. Deux options s’offrent à vous :
- Faire un fork sur Replit (un IDE full web collaboratif), pour rien n’avoir un installer : au lien 👉 https://replit.com/@jusdeliens/pytactx
- Cloner l’API localement sur votre ordinateur en la récupérant sur Github au lien 👉 https://github.com/jusdeliens/pytactx.git . Dans ce cas, vérifier sur votre réseau local que votre parefeu et/ou proxy autorise la connexion sortante le port 1883 (ce qui n’est pas le cas sur la plupart dans la plupart des organisations). Sinon mettez-vous en partage de connexion 4G ou bien optez pour la solution Replit ci-dessus.
Vous n’aurez le droit de démarrer votre programme qu’une seule fois au début d’une partie, suite à quoi aucune interaction ne sera possible avec votre programme en cours d’exécution. Pensez-donc a bien coder votre agent pour qu’il soit autonome.
Dans une boucle principale, le programme réalise les actions suivantes :
- Se connecter au serveur de jeu à l’adresse précisée sur le port 1883, en précisant le nom du joueur à incarner dans l’arène
- Pendant la phase d’entrainement avant le jour J sur les arènes ”Pynals-Training” : mqtt.jusdeliens.com
- Pendant les phases de préparation le jour J sur les arènes ”Pynals-Training” : 192.168.42.42
- Pendant l’affrontement le jour J sur l’arène ”Pynals” : 192.168.42.42
- Attendre que le serveur de jeu démarre s’il est en pause
- Puis tant que le joueur est en vie, exécuter les instructions autorisées par l’API : déplacement, tir, changement de couleur …
- En cas de mort, redémarre la boucle principale
A chaque agent.update(), l’API interroge le serveur de jeu, met à jour l’état de l’agent enregistrée par le serveur (comme un pull git), puis envoie toutes les actions demandées avant l’update (bufferisées localement comme un git commit avant update, et envoyées durant l’update comme un git push). Le serveur de jeu vérifie et effectue les requêtes demandées valides périodiquement, puis notifie les clients viewer pour afficher l’état des agents dans l’arène.
L’arène est visualisable via son viewer dans un navigateur (Google Chrome de préférence), aux adresses et ports suivants :
- Pendant la phase d’entrainement sur les arènes ”Pynals-Training” avant le jour J : 👉 https://play.jusdeliens.com
- Pendant les phases de préparation le jour J sur les arènes ”Pynals-Training” : 👉 http://192.168.42.42:5500, en sélectionnant au login ”Join a private arena” puis le port 9001
- Lors de l’affrontement, le viewer sera visible uniquement via projection sur un écran
Pour plus d’informations sur l’API, rendez-vous sur 👉https://tutos.jusdeliens.com
💻 Le matériel
Chaque candidat possède un ordinateur portable (sous Windows ou Unix) qu’il doit emmener avec lui le jour J, avec une configuration minimale permettant d’installer et d’exécuter
- Python : la dernière version de l’interpréteur
- 1 IDE : La dernière version de VS Code
- L’extension officielle Python par Microsoft, à installer sous VS Code
- La dernière version du navigateur Google chrome
- Un port RJ45 ou bien 1 port USB 3.0 pour connecter un adaptateur USB-RJ45 100 ou 1000 Mbps
Le candidat doit être administrateur de sa machine de sorte à pouvoir paramétrer ses interfaces réseaux pour désactiver/activer ses interfaces et configurer les paramètres IPv4 (ip et masque de sous-réseau).
⛔ Interdits ✅ autorisés
✅ Seule l’API officielle de PytactX (via Github ou Replit) est autorisée pour programmer un agent
⛔ Interdiction de modifier les sources de l’API : à chaque lancement du programme Agent, le serveur vérifie l’intégrité des sources. En cas de détection de modification, le joueur est banni du tournoi
✅Pour développer son programme avant et pendant le jour J, le candidat pourra utiliser son IDE avec certaines extensions (linters, deboggeurs, intellisense) ainsi que l’API et les dépendances installées
⛔Par soucis d’équité et pour des raisons académiques, il est interdit de consulter des IA génératives pour écrire tout ou partie du code qui pourrait être utilisé le jour J. Le candidat veillera donc à désactiver tout extension Copilot ou similaire, et n’utilisera pas de chat type GPT.
✅Le jour J, durant une partie, l’apprenant ne pourra utiliser qu’un seul ordinateur qui devra être hors ligne et ne pourra être connecté qu’au LAN qui sera dépourvu de routeur (et donc dépourvu de connexion Internet). Le candidat veillera à désactiver ses cartes wifi, bluetooth et tout autre interface réseau
⛔Interdiction pour son ordinateur portable d’être connecté à un autre réseau. Interdit également de tenter des attaques réseaux (de type déni de service) qui pourrait nuire au bon déroulement de l’évènement
✅Seuls les noms des agents donnés par le serveur par équipe pourront être sélectionnés par les joueurs de cette équipe
⛔ Aucun autre nom d’agent ne sera toléré. En cas de tentative d’usurpation de nom d’agent, le joueur sera banni du tournoi
✅Entre chaque partie, le candidat disposera de quelques minutes pour modifier son programme d’Agent, pour pouvoir sélectionner son profile ou corriger quelques lignes de code si besoin.
⛔Durant la partie, interdiction au candidat d’interagir avec son programme en cours d’exécution
ℹ️ Plus d’informations
N’hésitez pas à 👉nous rejoindre sur le serveur discord pour poser vos questions ou nous partager vos feedbacks.
Bon courage à vous et à bientôt pour l’affrontement ⚔️