001import java.util.HashMap; 002import java.util.Set; 003 004public class Room { 005 private String aDescription; 006 private HashMap<String, Room> aExits; 007 private HashMap<String, Door> aDoors; 008 private String aImageName; 009 private ItemList aItems; 010 011 public Room(final String pDescription, final String pImageName) { 012 this.aDescription = pDescription; 013 this.aExits = new HashMap<String, Room>(); 014 this.aDoors = new HashMap<String, Door>(); 015 this.aImageName = pImageName; 016 this.aItems = new ItemList(); 017 } 018 019 /** 020 * Retourne le nom de l'image de la salle 021 * 022 * @return nom de l'image 023 */ 024 public String getImageName() { 025 return this.aImageName; 026 } 027 028 /** 029 * Récupère la description de la salle actuelle 030 * 031 * @return description de la salle 032 */ 033 public String getDescription() { 034 return this.aDescription; 035 } 036 public HashMap<String,Door> getDoors() { 037 return this.aDoors; 038 } 039 /** 040 * Donne une longue description de la salle 041 * 042 * @return longue description 043 */ 044 public String getLongDescription() { 045 String vOutput = "You are " + this.aDescription + ".\n" + this.getExitString() + "\n"; 046 String vAllItems = "Items :" + this.aItems.getItemsString(); 047 if (vAllItems.equals("Items :")) { 048 vOutput += "No item here."; 049 } else { 050 vOutput += vAllItems; 051 } 052 return vOutput; 053 } 054 055 /** 056 * Crée une sortie 057 * 058 * @param pDirection direction de la sortie, par exemple "up", ou "west". 059 * @param pNeighbor la salle dans laquelle on veut arriver en suivant cette 060 * direction. 061 */ 062 public void setExitRoom(final String pDirection, final Room pNeighbor) { 063 if (pDirection != null) { 064 this.aExits.put(pDirection, pNeighbor); 065 } 066 } 067 /** 068 * Crée une porte 069 * @param pDirection direction dans laquelle se trouve la porte 070 * @param pDoor la porte 071 */ 072 public void setExitDoor(final String pDirection, final Door pDoor) { 073 if(pDirection!=null) { 074 this.aDoors.put(pDirection,pDoor); 075 } 076 } 077 /** 078 * Paramètre la porte et la salle de sortie. 079 * @param pDirection la direction vers la sortie 080 * @param pRoom la salle de destination 081 * @param pDoor la porte entre la salle actuelle et la salle de destination. 082 */ 083 public void setExit(final String pDirection, final Room pRoom, final Door pDoor) { 084 this.setExitRoom(pDirection, pRoom); 085 this.setExitDoor(pDirection, pDoor); 086 } 087 /** 088 * Retourne la salle qui se trouve dans la direction donnée. 089 * 090 * @param pDirection Direction dans laquelle on veut aller. Exemple: "north", 091 * "down". 092 * @return La salle située dans la direction passée en paramètre. 093 */ 094 public Room getExit(final String pDirection) { 095 return this.aExits.get(pDirection); 096 } 097 098 /** 099 * Retourne une chaine de caractère qui liste toutes les sorties de la salle. 100 * 101 * @return Liste de toutes les sorties : "Exits : north east south down" par 102 * exemple. 103 */ 104 public String getExitString() { 105 String vOutput = "Exits :"; 106 StringBuilder vSb = new StringBuilder(vOutput); 107 Set<String> allKeys = this.aExits.keySet(); 108 for (String vKey : allKeys) { 109 vSb.append(" "); 110 vSb.append(vKey); 111 } 112 return vSb.toString(); 113 } 114 115 public void addItem(final Item pItem) { 116 this.aItems.addItem(pItem); 117 } 118 119 public HashMap<String, Item> getItems() { 120 return this.aItems.getItems(); 121 } 122 123 /** 124 * Renvoie true ou false en fonction de si la salle est une sortie ou non de la salle actuelle. 125 * @param pRoom salle de sortie ? 126 * @return boolean 127 */ 128 public boolean isExit(final Room pRoom) { 129 Set<String> allKeys = this.aExits.keySet(); 130 for (String vKey : allKeys) { 131 if (this.aExits.get(vKey).equals(pRoom)) { 132 return true; 133 } 134 } 135 return false; 136 } 137} // Room