Accueil Technologies CodeCodeCodeur – Résumé du tournoi combat
CodeCodeCodeur Résumé du tournoi

CodeCodeCodeur – Résumé du tournoi combat

par Jérémy PASTOURET
Publié : Mis à jour le

Si l’événement CodeCodeCodeur ne vous dit rien, j’ai déjà réalisé un article qui en parle. Vous pouvez le retrouvez ici :

Je ne sais pas si vous vous y êtes inscrits, voire si nous nous sommes affrontés ! Mais je suis plutôt fier en disant que j’ai tenu trois rounds sur dix. Et j’ai perdu avec honneur : à égalité. Mon adversaire s’était inscrit au concours avant moi, il a donc gagné cette manche…

Petit rappel : l’idée était d’écrire quelques lignes de code en javascript, qui s’exécutent en moins d’une minute, pour vaincre son adversaire.

Les commandes disponibles

Commandes Disponibles CodeCodeCodeur

En terme d’actions, voici un récapitulaitf des possibilités :

  • Liste des parades
    • action.back 👉 reculer
    • action.highGuard 👉 se protéger en haut
    • action.lowGuard 👉 se protéger en bas
  • Liste des attaques
    • action.run 👉 courrir
    • action.attack 👉 attaquer
    • action.jumpAttack 👉 attaque puissante mais corps à corps
    • action.pull 👉 attaquer de loin

On avait aussi accès à la distance entre l’adversaire et nous, grâce à cette commande :

const dist = Math.abs(me.position - opponent.position);

Ainsi que d’autres variables utiles :

me.life //pour connaître notre vie
battle.tickLeft //pour connaître le nombre de tours restants

Bien sûr, tout ce que je vous ai marqué ci-dessus provient du code de base fourni par les organisateurs. D’ailleurs je trouve qu’ils ont bien présenté le tournoi. Pour être franc, je pense que même ceux qui connaissent très peu de choses en développement peuvent y arriver.

L’algorithme

Algorithme CodeCodeCodeur

Ils ont même fourni un algorithme de base aux participants. Je l’ai récupéré pour vous :

// Si la distance est supérieure à 10 cases
if (dist >= 10) {
	// Courir vers l'adversaire
	action.run();
} 
else if (battle.tickLeft <= 100) 
{
	// Sinon, si il reste moins de 100 tours
	if (me.life >= 50) 
	{
		// Si la vie de l'IA est supérieure à 50, effectuer une action offensive au hasard
		offensive[Math.floor(Math.random() * 4)]();
	} 
	else 
	{
		// Sinon effectuer une action défensive au hasard
		secure[Math.floor(Math.random() * 3)]();
	}
}
else 
{
	// Sinon, effectuer n'importe quelle action au hasard
	actions[Math.floor(Math.random() * 8)]();
}

C’est plutôt bien commenté donc je n’ai pas besoin d’en rajouter. Pour faire simple, l’algorithme de base mixe de l’attaque (en fonçant sur l’adversaire dès le début) et de l’aléatoire (en se défendant ou en attaquant de manière aléatoire).

Concernant mon algorithme, je compte bien vous le présenter. J’ai d’abord créé un algorithme orienté vers l’attaque uniquement, dans l’idée de foncer sur l’adversaire pour réaliser des attaques dans l’ordre. J’ai trouvé ça un peu risqué.

// Liste des attaques
const offensive = [
action.run,
action.attack,
action.jumpAttack,
action.pull,
];

for(var i = 1;i<=4;i++){
	offensive[i](); //offensive est un tableau de fonctions exécutables
}

Donc j’ai changé de technique… avec peu de temps pour le faire. Pour être honnête, j’y ai passé 30 minutes donc je n’ai pas pensé à tout. En même temps, puisque le script ne doit pas être trop long (inférieur à 1 minute), on ne peut pas créer un système de fou.

if(dist >= 10)
{
	action.walk();
}
else if(dist >= 3)
{
	action.pull();
}
else if(dist <= 1)
{
	action.jumpAttack();
}
else
{
	action.attack();
}

Comme vous pouvez le constater, c’est plutôt orienté attaque.

Je vais vous fournir un lien plus bas pour voir le replay de mes combats CodeCodeCodeur mais avant cela, je voulais vous parler de ce que j’ai appris en regardant mon dernier match. En fait j’ai complètement oublié de prendre en compte le temps restant, et surtout le fait qu’un adversaire pouvait avoir le même algorithme que moi. Il faut donc rajouter plus de conditions pour éviter un match ennuyeux où rien ne se passe, car on est à distance.

Conclusion

Trois bémols sur le tournoi CodeCodeCodeur, à améliorer par les organisateurs :

Tout d’abord, proposer des robots d’entrainement plus performants. Mais je ne me fais pas de souci, ils vont pouvoir créer des robots sympas avec tous les algorithmes des concurrents.

Deuxièmement, on ne savait pas de quel côté on allait démarrer (c’est à dire à droite ou à gauche du plateau de combat). Pour certains participants, leur algorithme n’était pas prévu pour car en salle d’entraînement nous étions toujours placés à gauche.

Enfin, on ne pouvait pas sauter par-dessus son adversaire pour réaliser une attaque de dos.

Vous pourriez aussi aimer

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.