Informatik

Schlange: Meldungen der Reihe nach

Dein Spiel soll etwas sagen: „Eine Münze!", „Die Tür ist verschlossen.", „Alle Münzen gefunden!". Eine Zeile am unteren Rand reicht dafür. Schwierig wird es erst, wenn zwei Meldungen fast gleichzeitig kommen. Zeigst du jede sofort an, überschreibt die zweite die erste, und niemand hat sie gelesen.

Die Lösung: Meldungen stellen sich an. Jede bleibt eine Weile stehen, dann kommt die nächste dran, und zwar die, die zuerst kam. Das ist eine Warteschlange.

So sieht es aus

Starte das Beispiel und sammle zwei Münzen kurz hintereinander ein. Achte auf die untere Zeile.

Was dazugekommen ist

Geändert hat sich nur Welt. Sie bekommt eine Schlange aus Zeichenketten und eine zweite Textzeile:

private Queue<String> meldungen = new Queue<String>();
private Text meldungszeile;
private int restBilder = 0;

Wer etwas sagen will, reiht seine Meldung hinten ein. Angezeigt wird hier noch nichts:

public void melde(String pText) {
    meldungen.enqueue(pText);
}

Gezeigt wird in run(), also etwa 60-mal in der Sekunde. Solange die aktuelle Meldung noch stehen bleiben soll, zählt restBilder herunter. Ist die Zeit um, kommt die vorderste Meldung dran und wird aus der Schlange genommen:

public void run() {
    if (restBilder > 0) {
        restBilder = restBilder - 1;
    } else if (!meldungen.isEmpty()) {
        meldungszeile.showText(meldungen.front());
        meldungen.dequeue();
        restBilder = 120;   // etwa zwei Sekunden
    } else {
        meldungszeile.showText("");
    }
}

Gemeldet wird beim Start und in punkten():

this.melde("Eine Münze! Jetzt hast du " + punkte + ".");
if (this.count(Muenze.class) == 0) {
    this.melde("Alle Münzen gefunden!");
}

Warum eine Schlange und kein Stapel? Die Meldungen sollen in der Reihenfolge erscheinen, in der sie passiert sind. Was zuerst eingereiht wurde, kommt zuerst dran: FIFO. Ein Stapel würde die neueste Meldung zuerst zeigen. Aus „Eine Münze!" und „Alle Münzen gefunden!" würde dann eine Geschichte, die rückwärts erzählt wird.

In deinem Spiel

Aufgabe 1: Übernimm die Meldungen

Baue die Meldungszeile in dein eigenes Spiel ein, unten in deiner Werkstatt. Du brauchst die drei Attribute, die Methode melde, die Methode run und die Textzeile im Konstruktor. Prüfe danach: Erscheinen zwei schnell eingesammelte Münzen nacheinander?

Aufgabe 2: Autsch!

Lass den Spieler „Autsch!" melden, wenn er gegen eine Wand läuft. Probiere es aus und halte eine Pfeiltaste gegen eine Wand gedrückt.

a) Was passiert mit der Schlange? Erkläre, woran das liegt.

b) Repariere es so, dass jeder Stoß nur eine Meldung erzeugt.

Tipp zu Aufgabe 2

run() läuft 60-mal in der Sekunde. Solange du gegen die Wand drückst, stößt der Spieler in jedem Bild an, und jedes Mal kommt eine neue Meldung in die Schlange. Nach zwei Sekunden warten schon 120 „Autsch!" darauf, gezeigt zu werden.

Merke dir in einem Attribut, ob der Spieler im letzten Bild schon an der Wand stand. Gemeldet wird nur, wenn er es vorher nicht tat.

Aufgabe 3: Eine Anleitung zum Start

Erkläre beim Start in drei oder vier Meldungen, worum es in deinem Spiel geht und wie man es steuert. Wie lange darf eine Meldung stehen, damit man sie lesen kann? Passe restBilder an.

Weitere Ideen mit der Schlange

Überall, wo Dinge in der Reihenfolge ihres Eintreffens drankommen sollen, passt eine Schlange:

Idee Was in der Schlange steht
Gegnerwellen: Ist ein Raum leer, kommt die nächste Welle. die Wellen, zum Beispiel als Zeichenkette "SSB" für zwei Schleime und eine Fledermaus
Befehle programmieren: Der Spieler plant erst Schritte (↑ ↑ → →), dann läuft die Figur sie ab. die geplanten Schritte
Gespräch mit einer Figur: Eine Figur sagt mehrere Sätze nacheinander, jeder mit say(…). die Sätze
Lieferaufträge: Bewohner bestellen Dinge, die du der Reihe nach bringst. die Aufträge

Deine Werkstatt

Hier arbeitest du an deinem eigenen Spiel weiter. Es ist derselbe Arbeitsbereich wie auf allen anderen Seiten der Werkstatt.

Schlange: Meldungen der Reihe nach

Teilbare URL erstellen

Abschnitte auswählen