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

You need a flash plugin to be able to see this tutorial.

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).
			}
		}
	}
}