Projekt:2020/EscapeRoom
Seite zum Projekt "EscapeRoom" des Informatik LK Q1 im Schuljahr 2020/21.
Implementiere über die Herbstferien einen "Raum" im EscapeRoom-Projekt.
Ihr arbeitet gemeinsam in einem Repository am EscapeRoom-Projekt. Jeder von euch erstellt sich eine eigene Unterklasse der Klasse Room
und implementiert dort seine Spiellogik. Gleichzeitig könnt ihr die Räume der anderen einsehen, um Hilfestellungen zu geben oder Inspiration für euren eigenen Raum zu bekommen. Als Beispiel befindet sich der NumberlockRoom
im Projekt.
Ihr könnt eure eigene Unterklasse mit dieser Vorlage beginnen:
public class MyOwnRoom extends Room {
// Objektvariablen z.B. für Items
public NumberlockRoom() {
super(1); // Anzahl der "Locks" im Raum; Zugriff über locks[0] ... locks[n]
// Initialisierung der "Locks"
// locks[0] = new ...;
// Initialisierung anderer Objektvariablen
}
public void play(Player pPlayer) {
// "Begrüßung" im Raum
EscapeRoom.println("Du betrittst einen "
+ EscapeRoom.randElement(new String[]{
"dunklen",
"schummrigen",
"verwinkelten"
}) + ", unheimlichen Raum!");
EscapeRoom.wait(1000);
// Spielschleife
String s;
do {
// Eingabe des Spielers (wird in Kleinbuchstaben umgewandelt)
s = EscapeRoom.askForString("Was möchtest du machen?").toLowerCase();
// Hier die Spiellogik implementieren (Siehe dazu NumberlockRoom)
// Zum Beispiel:
if( EscapeRoom.containsAny(s, new String[]{"schau", "such", "seh", "forsch"}) ) {
EscapeRoom.println("Du erkundest den Raum, aber findest nichts besonderes.");
EscapeRoom.println("Vor dir ist eine dunkle Tür.");
EscapeRoom.wait(500);
} else if( EscapeRoom.containsAny(s, new String[]{"nach Hause", "fliehen", "weglaufen", "verschwinden", "verlassen"}) ) {
EscapeRoom.println("Du drückst die Klinke herunter. Die Tür öffnet sich!");
} else {
EscapeRoom.println("Nichts passiert.");
}
EscapeRoom.wait(500);
} while( !isUnlocked() ); // Wiederhole, bis alle Locks offen sind.
EscapeRoom.println("Du hast es geschafft, die Tür öffnet sich mit einem lauten Schleifen!");
}
}
Jeder Raum hat mindestens ein Lock
, das geöffnet werden muss. Dafür muss es im Raum ein Item
geben, mit dem das Schloss geöffnet werden kann. "Schlösser" und "Gegenstände" sind hier lose verwendet und können auch andere Konzepte sein. (Zum Beispiel kann ein "Schloss" auch ein Rätsel sein und der "Schlüssel"/"Gegenstand" dazu das Lösungswort.)
Du kannst beliebig viele Unterklassen von Lock
und Item
erstellen. Evtl. hast aber auch schon jemand anders eine Klasse erstellt, die du nutzen kannst.
Das Spiel wird gestartet in der Klasse EscapeRoom
mit der main-Klassenmethode. Um deinen eigenen Raum zu testen kannst du eine eigene statische Methode anlegen, die nur deinen Raum initialisiert:
public static void testMyOwnRoom() {
EscapeRoom er = new EscapeRoom(new Player("Tester"));
er.addRoom(new MyOwnRoom());
er.play();
}
Die Klasse enthält außerdem eine Reihe von statischen Hilfsmethoden, die für dei Implementierung genutzt werden können. Die Dokumentation der einzelnen Methoden findest du in der Klasse (wechsele am besten im Editor von BlueJ oben rechts von "Quelltext" zu "Dokumentation").
- Ausgaben
void print(String text)
: Ausgabe ohne Zeilenumbruchvoid println(String text)
: Ausgabe mit Zeilenumbruch
- Eingaben des Spielers
int askForInt(String question)
: Zahl vom Nutzer abfragenboolean askForBool(String question)
: Wahrheitswert vom Nutzer abfragenString askForString(String question)
: Text vom Nutzer abfragen
- Zufallswerte
int randInt(int max)
: Zufallszahl von 0 bismax
int randInt(int min, int max)
: Zufallszahl vonmin
bismax
boolean randBool()
: Zufälliger Wahrheitswert (50%true
)boolean randBool(int percentTrue)
: Zufälliger Wahrheitswert (zupercentTrue
Prozenttrue
)T randElement(T[] elements)
: Wählt einen zufälligen Wert aus dem Arrayelements
aus. Es handelt sich um eine generische Methode, die den Typ zurückgibt, der auch im Array vorhanden ist.
Beispiel:String s = EscapeRoom.randElement(new String[]{"A","B","C"});
.
- Strings überprüfen
boolean inArray(T element, T[] elements)
: Prüft, obelement
im Arrayelements
vorkommt. Die Typen des Elements und des Arrays sind beliebig, müssen aber zueinander passen (z.B. beidesString
).boolean containsAny(String text, String[] words)
: Prüft, obtext
mindestens einen der Strings inwords
enthält.boolean containsAll(String text, String[] words)
: Prüft, obtext
alle der Strings inwords
enthält.
- Flußsteuerung
void wait(int milliseconds)
: Pausiert die Ausführung für die angegebene Anzahl Millisekunden.