Package models.joueurs

Source Code of models.joueurs.Equipe

/*
  Copyright (C) 2010 Aurelien Da Campo

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

package models.joueurs;

import java.awt.Color;
import java.awt.Rectangle;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Vector;
import exceptions.AucunePlaceDisponibleException;
import exceptions.EmplacementOccupeException;

/**
* Classe de gestion d'une equipe.
*
* @author Aurelien Da Campo
* @version 1.2 | juillet 2010
* @since jdk1.6.0_16
*/
public class Equipe implements Serializable
{
    private static final long serialVersionUID = 1L;

    /**
     * Identificateur
     */
    private int id;
   
   /**
    * Nom de l'equipe
    */
   private String nom;
  
   /**
    * Couleur
    */
   private Color couleur;
  
   /**
    * Liste des joueurs
    */
   private Vector<Joueur> joueurs = new Vector<Joueur>();
  
   /**
    * nombre de vies restantes.
    * <br>
    * Note : Lorsque un ennemi atteint la zone d'arrive, le nombre de vies est
    * decremente.
    */
   private int nbViesRestantes;
  
   /**
    * Zone de départ des créatures ennemies
    */
   private ArrayList<Rectangle> zonesDepartCreatures = new ArrayList<Rectangle>();
  
   /**
    * Zone d'arrivée des créatures ennemies
    */
   private Rectangle zoneArriveeCreatures;

   /**
    * Stockage des emplacements de joueurs
    */
   private ArrayList<EmplacementJoueur> emplacementsJoueur = new ArrayList<EmplacementJoueur>();
  
   /**
    * Permet de connaitre la longueur du chemin de l'equipe
    */
   private double longueurChemin = 0.0;
  
   /**
    * Constucteur
    *
    * @param nom
    * @param couleur
    */
   public Equipe(int id, String nom, Color couleur)
   {
       this.id = id;
       this.nom = nom;
       this.couleur = couleur;
   }
  
   /**
    * Permet de récupérer l'identificateur de l'équipe
    *
    * @return l'identificateur de l'équipe
    */
   public int getId()
   {
       return id;
   }
  
   /**
    * Permet de récupérer le nom
    *
    * @return le nom
    */
   public String getNom()
   {
       return nom;
   }
  
   /**
    * Permet de récupérer la couleur
    *
    * @return la couleur
    */
   public Color getCouleur()
   {
       return couleur;
   }

   /**
    * Permet d'ajouter un joueur dans l'équipe à un emplacement particulier.
    *
    * @param joueur le joueur
    * @param ej l'emplacement
    * @throws EmplacementOccupeException
    */
   public void ajouterJoueur(Joueur joueur, EmplacementJoueur ej)
       throws EmplacementOccupeException
   {
       if(joueur == null)
           throw new IllegalArgumentException();
      
       if(ej == null)
           throw new IllegalArgumentException();
      
       if(ej.getJoueur() != null)
           throw new EmplacementOccupeException("EmplacementJoueur occupé");
      
       // on retire le joueur de son ancienne equipe
       if(joueur.getEquipe() != null)
           joueur.getEquipe().retirerJoueur(joueur);
      
       // on l'ajout dans la nouvelle equipe
       joueurs.add(joueur);

       // on modifier sont equipe
       joueur.setEquipe(this);
      
       // on lui attribut le nouvel emplacement
       joueur.setEmplacementJoueur(ej);
   }
  
   /**
    * Permet d'ajouter un joueur sans connaitre l'emplacement
    *
    * @param joueur le joueur a ajouter
    * @throws IllegalArgumentException si le joueur est nul 
    * @throws AucunePlaceDisponibleException
    */
   public void ajouterJoueur(Joueur joueur) throws AucunePlaceDisponibleException
   {
       if(joueur == null)
           throw new IllegalArgumentException();
         
       EmplacementJoueur ej = trouverEmplacementDiponible();
      
       // emplacement non trouvé
       if(ej == null)
           throw new AucunePlaceDisponibleException("Aucune place disponible.");
       // emplacement trouvé
       else
           try{
               ajouterJoueur(joueur, ej);
           }
           catch (EmplacementOccupeException e){
               e.printStackTrace();
           }
   }

   /**
    * Permet de trouver le permier emplacement libre de l'équipe
    *
    * @return l'emplacement ou null
    */
   public EmplacementJoueur trouverEmplacementDiponible()
   {
       // cherche un emplacement disponible
       for(EmplacementJoueur ej : emplacementsJoueur)
           if(ej.getJoueur() == null)
               return ej;
 
       return null;
   }
  
   /**
    * Permet de retirer un joueur de l'equipe.
    * Corollaire : Le joueur quittera egalement son emplacement.
    *
    * @param joueur le joueur
    */
   public void retirerJoueur(Joueur joueur)
   {
       // effacement
       joueurs.remove(joueur);
      
       // quitte l'emplacement
       if(joueur.getEmplacement() != null)
           joueur.getEmplacement().retirerJoueur();
      
       // quitte l'equipe
       joueur.setEquipe(null);
   }

   /**
    * Permet de savoir si l'équip contient un certain joueur
    *
    * @param joueur le joueur
    * @return true si elle le contient, false sinon
    */
   public boolean contient(Joueur joueur)
   {
       return joueurs.contains(joueur);
   }
  
  
   /**
    * Permet de recuperer la collection des joueurs
    *
    * @return la collection des joueurs
    */
   public Vector<Joueur> getJoueurs()
   {
       return joueurs;
   }
  
   /**
    * Permet de recuperer le score de l'equipe qui correspond à la somme des scores
    * de joueurs de l'équipe.
    *
    * @return le score
    */
   public int getScore()
   {
       int somme = 0;
      
       for(Joueur joueur : joueurs)
           somme += joueur.getScore();
      
       return somme;
   }
  
   /**
    * Permet de recuperer le nombre de vies restantes de l'equipe
    *
    * @return le nombre de vies restantes de l'equipe
    */
   public int getNbViesRestantes()
   {
       return nbViesRestantes;
   }

   /**
    * Permet de faire perdre une vie a l'equipe
    */
    synchronized public void perdreUneVie()
    {
        nbViesRestantes--;
    }

    /**
     * Permet de modifier le nombre de vies restantes de l'equipe
     *
     * @param nbViesRestantes le nouveau nombre de vies restantes
     */
    public void setNbViesRestantes(int nbViesRestantes)
    {
        this.nbViesRestantes = nbViesRestantes;
    }

    /**
     * Permet d'ajouter une zone de départ des créatures ennemies
     *
     * @param zone la zone
     */
    public void ajouterZoneDepartCreatures(Rectangle zone)
    {
        zonesDepartCreatures.add(zone);
    }
   
    /**
     * Permet de récupérer la zone de départ des créatures
     *
     * @return la zone de départ des créatures
     */
    public Rectangle getZoneDepartCreatures(int index)
    {
        return zonesDepartCreatures.get(index);
    }
   
    /**
     * Permet d'ajouter une zone d'arrivée des créatures ennemies
     *
     * @param zone la zone
     */
    public void setZoneArriveeCreatures(Rectangle zone)
    {
        zoneArriveeCreatures = zone;
    }
   
    /**
     * Permet de récupérer la zone d'arrivee des créatures
     *
     * @return la zone d'arrivee des créatures
     */
    public Rectangle getZoneArriveeCreatures()
    {
        return zoneArriveeCreatures;
    }
 
    /**
     * Permet d'ajouter un emplacement de joueur
     *
     * @param emplacementJoueur l'emlacement
     */
    public void ajouterEmplacementJoueur(EmplacementJoueur emplacementJoueur)
    {
        emplacementsJoueur.add(emplacementJoueur);
    }

    /**
     * Permet de savoir le nombre d'emplacements disponibles de joueur
     *
     * @return le nombre d'emplacements disponibles de joueur
     */
    public int getNbEmplacements()
    {
        return emplacementsJoueur.size();
    }

    /**
     * Perme de recupérer les emplacements de joueur
     *
     * @return les emplacements de joueur
     */
    public ArrayList<EmplacementJoueur> getEmplacementsJoueur()
    {
        return emplacementsJoueur;
    }
   
    @Override
    public String toString()
    {
        return nom;
    }

    /**
     * Permet de récupérer la longueur du chemin
     *
     * @return la longueur du chemin
     */
    public double getLongueurChemin()
    {
        return longueurChemin;
    }
   
    /**
     * Permet de modifier la longueur du chemin
     *
     * @param longueur la longueur du chemin
     */
    public void setLongueurChemin(double longueur)
    {
        this.longueurChemin = longueur;
    }

    /**
     * Permet de savoir si l'equipe a perdue
     *
     * @return true si elle a perdue, false sinon
     */
    public boolean aPerdu()
    {
        return nbViesRestantes <= 0 || estHorsJeu();
    }

    /**
     * Permet de savoir si l'équipe est hors jeu.
     *
     * Si tous les joueurs de l'équipe sont hors jeu, l'équipe est
     * considérée comme hors jeu.
     *
     * @return true si elle l'est, false sinon
     */
    public boolean estHorsJeu()
    {
        Joueur joueur;
        Enumeration<Joueur> e = joueurs.elements();
        while(e.hasMoreElements())
        {
            joueur = e.nextElement();
           
            // si il y au moins un joueur pas hors jeu
            if(!joueur.estHorsJeu())
                return false;
        }
       
        return true;
    }

    /**
     * Permet de vider l'équipe de tous ses joueurs,
     *
     * Ceux-ci perdront leur emplacement.
     */
    public void vider()
    {
        // retire tous les joueurs de leur emplacement
        Joueur joueur;
        Enumeration<Joueur> e = joueurs.elements();
        while(e.hasMoreElements())
        {
            joueur = e.nextElement();
            retirerJoueur(joueur);
        }
                     
        // vide la liste des joueurs
        joueurs.clear();
    }
   
    /**
     * Permet de modifier la couleur
     *
     * @param couleur la couleur
     */
    public void setCouleur(Color couleur)
    {
        this.couleur = couleur;
    }

    /**
     * Permet d'ajouter une zone de départ
     *
     * @param rectangle la zone de départ
     */
    public void ajouterZoneDepart(Rectangle rectangle)
    {
        zonesDepartCreatures.add(rectangle);
    }

    /**
     * Permet de savoir le nombre de zones de départ
     *
     * @return le nombre de zones de départ
     */
    public int getNbZonesDepart()
    {
        return zonesDepartCreatures.size();
    }

    /**
     * Permet de supprimer un emplacement de joueur
     *
     * @param ej l'emplacement de joueur à supprimer
     */
    public void supprimerEmplacement(EmplacementJoueur ej)
    {
        emplacementsJoueur.remove(ej);
    }

    /**
     * Permet de récupérer la liste des zones de départ
     *
     * @return une copie de la liste des zones de départ
     */
    public Rectangle[] getZonesDepartCreatures()
    {
        Rectangle[] tabZD = new Rectangle[zonesDepartCreatures.size()];
        zonesDepartCreatures.toArray(tabZD);
        return tabZD;
    }

    /**
     * Permet de modifier le nom de l'équipe
     *
     * @param nom le nom de l'équipe
     */
    public void setNom(String nom)
    {
        this.nom = nom;
    }

    public void suppimerZoneDepart(Rectangle z)
    {
        // TODO Protection ?
        // if(zonesDepartCreatures.size() > 1)
        zonesDepartCreatures.remove(z);
        // else
        //  throw new ...
    }
}
TOP

Related Classes of models.joueurs.Equipe

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.