(http://gameprog.it/hosted/guntactyx/images/title1.jpg)Salut tout le monde ! Comme le serveur de NC est un peu foutu et que je peux pas mettre la V2 tant qu'il est pas réparé : j'ai décidé de me remettre à un projet qui m'avait l'air sympa : la programmation de robot de combat sur plateforme multi-agent (j'ai trouvé ça ua hazard sur le net, vous pensez bien que chercher un pareil dans google ne me serait pas venu à l'esprit !

)
Bon alors finit le blabla mais kézako ? C'est simple : il s'agit en fait de programmer des bots de combat dans un lagage proche du C (j'avais déjà voulu le faire mais les seuls sites que j'avais trouvé, ca ressemblait plus à du JAVA). De plus, l'avantage de celui que j'ai choisit : il est en 3D (c'est plus joli mais peut aussi etre éxécuté en 2D). Il y a plusieurs modes de jeu : DM, CTF et course je crois.
Le but est simple : coder le meilleur robot ! sachant que chacun à un proc de 10KHz et 32 de ram (et oui ! vous etes limité ! alors faudra se creuser la tete pour son robot ne lague pas avec un code de terminator V32.1 Béta qui fait que des bugs à la con... (comment ca j'me suis tiré 5 balles dans le bas avant de pointer mon arme sur le vieux monsieur de la boutique ?? --> Référence à Ghost in the Shell 2 : inocence)). Apres, un petit compilateur compile vos bots et un simulateur les fait combatre.. un contre un ? oui c'est possible ! Mais ca va quand meme jusqu'à 4 équipe de 64 bots... Et là ! Ca devient sport ! Parce que quand une pluie de grenade est envoyée : s'ils sont 64 avec les memes instructions.. Bah ils sont tous dans la meme zone ! Mais bon.. un autre avantage c'est que plus ils sont nombreux sur une cible : plus ils sont forts.. Enfin le challenge est parsemé de pleins de petites réfléxion comme ca..
Le but final de la chose est bien sur de remporter les tournois organisés assez souvent par le site.. Plusieurs centaines de combats pour départager les meilleurs. A noter que les robots peuvent marcher, courir, possède une arme (a munition limitées !!), des grenades, peuvent rammasser des objet sur les cadavres des autres robots..
Pour vous donner une idée : le meilleurs des premiers robots (roger) avait pour point fort : il calculait le déplacement des adversaires (et oui, parce que les balles ont une vitesse ! Alors faut calculer l'angle de tir en fonction du déplacement de l'adversaire !) et se déplacait **orthographe !** lui au hazard ! Un p'tit exemple de code :
/* "rookie.sma" - simple control code for a team of warriors */
#include "core" // include core functions
#include "math" // include math functions
#include "bots" // include bot specific functions
main() { // the main entry point of the script
// defines a value to recognize enemy warriors
new const ENEMY_WARRIOR = ITEM_WARRIOR | ITEM_ENEMY;
// specifies a time limit to force a change in direction of the warrior
new const float:MAX_TIME = 10.0 // note the "point" in the constant
new float:lastTime = getTime()
// loops forever (or better, until the bot dies)
while(true) {
new float:thisTime = getTime()
if(thisTime-lastTime > MAX_TIME) {
// changes direction at random every MAX_TIME seconds
lastTime = thisTime
new float:randAngle = float(random(21)-10)*1.5708
rotate(getDirection()+randAngle)
} else if(sight() < 5.0) {
// if the warrior is within 5 meters from a wall,
// change slightly its direction
rotate(getDirection()+0.31415);
} else {
// give a look for the nearest enemy
new item = ENEMY_WARRIOR;
new float:dist = 0.0
new float:yaw
watch(item,dist,yaw)
if(item == ENEMY_WARRIOR) {
// Found one enemy!
// Do you walk? Stop!
if(isWalking()) stand();
// Do you run? Walk!
else if(isRunning()) walk();
// Rotate towards enemy direction adding
// the current direction (absolute) to the
// enemy direction (relative to the head)
rotate(getDirection()+yaw);
// aim and see what is in front of the gun.
new item
aim(item)
// It's an enemy, shoot!
if(item & ENEMY_WARRIOR == ENEMY_WARRIOR)
shootBullet()
} else {
// Can't find any enemy!
// Do you walk? Run!
if(isWalking())
run();
// Are you standing?
else if(isStanding()) {
// Maybe you collided into someone...
if(getTouched() & ITEM_WARRIOR != 0)
// if that is true, make a quarter turn...
rotate(getDirection()+1.5708);
else
// ... otherwise walk.
walk();
}
}
}
}
}
Enfin moi, je sens que je vais bien m'amuser. Je vous lache le site :
http://gameprog.it/hosted/guntactyx/index.php.
Si ca vous dit de coder vos robots avec moi ou d'en faire un ensemble : moi ca me dit !! J'peux meme m'occuper de mettre la doc, notre code dans le wiki de façon à se que chacun puisse voir pour essayer de participer. Bref, peut-être un futur projet en commun. Allez, j'vous laisse. Un programmeur qui aime bien les armes..