Java : problème de radar sur robocode - Java - Programmation
MarshPosté le 06-04-2010 à 14:57:58
Bonjour,
J'ai fait une recherche concernant robocode et le dernier sujet datant de 2003, je me permets d'en créer un nouveau. Je ne sais pas si beaucoup de membres de ce forum utilisent ce logiciel, j'espère que quelqu'un pourra m'apporter son aide. En fait, je participe à un concours d'initiation java et le principe est de réaliser un robot sur robocode et de le faire combattre.
L'idée principale serait de faire longer les murs du terrain à mon robot en attendant de scanner un adversaire, et à partir de ce moment là lui foncer dessus et tirer des projectiles puissants. Mon problème, c'est que mon robot a beau passer à 1 cm du robot adverse il ne le scanne jamais, ou en tout cas ne l'attaque jamais. Donc voilà, si quelqu'un pouvait jeter un coup d'oeil à mon code : (il n'est pas terminé évidemment)
public void run() { ahead(1000); // Le robot avance de 1000, la distance 1000 a été choisie de façon à être sur qu'il avance jusqu'à un mur
} public void onHitWall (HitWallEvent e) { turnRadarLeft (90); // Le radar pointe toujours vers l'intérieur du terrain while(true) { // Lorsque le robot touche un mur, on déclenche une boucle double moveAmount = Math.max(getBattleFieldWidth(), getBattleFieldHeight()); ahead(moveAmount); // Le robot se déplace sur la longueur et la largeur du terrain turnLeft(getHeading() % 90); // Le robot se déplace en longeant les murs turnLeft(90); // Le robot tourne dans les coins et ne reste pas coincé // En lançant une bataille, on observe que le robot rejoint un mur et puis se déplace en longeant les côtés, ce qui est l'objet de ce code
} }
public void onScannedRobot(ScannedRobotEvent e) { double directionAttaquant=e.getBearing(); double distanceAttaquant=e.getDistance();
public void onHitByBullet(HitByBulletEvent e) { turnLeft(90 - e.getBearing()); }
}
L'effet attendu serait, comme expliqué plus haut, que lorsque mon robot scan un adversaire, il se tourne vers lui et lui fonce dessus. Dans la réalité, il continue à tourner autour du terrain même en passant tout près d'un robot. Je pense que le problème vient de la boucle, mais je ne sais pas comment résoudre ça sans modifier le comportement de mon robot. Voilà, en espérant que quelqu'un puisse m'aider, merci d'avance.
Marsh Posté le 06-04-2010 à 14:57:58
Bonjour,
J'ai fait une recherche concernant robocode et le dernier sujet datant de 2003, je me permets d'en créer un nouveau. Je ne sais pas si beaucoup de membres de ce forum utilisent ce logiciel, j'espère que quelqu'un pourra m'apporter son aide.
En fait, je participe à un concours d'initiation java et le principe est de réaliser un robot sur robocode et de le faire combattre.
L'idée principale serait de faire longer les murs du terrain à mon robot en attendant de scanner un adversaire, et à partir de ce moment là lui foncer dessus et tirer des projectiles puissants.
Mon problème, c'est que mon robot a beau passer à 1 cm du robot adverse il ne le scanne jamais, ou en tout cas ne l'attaque jamais.
Donc voilà, si quelqu'un pouvait jeter un coup d'oeil à mon code : (il n'est pas terminé évidemment)
package irobot;
import robocode.*;
//import java.awt.Color;
public class I_Robot_3 extends Robot
{
public void run() {
ahead(1000); // Le robot avance de 1000, la distance 1000 a été choisie de façon à être sur qu'il avance jusqu'à un mur
}
public void onHitWall (HitWallEvent e) {
turnRadarLeft (90); // Le radar pointe toujours vers l'intérieur du terrain
while(true) { // Lorsque le robot touche un mur, on déclenche une boucle
double moveAmount = Math.max(getBattleFieldWidth(), getBattleFieldHeight());
ahead(moveAmount); // Le robot se déplace sur la longueur et la largeur du terrain
turnLeft(getHeading() % 90); // Le robot se déplace en longeant les murs
turnLeft(90); // Le robot tourne dans les coins et ne reste pas coincé
// En lançant une bataille, on observe que le robot rejoint un mur et puis se déplace en longeant les côtés, ce qui est l'objet de ce code
}
}
public void onScannedRobot(ScannedRobotEvent e) {
double directionAttaquant=e.getBearing();
double distanceAttaquant=e.getDistance();
if(distanceAttaquant<100){
turnLeft(directionAttaquant);
turnGunLeft(directionAttaquant);
ahead(1000);
}
else{
doNothing();
}
}
public void onHitByBullet(HitByBulletEvent e) {
turnLeft(90 - e.getBearing());
}
}
L'effet attendu serait, comme expliqué plus haut, que lorsque mon robot scan un adversaire, il se tourne vers lui et lui fonce dessus. Dans la réalité, il continue à tourner autour du terrain même en passant tout près d'un robot.
Je pense que le problème vient de la boucle, mais je ne sais pas comment résoudre ça sans modifier le comportement de mon robot.
Voilà, en espérant que quelqu'un puisse m'aider, merci d'avance.