Tutorials - AI examples
[Defensive - Easy] Shield activation
WARNING: this video is obsolete and uses deprecated API. The source code to use is pasted after the video.
- An AI example with Eclipse: shield activation
package foo.me.ai; import galaxiia.jeu.intelligence.Intelligence; import galaxiia.jeu.terrain.InformateurTerrain; import galaxiia.jeu.unite.ControleurUnite; import galaxiia.jeu.unite.InformateurUnite; public class Test2 implements Intelligence { public void initialisation(InformateurUnite unite, InformateurTerrain terrain) { // Nothing to initialize } public void nouveauTour(ControleurUnite unite, InformateurTerrain terrain) { // The shield is activated at each turn. unite.activationBouclier(); } }
[Neutral - Easy] Moving a spaceship
[Agressive - Normal] Burst of "fox missiles"
/** * Les packages permettent de ranger les fichiers de vos programme. * * Ici pour que ce programme compile, il faut que ce fichier soit situé dans un * pakage nommé votrenom. Pour ajouter un package sur Eclipse, il suffit de * faire Fichier -> Nouveau -> Package. */ package foo.me.ai; import galaxiia.configuration.Identification; import galaxiia.jeu.intelligence.Intelligence; import galaxiia.jeu.terrain.InformateurTerrain; import galaxiia.jeu.unite.ClasseurUnite; import galaxiia.jeu.unite.ConstantesUnite; import galaxiia.jeu.unite.ControleurUnite; import galaxiia.jeu.unite.InformateurUnite; @Identification(nom = "Fox burst", auteur = "2CIA", version = 1) public class FoxBurst implements Intelligence { /* * Définition des constantes. */ /** * Le nombre de missiles dans une rafale de fox. */ private static final int NOMBRE_MISSILE_RAFALE = 12; /** * Récupération du coût énergétique de lancement d'un missile fox. */ private static final double COUT_ENERGETIQUE_LANCEMENT_FOX = ClasseurUnite .creationUniteAbstraite(ConstantesUnite.MISSILE_FOX) .coutEnergetiqueCreation(); /* * Définition des variables globales. */ /** * Si cette variable vaut <code>true</code>, c'est que l'unité est en train de * lancer une rafale de fox. */ private boolean lancementRafaleEnCours; /** * Le nombre de missile déjà lancés pour la rafale en cours. */ private int nombreMissilesLances; /** * L'unite ciblée par la rafale en cours. */ private InformateurUnite uniteCible; /** * L'initialisation de l'intelligence. */ public void initialisation(InformateurUnite unite, InformateurTerrain terrain) { if (!unite.peutCreer(ClasseurUnite.MISSILE_FOX)) { // Si notre unité ne peut pas lancer de missile fox on refuse le combat et // on abandonne. throw new IllegalStateException("Notre unité ne peut pas lancer de fox."); } else { // Sinon, on initialise les variables. lancementRafaleEnCours = false; nombreMissilesLances = 0; uniteCible = null; } } /** * Continue de lancer la raffale de fox. * * @param monUnite * L'unité que l'on contrôle. */ public void lancementRafale(ControleurUnite monUnite) { // On tire le missile. monUnite.lancementProjectileVersPoint(ControleurUnite.MISSILE_FOX, pointCible(uniteCible)); // On ajoute un au nombre de missiles lancés. nombreMissilesLances++; if (nombreMissilesLances == NOMBRE_MISSILE_RAFALE) { // Si on a lancé le bon nombre de missiles, on réinitiale les variables. lancementRafaleEnCours = false; nombreMissilesLances = 0; uniteCible = null; } } /** * Donne une unité cible. * * @param monUnite * L'unité que l'on contrôle. * @param terrain * Le terrain sur lequel on joue. * * @return L'unité cible ou null si aucune unité ne peut être une cible. */ public InformateurUnite uniteCible(InformateurUnite monUnite, InformateurTerrain terrain) { // On parcourt toutes les unités du terrain. for (InformateurUnite unite : terrain.tableauUnites()) { if ((unite.equipe() != monUnite.equipe()) && (unite.equipe() != ConstantesUnite.EQUIPE_MISSILE)) { // Si l'unité n'est ni de mon équipe, ni un missile, on choisie cette // unité. return unite; } } // On a pas trouvé d'unité ennemi. On retourne null. return null; } /** * Donne le point vers lequel il faut lancer le missile pour toucher l'unité. * * @param uniteCible * L'unite cible. * * @return Le point où il faut lancer le missile pour toucher la cible. */ public double[] pointCible(InformateurUnite uniteCible) { // On donne la position de l'unité cible. return uniteCible.position(); } /** * Les choix de l'intelligence. */ public void nouveauTour(ControleurUnite monUnite, InformateurTerrain terrain) { if (lancementRafaleEnCours) { // Si notre unite est en train de tirer une rafale, on continue. lancementRafale(monUnite); } else { if (COUT_ENERGETIQUE_LANCEMENT_FOX * NOMBRE_MISSILE_RAFALE <= monUnite .energie()) { // Si notre unite à suffisamment d'énergie pour lancer tous les missiles // fox à la suite. // Recherche d'un cible potentielle. uniteCible = uniteCible(monUnite, terrain); if (uniteCible != null) { // Si on a bien une cible, on commence à lancer la rafale de fox. lancementRafaleEnCours = true; lancementRafale(monUnite); } else { // Sinon on ne fait rien, on a pas de cible. } } else { // Si notre unite n'a pas suffisamment d'énergie, on attent un tour de // plus (on fait rien). } } } }