Informatik

Variablen und Datentypen im Spiel

Im Kapitel Variablen und Datentypen hast du gelernt, wie sich ein Programm etwas merkt. Ein Spiel merkt sich ständig etwas: wie viele Münzen schon gesammelt sind, wie viel Zeit bleibt, wie die Spielerin heißt.

Die Leitfrage für dein Spiel: Was muss sich mein Spiel merken, und von welcher Art ist es: eine ganze Zahl, eine Kommazahl, ein Text, ein Ja oder Nein?

Neu für dich: die Ereignisblöcke

Bisher passiert in deinem Spiel alles im Konstruktor von Welt, also einmal beim Start. Für einen Spielstand reicht das nicht. Er muss sich ändern, während gespielt wird. Dafür stehen unten in Welt zwei Blöcke, die bisher leer waren. Sie funktionieren wie die Ereignisblöcke in Scratch:

Block Wird ausgeführt … wie in Scratch
wennMuenzeEingesammelt() jedes Mal, wenn der Spieler eine Münze einsammelt „Wenn ich … empfange“
run() immer wieder, etwa 60-mal in der Sekunde „Wiederhole fortlaufend“

Eine Variable, die du im Konstruktor oder in einem Block anlegst, gibt es nur dort, und am Ende des Blocks ist sie wieder weg. Was sich das Spiel die ganze Zeit merken soll, steht deshalb oben in der Klasse, außerhalb aller Blöcke:

public class Welt extends Spielwelt {
 
   private int punkte = 0;
 
   public Welt() {
      // ...

Das private heißt: Nur die Welt selbst darf diese Variable ändern. Warum das wichtig ist, erfährst du im Kapitel über Objektorientierung. Bis dahin übernimmst du das einfach so.

Die MVPs sind kleine, eigenständig lauffähige Beispiele. Starte ein Beispiel mit ▶ und klicke für die Tastensteuerung in seine Ausgabe. Im Reiter Beispiel.java steht die jeweilige Idee. Falls ein Reiter Baukasten.java dabei ist, enthält er vorbereitete Hilfen für Figuren, Texte und Steuerung. Probiere zuerst die angegebene Änderung aus und übertrage dann die Idee in deine Werkstatt.

Mechaniken

Such dir mindestens eine aus und baue sie in dein Spiel ein. Du darfst sie verändern, kombinieren oder dir etwas ganz anderes ausdenken.

Münzzähler

Im Spiel: Oben steht, wie viele Münzen schon eingesammelt sind.

Dahinter steckt: eine Variable vom Typ int, die bei jeder Münze um eins wächst, und ein Text, der sie anzeigt.

private int punkte = 0;
private Text anzeige;
public void wennMuenzeEingesammelt() {
   punkte = punkte + 1;
   anzeige.showText("Münzen: " + punkte);
}

Den Text legst du im Konstruktor an, so wie den Titel im Startgerüst: anzeige = new Text("", 0, 200, 700); und dann this.add(anzeige);. Die Zahl 0 ist die Mitte des Textes, er steht also mittig oben.

Aufwand: ★☆☆

MVP zum Ausprobieren: Drücke eine Taste: Jeder Tastendruck steht für eine eingesammelte Münze.

In dein Spiel übertragen: Verschiebe die beiden Anweisungen aus whenKeyPressed nach wennMuenzeEingesammelt.

Countdown

Im Spiel: Die Zeit läuft rückwärts. Wer sammelt alle Münzen, bevor sie abgelaufen ist?

Dahinter steckt: eine Variable vom Typ double, von der run() 60-mal in der Sekunde ein Sechzigstel abzieht. Angezeigt werden nur die ganzen Sekunden.

private double zeit = 30;
public void run() {
   zeit = zeit - 1.0 / 60;
   anzeige.showText("Zeit: " + (int) zeit);
}

Achtung, Falle: Schreibst du 1 / 60 statt 1.0 / 60, bleibt die Zeit stehen. Warum? Überlege, welchen Datentyp das Ergebnis von 1 / 60 hat.

Was passiert, wenn die Zeit abgelaufen ist? Im Moment nichts – die Anzeige zählt einfach ins Negative weiter. Das änderst du nach dem Kapitel über Kontrollstrukturen.

Aufwand: ★★☆

MVP zum Ausprobieren: Starte und beobachte die Sekunden. Ersetze 1.0 durch 1 und vergleiche.

In dein Spiel übertragen: Übernimm die double-Variable und die Zeitänderung in run. Das Anhalten folgt bei den Kontrollstrukturen.

Münzen mit Wert

Im Spiel: Nicht jede Münze ist gleich viel wert. Es gibt eine Punktzahl statt eines Zählers.

Dahinter steckt: eine zweite Variable für den Wert. Wird sie im Lauf des Spiels größer, bringt jede weitere Münze mehr als die davor.

private int punktzahl = 0;
private int wert = 10;
public void wennMuenzeEingesammelt() {
   punktzahl = punktzahl + wert;
   wert = wert + 5;
}

Aufwand: ★☆☆

MVP zum Ausprobieren: Drücke mehrere Tasten und rechne mit: 10, dann 15, dann 20 Punkte.

In dein Spiel übertragen: Übernimm punktzahl und wert sowie deren Änderung in dein Sammelereignis.

Stoppuhr

Im Spiel: Statt eines Countdowns misst das Spiel, wie lange du brauchst, auf eine Zehntelsekunde genau.

Dahinter steckt: eine double-Variable, die in run() wächst. Für eine Nachkommastelle rechnest du um: (int) (zeit * 10) / 10.0. Probiere aus, was ohne das .0 passiert.

Aufwand: ★★☆

MVP zum Ausprobieren: Beobachte die Zehntelsekunden. Ändere 10 und 10.0 zu 100 und 100.0.

In dein Spiel übertragen: Starte zeit bei 0 und zeige den berechneten Text in deiner Welt an.

Ein Name für die Heldin oder den Helden

Im Spiel: Die Anzeige nennt die Figur beim Namen: „Lea hat 3 Münzen.“

Dahinter steckt: eine Variable vom Typ String. Mit den Methoden aus Zeichenketten machst du mehr daraus, zum Beispiel name.toUpperCase() für einen Schlachtruf oder name.charAt(0) für ein Kürzel.

private String name = "Lea";

Aufwand: ★☆☆

MVP zum Ausprobieren: Ändere name und drücke eine Taste.

In dein Spiel übertragen: Verbinde den gespeicherten Namen und den Spielstand mit + zu deinem Anzeigetext.

Tempo

Im Spiel: Die Figur ist schneller oder langsamer als im Startgerüst.

Dahinter steckt: Der Spieler hat eine Methode setTempo. Sie legt fest, wie viele Pixel er in jedem Bild geht. Probiere Werte zwischen 1 und 8 aus. Was passiert bei 20?

held.setTempo(5);

Aufwand: ★☆☆

MVP zum Ausprobieren: Ändere tempo von 2 auf 5. Der Hase läuft automatisch hin und her.

In dein Spiel übertragen: Gib den ausprobierten Wert an held.setTempo weiter.

Deine eigene Idee

Was soll sich dein Spiel noch merken? Ein Kontostand im Laden, die Zahl der Schritte, der Name des Levels? Lege eine Variable dafür an, wähle den passenden Datentyp und zeige sie an.

Fürs Tagebuch: Welche Variablen hat dein Spiel jetzt? Begründe für eine davon, warum du genau diesen Datentyp gewählt hast und was mit einem anderen schiefgegangen wäre.

Checkpoint

Der Checkpoint nach diesem Kapitel zählt die Münzen und lässt einen Countdown von 30 Sekunden laufen. Wie du ihn lädst, steht auf der Startseite der Werkstatt.

Checkpoint: Variablen (Online-IDE)

Weiterbauen kannst du in deiner Werkstatt.

Variablen und Datentypen im Spiel

Teilbare URL erstellen

Abschnitte auswählen