S'inscrire ! Pass oublié ?
Hyjoo
Portail Forums Jeux Flash Chat IRC Annuaire
Google

[RoboCode] un petit tutorial.
Section : Nouvelles technologies
informatique et high tech


Actualiser  Hyjoo > Forums > Le village > Nouvelles technologies > [RoboCode] un petit tutorial.

[RoboCode] un petit tutorial. : Discussion sur le forum Nouvelles technologies (informatique et high tech : Informations et discussions sur l'informatique, les gadgets, le web et le high tech en général.)

 
Rechercher dans la discussion
 RoboCode un petit tutorial.
 Nouvelles technologies : informatique et high tech
29/08/2006, 02h29 #1
Stumpy 
Dieu supérieur

Stumpy

[RoboCode] un petit tutorial.

N'arrivant pas à dormir et sachant que je dois me lever tot ce matin, j'me suis dis que j'allais en profiter pour pondre un début d'explication pour ce concours.

Je pense que maintenant, tout le monde a compris que l'on code son robot en Java mais par l'utilisation d'API (Application Programming Interface):
Citation
Bibliothèque de fonctions destinées à être utilisées par les programmeurs dans leurs applications. Ces fonctions facilitent l'écriture des programmes en fournissant des routines ( procédures ) pour gérer des éléments particuliers (affichage, pilotage de périphériques…).

Le travail est largement simplifié pour au final garder principalement l'élément stratégique de la création.

Bien sur cela permet d'avoir une première approche de la programmation donc autant en profiter pour s'amuser un peu .

Nous allons donc commencer par le debut, l'installation du programme car étant un fichier .jar, ce n'est pas toujours simple pour tout le monde.
A bien y reflechir, j'suis une feignasse et un tuto pour l'install sous windows en français existe déjà donc voici le lien.
Je laisse les utilisateurss d'autres systeme s'en sortir, devrait pas etre trop dur pour eux .

Après avoir lancé le programme, on obient une zolie fenetre comporte un certains nombres de menu en haut:
  • Battles, menu permettant d'organiser les combats, occupez vous seulement du choix "new" le reste est sans grand interet actuellement.
  • Robots, menu permettant d'ouvrir l'editeur par le premier choix, seule chose utile pour le moment également.
  • options, comporte quelques options que je vous deconseille de modifier car peu d'interet ou risqué.
  • Help, nombreux lien vers de la documentation donc très utile mais en anglais. cette petite explication est donc là pour tenter de vous donner une base de travail.
Je vous laisse dans un premier temps, organiser un petit combat entre différent robot du repertoire sample, faire du 1vs1 c'est le plus intéressant et permet de correctement suivre l'évolution du combat.

Vous pouvez déjà remarquer l'existence de tres nombreuses stratégies possible et que chacun comportent ses points fort et faible à vous de trouver celle ayant le moins de risque d'etre battu .

Bon, c'est bien zolie tout cela mais moi je veux faire mon robot maintenant!
donc dans un premier temps, ouvrir le fenetre editor par le biais du menu robot:



On refait un petit listing du menu, sachez toutefois que pour les debutants dans le domaine, des choses risque de vous paraitre etrange mais vous les comprendrez au fil de l'explication donc pas d'inquiétude à avoir.
  1. File:new>robot, permet d'ouvrir une fenetre de robot vierge, donc utile pour debuter un nouveau projet, on ne s'occupe pas de l'option new>jar file
  2. File:open, permet d'ouvrir un projet existant.
  3. File:save et save as, pour sauvegarder le robot ou vous desirez.
  4. Edit:commande classique d'editeur de texte, je n'explique donc pas
  5. Compiler: compile, tres utile pour finaliser le robot
  6. compiler: option, on ne touche surtout pas!
Voilà, maintenant vous avez pris connaissance de l'interface, il faut savoir de quoi ce compose un robot, en voici un schéma:


On remarque donc qu'il y a trois élément, le corps du robot, son canon et son radar, chaque élément peut tourner sur lui-même de 360° et est indépendant des autres parties.


Voilà, nous avons maintenant tout les clés en main pour réussir notre premier robot.
Mais vous allez trouver le moyen de me dire que savoir comment un robot c'est sympa mais etre en mesure de le programmer c'est le top et bien je vous devance car voici les écritures saintes qui permettront de dompter des peuples entiers de robot:

Nul besoin de les apprendre par coeur même si elles sont tellement simple et logique...car oui le programmeur est une personne que l'on peut qualifier de feignasse donc aime se simplifier un maximun la vie, pourquoi nommer une chose d'une façon compliqué pour effectuer quelque chose de simple...

Attention...voici les formules sacrées!
Code:
turnRight(double degree)

Code:
turnLeft(double degree)

Je doute qu'il soit utile d'expliquer cela mais je prend le risque....permet de faire tourner le robot sur lui(même du X degrée, chose indiqué dans la parenthese donc exemple:
Code:
turnLeft(90)

Permet au robot de tourner à 90°, peut-on faire plus simple je vous le demande?!?

Et bien on continu sur notre lancé, je sens que certains ont déjà decroché dans le fond...dommage pour eux, ils ne pourront pas profiter du concours se voulant simple et possible pour toutes personnes doté d'un cerveau.

Code:
ahead(double distance)

Code:
back(double distance)

Permet donc de faire avancer ou reculer le robot de X pixel, valeur comprise dans la parenthese comme toujours, je ne donne plus d'exemple maintenant .

Savoir que si par exemple le robot rencontre un mur lors de son déplacement, il s'arrete et repart dans l'autre direction sauf indication contraire que l'on apprendra à faire plus tard.
Code:
turnGunRight(double degree)

Code:
turnGunLeft(double degree)

Nul besoin de préciser que cela permet de faire tourner le canon vers la gauche ou la droite de X degrée?
Code:
turnRadarRight(double degree) 

Code:
turnRadarLeft(double degree)

Et là, j'vous laisse deviner car j'suis vicieux...j'aime les questions difficile .

Certains pourront se poser la question "mais pourquoi avoir des écritures saintes pour faire bouger le canon et radar séparement".
Et bien j'vous laisse reflechir également tout en vous indiquant que de base, ces deux élements reste alignés avec la direction du robot, les stratèges auront donc déjà compris l'utilité.

Passons aux écritures saintes de niveau inférieur, moins utilisées mais pas moins utile:
Code:
setAdjustGunForRobotTurn(boolean flag)

Boolean flag est une valeur pouvant etre égal à "true" ou "false".
Sachant que si celle-ci est égal à true, le canon reste dans sa direction première lors d'un changement de direction du véhicule.

Les suivantes marches sur le même principe:
Code:
setAdjustRadarForRobotTurn(boolean flag)

Code:
setAdjustRadarForGunTurn(boolean flag)

Cette derniere est direction activé si AdjustRadarForRobotTurn(true)a été declaré auparavant.


On commence à avoir fait le tour des bases, voici tout de même quelques astuces pour nos fan stratèges:
Code:
getX() 

Code:
getY()  

Donne les coordonnées du robot sur le terrain de jeu, peut toujours servir .
Code:
getHeading(), getGunHeading(), and getRadarHeading()

Permet d'obtenir "l'inclinaison" des différents élément en degrée.

Code:
getBattleFieldWidth() and getBattleFieldHeight()

Sachant que le terrain de combat est de taille variable, il est parfois utile d'etre en mesure de le connaitre pour le prendre en compte dans son code, un code doit etre dynamique à tout terrain.

Bon, maintenant on sait comment faire bouger notre petit robot, on sait pas trop comment le faire exactement mais on connait les écritures saintes et c'est un bon début mais comment on va tirer? car c'est bien jolie de faire danser le robot mais faut-il encore etre en mesure de tirer sur son copain en face.

Encore une fois, on ne va pas se casser la tête et prendre la simple commande:
Code:
fire(1) 

Suffit pour faire tirer le canon dans son alignement au moment donné, faire plus simple...impossible.


Voilà, le reste va venir durant la création du premier robot, pour cela, on va essayer de comprendre la structure du code d'un robot basique, en voici un exemple:
Code:
package test;
import robocode.*;

/**
 * Robot de test
 */
public class Test extends Robot
{
	...  // <<Zone 1>>

	public void run() {
		... // <<Zone 2>>
		while(true) {
		... // <<Zone 3>>
		}
	}
      ... // <<Zone 4>>
	public void onScannedRobot(ScannedRobotEvent e) {
		fire(1);
	}
}

Ce robot porte le nom de Test et fait parti de la collection test, on remarque que un robot doit avoir une majuscule en début de nom et une collection une minuscule, aucune obligation qu'il porte le même nom.

La première zone nous sera peu utile dans un premier temps, car elle est là pour permettre d'implanter des fonctions plus poussé dont nous allons nous passer durant pas mal de temps encore.

La seconde zone permet d'enregistrer des variables ou actions qui ne seront prisent en compte qu'une seule fois lors de l'activation du robot en debut de round, à vous de voir ce qu'il serait utile d'y mettre.

Vient ensuite le coeur de notre petit robot, la zone 3.
Cette commande
Code:
While {

}

Est en gros une boucle que le robot va lire en continu et effectuer les actions demandées à l'intérieur, c'est donc ici que une bonne partie de notre code va ce trouver.

La zone 4 correspond à l'action à effectuer lors de la detection d'un robot ennemi, j'vous laisse remarquer que dans l'exemple on...tire dessus

Les connaisseurs ou les personnes ayant un minimun de logique auront compris que la partie ce trouvant entre:
Code:
public void run() {

}

Est le morceau permettant de donner vie au robot en lui-même tandis
que la zone 4 et les autres qui pourront lui ressembler sont prise en compte seulement lors de certains evenements pré-programmé.
il en existe bien sur une liste trouvable sur la doc API mais les principaux seront expliqué dans la suite du tutorial



Edit :
Et me revoilà pour la suite, j'suis lancé, autant continuer .

Donc maintenant, on sait commencer faire bouger le robot, le faire tirer et la structure nous permettant de rassembler l'ensemble donc autant tenter de pondre notre premier vrai robot!

on reprend donc le code de départ et on y rajoute quelques petites choses.
Pour faire cela en même temps que moi, je vous invite à faire un nouveau robot dans l'editeur, lui donner un nom au choix et une collection au choix également puis vider completement la fenetre pour la remplacer par ce contenu:
Code:
package test;
import robocode.*;

public class Test extends Robot
{
	public void run() {
		while(true) {
			ahead(200);
			turnRight(90);
			
		}
	}
      
	public void onScannedRobot(ScannedRobotEvent e) {
		fire(1);
	}
	public void onHitByBullet(HitByBulletEvent e) {
		turnLeft(180);
	}
      
}


Dans un premier temps, modifiez:
  1. package test; remplacer test par le nom de votre collection
  2. public class Test; remplacer Test par nom de votre robot
Première chose qui change:
Code:
ahead(200);
turnRight(90); 

Donc le robot va en boucle faire:
  1. avancer tout droit de 200 pixels
  2. tourner vers la droite de 90°
Puis recommencer, sauf en cas d'évément indiqué par les commandes suivantes:
Code:
	public void onScannedRobot(ScannedRobotEvent e) {
		fire(1);
	}

Déjà rencontré, permet de tirer des que l'on detecte un robot.
Code:
	public void onHitByBullet(HitByBulletEvent e) {
		turnLeft(180);
	}
Comme l'indique le nom, si le robot est toucher par un "boulet de canon",
On tourne vers la gauche de de 180° donc en gros demi tour .

Sachant que tout de suite apres cela, le cours normal reprend donc le robot avance de 200px puis tourne et recommence...


Simple mais déjà un bon départ.
Maintenant, approchez votre souris du menu compiler et...cliquez sur compile
Si aucun probleme, un message vous indiquera que la compilation c'est bien déroulé, dans ce cas, bravo! votre première création est prete pour le combat!

Par le biais du menu battle, preparer un combat entre votre robot et un autre au choix puis admirez le travail, il vous est maintenant possible de modifier pas mal de chose ou en rajouter pour améliorer l'ensemble .

Avec l'aide de la doc officiel et des différents site indiqués dans les sujets parlant du concours, vous pourrez trouver de quoi sans probleme vous inspirez dans votre création, pas besoin de copier-coller un robot existant, si vous n'avez jamais touché à la programmation, sera pas crédible d'affirmer que vous avez faire un truc pareil :

Mais cela n'en reste pas moins jolie .

Bon, vous avez maintenant les éléments de base pour debuter, plus aucune excuse du genre "c'est en anglais je pige rien", avec un peu d'imagination, vous pouvez faire déjà de tres bonnes choses avec cela.
Je reste bien sur dans le coin pour répondre à vos questions tout en sachant que je ne suis pas le seul à pouvoir aider ici ^^.

Un dernier petit conseil, vous avez remarqué souvent dans les morceaux de code, l'existence de ligne debutant par "//" le texte que l'on trouve apres sur la ligne est un commentaire, chose des plus utiles pour savoir ou l'on se trouve et donc ne pas se perdre dansle code, placer ce type d'aide le plus possible dans votre code .

Dernière modification par Stumpy : 29/08/2006 à 02h32. Motif: Fusion d'un double post.
Stumpy est déconnecté(e)
29/08/2006, 08h51 #2
Amiral 
Ombre

Amiral

Re : [RoboCode] un petit tutorial.

Citation
Posté par Stumpy
Avec l'aide de la doc officiel et des différents site indiqués dans les sujets parlant du concours, vous pourrez trouver de quoi sans probleme vous inspirez dans votre création, pas besoin de copier-coller un robot existant, si vous n'avez jamais touché à la programmation, sera pas crédible d'affirmer que vous avez faire un truc pareil :


C'est marrant, c'est à peu près ça que j'avais commencé à codé pour la partie shoot...
Amiral est déconnecté(e) Voir une photo de Amiral sur son profil
29/08/2006, 10h42 #3
Vidow 
Séraphin

Vidow

Re : [RoboCode] un petit tutorial.

Que la sagesse du Grands dragon vert unijambiste soit !

Grand, grand merci Stumpy.



Edit :
Voici le robot de base que vous obtiendrez en voulant en créé un.
Le code est commenté.
Code:
package teste;
import robocode.*;
//import java.awt.Color;

/**
 * Destructor - Robot de Vidow
 */
public class Destructor extends Robot
{
	/**
	 * La fonction suivante est lancer par le jeu lors du début d'un combat.
	 */
	public void run() {
		
		/**
		* While ( true ) { .... } est une boucle sans fin 
		*/
		while(true) {
			/**
			* Nous allons mettre dans cette boucle un ensemble d'instruction
			* ou d'ordre que le robot exécutera de maniére cyclique.
			*/
			
			ahead(100);
		// avance de 100 unitée.
			   turnGunRight(360); 
		 // tourner la tourelle de 360 degré ( le radar, posé dessu, pourra alors voir le ou les autre robots.
			back(100);
		 //reculer de 100 unitée.
			turnGunRight(360);
		  //tourner la tourelle de 360 degrés.
		}
	}

	/**
	 * onScannedRobot est une fonction qui sera appelé lorsque le radar du
	 * robot voit un autre robot. Ainsi, nous pourrons dire a notre robot quoi faire.
	 */
	public void onScannedRobot(ScannedRobotEvent e) {
		fire(1); 
	// on tire un boulet de puissance 1.
	}

	/**
	 * onHitByBullet est une fonction qui sera appelé lorsque notre robot sera
	 * touché par un tir ennemi.
	 */
	public void onHitByBullet(HitByBulletEvent e) {
		turnLeft(90 - e.getBearing()); 
	 // on tourne le robot de 90° - l'angle d'ou provien le boulet que nous avon recu. 
	}
	
}

Dernière modification par Vidow : 29/08/2006 à 10h44. Motif: Fusion d'un double post.
Vidow est déconnecté(e) Voir une photo de Vidow sur son profil
30/08/2006, 11h51 #4
totofe99 
Griffon

totofe99

Re : [RoboCode] un petit tutorial.

dites j'aurais juste une question c'est quoi les commandes pour faire une matrice (un tableau quoi), lire des données dans cette matrice et en mettre dedans ? (jsuis en train de réfléchir a un super robot)
totofe99 est déconnecté(e)
30/08/2006, 15h19 #5
Vidow 
Séraphin

Vidow

Re : [RoboCode] un petit tutorial.

Pour la matrice, ou ce que j'appelerais un double tableau

Code:
tab int [] = new int [8];

Cette ligne permet de créé un tableau d'entier a 8 "cases".

pour le lire :
Code:
for( int i = 0 ; i < tab.length; i++ ) {
	System.out.println(tab[i]);
}


Ainsi, cette boucle qui commence sont compteur i a 0 est incrémenté de 1 jusqu'a avoir la meme valeur que la dimension du tableau ( =tab.length ).

Code:
tab int [][] = new int [8][4]

Cette ligne permet de créé un tableau d'entier a 8 "cases" sur 4.

pour le lire :
Code:
for( int i = 0 ; i < tab.length; i++ ) {
	for( int j = 0 ; j < tab[0].length; j++ ) {
		System.out.println(tab[i][j]);
	}
}


C'est la meme idée qu'au dessu, mais en plus tu lit de colonne en colone puis de ligne en ligne.
Vidow est déconnecté(e) Voir une photo de Vidow sur son profil
30/08/2006, 17h07 #6
totofe99 
Griffon

totofe99

Re : [RoboCode] un petit tutorial.

cool merci et euh pour écrire dans une case de la matrice du genre, je met X en case (1;1) ou Y en case (3;2).
Et pour mettre le contenu d'une case dans une variable ? (parce que la je pense que sa doit l'afficher comme du texte non ?)

Et "int" c'est le nom de la matrice ? Ou on peut pas les nommer ? afin de faire par exemple 2 matrice et éviter qu'il y ait conflit entre une première et une deuxième (histoire de pas etre en conflit avec un autre programme dans la mémoire par exemple)

Par contre j'ai vu que certains robots commençait avec plus de vie que d'autre, par exemple le MyFirstLeader avait 200 pv dans une partie et ses membres 100 ou 120. Et je sais pas comment le régler, vous savez vous ?

Et j'ai vu que yavait des bullet gros ou petit, suivant si on mettait 1 ou 2 dans fire(X). Mais quand j'ai essayer de mettre 50 par exemple et sa change rien entre 50 et 2 ? Vous savez concrètement ce que sa fait ?

Et puis j'ai vu que certain robots avait le status Disable pendant un combat et qu'ils bougeaient plus, sa veut dire quoi ?
Et c'est normal qu'on perde de la vie en tirant ?

Dernière modification par totofe99 : 30/08/2006 à 17h22.
totofe99 est déconnecté(e)
30/08/2006, 17h30 #7
Vidow 
Séraphin

Vidow

Re : [RoboCode] un petit tutorial.

Pour ce qui est du fonctionnement du robot. il as des point d"energie qui lui sont néssécaire pour fonctionner.

La chose etant que lorsque tu n'as plus de point d'energie, tu ne peux plus te déplacer, ou tirer.

De meme, lorsque tu tire un boulet ( de un ou deux point d'energie ) si tu en touche pas, tu perd tes points d'energie, hosr sui tu touche en recupere ( ce procédé evite les robot mitraillette qui tire sans regarder n'importe ou... ).


Voila voila.

Pour les tableau en java, je te trouve un truc a te mettre sous la dent dés que j'ai deux minutes.....
Vidow est déconnecté(e) Voir une photo de Vidow sur son profil
30/08/2006, 18h56 #8
totofe99 
Griffon

totofe99

Re : [RoboCode] un petit tutorial.

euh juste une dernière question (désolé de t'en poser plein mais je connais rien du tout en java)
estce qu'il existe une commande else ? et OR et AND ? et une commande pour voir le nom du robot détecté et si possible son nombre d'énergie.
totofe99 est déconnecté(e)
30/08/2006, 20h19 #9
maxiTortoise72 
Dieu supérieur

maxiTortoise72

maxiTortoise72 est classé dans la section Jeux-Flash (20 points)
Re : [RoboCode] un petit tutorial.

Mazette, ça va fumer du cigare cette histoire de bots fightings, j'espère tenir bon
Tout est ready, maintenant Stump tu vas me faire suer & brûler les ultimes neurones que j'avais couvé mieux qu'une maman à plume
Non, sérieusement je vais suivre assidûment ton lien et ton tuto, t'es pas feignant ok

MaxiT
Leader de la WSL GUILD et Admin de l'HBDHQ
maxiTortoise72 est déconnecté(e)

Navigation rapide:

« Discussion précédente | Discussion suivante »
Emplacement :
Actualiser  Hyjoo > Forums > Le village > Nouvelles technologies > [RoboCode] un petit tutorial.

Utilisateurs regardant cette discussion : 0 ( membre(s) et 0 invité(s))

Discussions similaires 
Discussion Auteur Forum Réponses Dernier message
[Flash MX] Tutorial. Alembik Nouvelles technologies 3 20/10/2006 23h21
[Robocode] Le début d'une grande aventure. Vidow Nouvelles technologies 32 12/10/2006 07h59
Tutorial ? BeastKiller Dragon Raja 0 02/07/2005 08h40
Tutorial : IRC ruspower Nouvelles technologies 0 31/01/2004 23h33
tutorial... chey Le comptoir 10 07/04/2003 10h50
Rechercher dans cette discussion 
Rechercher dans cette discussion:

Recherche avancée


Fuseau horaire GMT +2. Il est actuellement 06h14.

Edité par vBulletin - Copyright © 2000-2005 Jelsoft Enterprises Limited
Copyright © Hyjoo - Tous droits réservés