Projekt:2020/EscapeRoom: Unterschied zwischen den Versionen

/
(Die Seite wurde neu angelegt: „Kategorie:Projekte:2020/21“)
 
(/)
Zeile 1: Zeile 1:
[[Kategorie:Projekte:2020/21]]
Seite zum Projekt "EscapeRoom" des Informatik LK Q1 im [[:Kategorie:Projekte:2020/21|Schuljahr 2020/21]][[Kategorie:Projekte:2020/21]].
 
{{Aufgabe:Start}}
Implementiere über dei Herbstferien einen "Raum" im EscapeRoom-Projekt.
{{Aufgabe:End}}
 
Ihr arbeitet gemeinsam in [https://git.ngb.schule/IF-LK-2020/escaperoom einem Repository] am EscapeRoom-Projekt. Jeder von euch erstellt sich eine eigene Unterklasse der Klasse <code>Room</code> 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 <code>NumberlockRoom</code> im Projekt.
 
Ihr könnt eure eigene Unterklasse mit dieser Vorlage beginnen:
<syntaxhighlight lang="java" line="1">
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!");
    }
 
}
</syntaxhighlight>
 
Jeder Raum hat mindestens ein <code>Lock</code>, das geöffnet werden muss. Dafür muss es im Raum ein <code>Item</code> 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 <code>Lock</code> und <code>Item</code> erstellen. ''Evtl. hast aber auch schon jemand anders eine Klasse erstellt, die du nutzen kannst.''
 
Das Spiel wird gestartet in der Klasse <code>EscapeRoom</code> mit der main-Klassenmethode. Um deinen eigenen Raum zu testen kannst du eine eigene statische Methode anlegen, die nur deinen Raum initialisiert:
<syntaxhighlight lang="java">
    public static void testMyOwnRoom() {
        EscapeRoom er = new EscapeRoom(new Player("Tester"));
        er.addRoom(new MyOwnRoom());
        er.play();
    }
</syntaxhighlight>
 
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'''
** <code>void print(String text)</code>: Ausgabe ohne Zeilenumbruch
** <code>void println(String text)</code>: Ausgabe mit Zeilenumbruch
* '''Eingaben des Spielers'''
** <code>int askForInt(String question)</code>: Zahl vom Nutzer abfragen
** <code>boolean askForBool(String question)</code>: Wahrheitswert vom Nutzer abfragen
** <code>String askForString(String question)</code>: Text vom Nutzer abfragen
* '''Zufallswerte'''
** <code>int randInt(int max)</code>: Zufallszahl von 0 bis <code>max</code>
** <code>int randInt(int min, int max)</code>: Zufallszahl von <code>min</code> bis <code>max</code>
** <code>boolean randBool()</code>: Zufälliger Wahrheitswert (50% <code>true</code>)
** <code>boolean randBool(int percentTrue)</code>: Zufälliger Wahrheitswert (zu <code>percentTrue</code> Prozent <code>true</code>)
** <code>T randElement(T[] elements)</code>: Wählt einen zufälligen Wert aus dem Array <code>elements</code> aus. Es handelt sich um eine ''generische Methode'', die den Typ zurückgibt, der auch im Array vorhanden ist.<br>Beispiel: <code>String s = EscapeRoom.randElement(new String[]{"A","B","C"});</code>.
* '''Strings überprüfen'''
** <code>boolean inArray(T element, T[] elements)</code>: Prüft, ob <code>element</code> im Array <code>elements</code> vorkommt. Die Typen des Elements und des Arrays sind beliebig, müssen aber zueinander passen (z.B. beides <code>String</code>).
** <code>boolean containsAny(String text, String[] words)</code>: Prüft, ob <code>text</code> mindestens einen der Strings in <code>words</code> enthält.
** <code>boolean containsAll(String text, String[] words)</code>: Prüft, ob <code>text</code> alle der Strings in <code>words</code> enthält.
* '''Flußsteuerung'''
** <code>void wait(int milliseconds)</code>: Pausiert die Ausführung für die angegebene Anzahl Millisekunden.
8.581

Bearbeitungen