Projekt:2020/EscapeRoom

Aus Informatik-Box
Version vom 12. April 2021, 23:25 Uhr von Jneug (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Seite zum Projekt "EscapeRoom" des Informatik LK Q1 im Schuljahr 2020/21.

Icon Heft.png
Arbeitsauftrag

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 Zeilenumbruch
    • void println(String text): Ausgabe mit Zeilenumbruch
  • Eingaben des Spielers
    • int askForInt(String question): Zahl vom Nutzer abfragen
    • boolean askForBool(String question): Wahrheitswert vom Nutzer abfragen
    • String askForString(String question): Text vom Nutzer abfragen
  • Zufallswerte
    • int randInt(int max): Zufallszahl von 0 bis max
    • int randInt(int min, int max): Zufallszahl von min bis max
    • boolean randBool(): Zufälliger Wahrheitswert (50% true)
    • boolean randBool(int percentTrue): Zufälliger Wahrheitswert (zu percentTrue Prozent true)
    • T randElement(T[] elements): Wählt einen zufälligen Wert aus dem Array elements 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, ob element im Array elements vorkommt. Die Typen des Elements und des Arrays sind beliebig, müssen aber zueinander passen (z.B. beides String).
    • boolean containsAny(String text, String[] words): Prüft, ob text mindestens einen der Strings in words enthält.
    • boolean containsAll(String text, String[] words): Prüft, ob text alle der Strings in words enthält.
  • Flußsteuerung
    • void wait(int milliseconds): Pausiert die Ausführung für die angegebene Anzahl Millisekunden.