001import java.util.HashMap; //imports des différentes classes dont l'on va avoir besoin
002import java.util.Set;
003
004
005
006/** 
007 * Classe liée à la création de chacune des pièces présente dans le jeu.
008 * @author  Gabriel Leroux aidé des enseignements de M.Bureau
009 * @version 23/03/2020
010 */
011
012public class Room
013{
014    private String aDescription;
015    private HashMap<String, Room>exits;
016    private String aImageName;
017    private ItemList aListe;
018    private HashMap<String,Door> portes;
019    
020    /**
021     * Crée une room pDescription et la Hashmap exits dans laquelle 
022     * est stocké chaque direction qui est associée à une room.
023     * Crée aussi la HashMap items qui à un nom, associe un item.
024     * Crée le nom de l'image aImageName
025     * @param pDescription représentant la description
026     * @param pImage  représentant l'image de liée à la pièce
027     */
028    public Room(final String pDescription, final String pImage){
029        this.aDescription=pDescription;
030        this.exits=new HashMap <String, Room>();
031        this.aImageName=pImage;
032        this.aListe=new ItemList();
033        this.portes=new HashMap<String,Door>();
034        
035    }
036    
037    /**
038     * méthode permettant de retourner l'item associé au nom
039     * @param pString String du nom de l'item
040     * @return l'item associé à son nom
041     */
042    public Item retourneItem(final String pString){
043         return this.aListe.getItem(pString);
044    }
045    /**
046     * A pour unique but de retourner la description de la
047     * room courante ou de la suivante en fonction de la direction.
048     * @return la String de la description de la pièce.
049     */
050    public String getDescription(){
051        return this.aDescription;
052    }
053
054    /**
055     * Définit les sorties de la pièce en les stockant dans la Hashmap exits cf. class Game.
056     * @param pDirection les directions
057     * @param pNeighbor rooms voisines 
058     */
059    public void setExit(final String pDirection, final Room pNeighbor){
060
061        exits.put(pDirection, pNeighbor);
062        
063    }
064    /**
065     * Définit les portes de la pièce
066     * @param pDirection les directions
067     * @param pDoor porte de la pièce
068     */
069    public void setDoor(final String pDirection, final Door pDoor){
070
071        portes.put(pDirection, pDoor);
072        
073    }
074    /**
075     * Définit les beamer de la pièce en les stockant dans l'attribut itemList
076     * @param pNom nom du Beamer
077     * @param pPrix prix du Beamer
078     * @param pDescription Description du Beamer
079     */
080    public void setBeamer(final String pNom, final int pPrix, final String pDescription){
081        Beamer vBeamer= new Beamer(pNom,pPrix,pDescription);
082        this.aListe.addItem(pNom,vBeamer);
083    }
084    /**
085     * méthode permettant de retourner la porte associé à son nom
086     * @param pString, la string de la direction où est la porte
087     * @return la porte associée à la direction
088     */
089    public Door getDoor(final String pString){
090        return portes.get(pString);
091    }
092    /**
093     * Définit les items de la pièce en les stockant dans l'attribut itemList
094     * @param pNom nom de l'item
095     * @param pPrix prix de l'item
096     * @param pDescription Description de l'item
097     */
098    public void setItem(final String pNom, final int pPrix, final String pDescription){
099        Item vItem=new Item (pNom,pPrix,pDescription);
100        this.aListe.addItem(pNom, vItem);
101
102    }
103    /**
104     * Enleve les items de la pièce après les avoir pris
105     * @param pString String du nom de l'item
106     */
107    public void suppItem(final String pString){
108        
109        aListe.suppItem(pString);
110
111    }
112    /**
113     * Depose les items après les avoir pris
114     * @param pItem Item à ajouter à la hashmap
115     */
116    public void addItem(final Item pItem){
117        
118        this.aListe.addItem(pItem.getNom(),pItem);
119
120    }
121    
122    /**
123     * Donne la prochaine salle associé à la direction passé en paramètre.
124     * @param pDirection String d'une sortie associé à une Room
125     * @return la room associée à la direction
126     */
127    public Room getExit(final String pDirection){
128        return exits.get(pDirection);
129    }
130    /**
131     * On initialise une variable locale de type String nommée vString, 
132     * contenant la chaine de caractère «Les sorties sont : ». On utilise ensuite la méthode keySet() pour 
133     * mettre dans la variable keys l’ensemble des clés de la Hashmap exits. On parcoure keys, à l’aide d’une 
134     * boucle for each. Cette même boucle initialise une variable de type String exits. Pour chaque chaîne de caractère exits de la 
135     * collection keys, je change la variable vString, en concaténant la précédente variable vString et exits. 
136     * On sort de la boucle et on return vString.
137     * @return La String contenant l'ensemble des sorties liés à la pièce courante
138     */
139    public String getExitString(){
140        String vString="Les sorties sont : ";
141        Set <String> vKeys=exits.keySet();
142        for(String exits:vKeys){
143            vString= vString + "\n"+ exits;// +" : "+ this.getExit(exits).getDescription();
144        }
145
146        return vString;
147    }
148    /**
149     * Renvoie une description détaillée de cette pièce
150     * sous la forme :
151     *  Vous êtes dans ...
152     *  Les sorties sont : ...
153     *  Les items sont : ...
154     *  @return Une description de la pièce, avec les sorties et les items associés à la pièce
155     */
156    public String getLongDescription(){
157        return ""+ getDescription() +"\n" + this.getExitString() + "\n" + this.aListe.returnListItem()+"\n";
158    }
159    /**
160     * Renvoie une String qui correspond au nom de l'image de la room concernée.
161     * @return la String correspondant à l'image de la Room concernée.
162     */
163    public String getImageName()
164     {
165         return this.aImageName;
166     }
167     
168} // Room