Files
lf05-java/src/nogard/schritt6b/Bereich.java
Janis M aa89da7ce9 6
2022-05-02 11:58:32 +02:00

121 lines
4.2 KiB
Java
Raw Blame History

package nogard.schritt6b;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* Diese Klasse modelliert Bereiche. Ein Bereich kann ein Gebiet, ein Haus, ein Raum etc. sein.
*
* Jeder Bereich ist mit anderen Bereichen <20>ber Ausg<73>nge verbunden. M<>gliche Ausg<73>nge liegen im Norden, Osten, S<>den, Westen, oben und unten.
*
* F<>r jeden Ausgang h<>lt ein Bereich eine Referenz auf den benachbarten Bereich parat.
*/
public class Bereich {
private String beschreibung;
private Map<Richtungen, nogard.schritt6b.Bereich> nachbarn;
private List<Gegenstand> gegenstaende;
/**
* Konstruktor.
* @param beschreibung Die Beschreibung des Areals.
*/
public Bereich(String beschreibung) {
this.beschreibung = beschreibung;
nachbarn = new HashMap<>();
for (Richtungen richtung : Richtungen.values()) {
nachbarn.put(richtung, null);
}
gegenstaende = new LinkedList<>();
}
/**
* Liefert die Beschreibung des Bereichs.
* @return Die Beschreibung des Bereichs.
*/
public String getBeschreibung() {
return beschreibung;
}
/**
* Liefert einen benachbarten Bereich.
* @param richtung Die Richtung des gew<65>nschten benachbarten Bereichs.
* @return Der gew<65>nschte benachbarte Bereich.
*/
public nogard.schritt6b.Bereich getNachbar(Richtungen richtung) {
return nachbarn.get(richtung);
}
/**
* Gibt die Informationen <20>ber den Bereich zur<75>ck.
* @return Die Informationen <20>ber den Bereich.
*/
public String getInfo() {
StringBuilder info = new StringBuilder();
info.append("\nDu befindest dich " + beschreibung + ".");
// Alle gegenst<73>nde ausgeben, wenn vorhanden.
if (gegenstaende.size() > 0) {
info.append("\nHier befinden sich die folgenden Gegenst<73>nde:");
for (Gegenstand gegenstand : gegenstaende) {
info.append("\n\t" + gegenstand.getInfo());
}
}
info.append("\nDu kannst gehen nach:");
// Alle nichtleeren Bereiche ausgeben.
for (Map.Entry<Richtungen, nogard.schritt6b.Bereich> paar : nachbarn.entrySet()) {
if (paar.getValue() != null) {
info.append("\n\t" + paar.getKey().name().toLowerCase());
}
}
return info.toString();
}
/**
* F<>gt einen benachbarten Bereich hinzu.
* Befindet sich bereits ein benachbarter Bereich an dieser Stelle, so wird er durch den neuen ersetzt.
* @param richtung Die Richtung, in der sich der hinzuzuf<75>gende benachbarte Bereich befindet.
* @param nachbar Der hinzuzuf<75>gende benachbarte Bereich.
*/
public void setNachbar(Richtungen richtung, nogard.schritt6b.Bereich nachbar) {
nachbarn.put(richtung, nachbar);
}
/**
* F<>gt einen neuen Gegenstand dem Bereich hinzu.
* @param gegenstand Der hinzuzuf<75>gende Gegenstand.
*/
public void platzierenGegenstand(Gegenstand gegenstand) {
gegenstaende.add(gegenstand);
}
/**
* Entfernt einen Gegenstand aus dem Bereich.
* @param nameGegenstand Der zu entfernende Gegenstand.
* @throws GegenstandNichtVorhandenException Wird geworfen, wenn der zu entfernende Gegenstand nicht vorhanden ist.
*/
public void entfernenGegenstand(Gegenstand gegenstand) throws GegenstandNichtVorhandenException {
boolean entfernt = gegenstaende.remove(gegenstand);
if (entfernt == false) {
throw new GegenstandNichtVorhandenException("In diesem Bereich befindet sich leider kein Gegenstand mit dem Namen " + gegenstand.getName() + ".");
}
}
/**
* Sucht einen Gegenstand im Bereich.
* @param nameGegenstand Der Name des zu suchenden Gegenstandes.
* @return Der gesuchte Gegenstand.
* @throws GegenstandNichtVorhandenException Wird geworfen, wenn kein Gegenstand im Bereich den angegebenen Namen hat.
*/
public Gegenstand suchenGegenstand(String nameGegenstand) throws GegenstandNichtVorhandenException {
for (Gegenstand gegenstand : gegenstaende) {
if(gegenstand.getName().equalsIgnoreCase(nameGegenstand)) {
return gegenstand;
}
}
throw new GegenstandNichtVorhandenException("In diesem Bereich befindet sich leider kein Gegenstand mit dem Namen " + nameGegenstand + ".");
}
}