Zum Inhalt

Übungsblatt 3: Simon Game

Übung 1

In diesem Übungsblatt soll das Spiel "Simon Game" realisiert werden. Innerhalb der Übung 1 soll das Spiellayout erstellt werden. Dazu gibt es ein Videotutorial, welches befolgt werden soll.

Änderungen im Video

Anstelle des Button soll ein ImageButton verwendet werden. Der ImageButton hat das Attribut src. An dieses Attribut soll die Drawable Resource gesetzt werden. Der background des ImageButton soll mit dem Wert @android:color/transparent gesetzt werden.

Übung 2

Die 4 Buttons des Spiels können innerhalb eines Arrays hinterlegt werden (als Eigenschaft der Activity), welches in der onCreate Methode initialisiert werden soll. Die Buttons können über die Methode findViewById aus dem Layout abgefragt werden.

Zusätzlich soll eine Methode animateButtons erzeugt werden, welche eine Liste von Indizes (0 bis 3) für die einzelnen Buttons enthält. Die Indizes Liste soll nacheinander animiert "abgespielt" werden.

public void animateButtons(List<Integer> sequence) {
    // Sequenzielles Blinken implementieren
}

Mit dem ObjectAnimator können die Buttons animiert werden und damit kann die Blinkeigenschaft des Spieles erzeugt werden. Das Blinken des Buttons soll über die Animation des Alphawerts von 100% auf 40% und wieder zurück gesetzt werden.

Die Instanzen der ObjectAnimator Klasse können als Array in ein AnimatorSet über die Methode playSequentially hinzugefügt werden. Das AnimatorSet kann dann über die Methode start abgespielt werden. Somit können die entsprechenden Buttons sequentiell nacheinander animiert werden.

// Array von ObjectAnimator Instanzen erzeugen
ObjectAnimator[] oas = new ObjectAnimator[sequence.size()];

// ObjectAnimator Instanzen erzeugen und im oas Array hinzufügen
for (int i = 0; i < oas.length; i++) {
    // TODO: ObjectAnimator erzeugen "ofFloat" und im 
    // oas Array hinzufügen:
    // oas[i] = ...
}

AnimatorSet am = new AnimatorSet();

// Array von ObjectAnimator Instanzen hinzufügen
am.playSequentially(oas); 

// Alle ObjectAnimator Instanzen abspielen
am.start();

Als Test soll in der Methode onCreate die Methode animateButtons mit einer Testsequenz aufgerufen werden. Zum Beispiel würde die folgende Sequenz die 4 Buttons nacheinander abspielen.

animateButtons(Arrays.asList(0, 1, 2, 3));

Ein anderer Aufruf könnte auch wie unten aussehen, versuchen Sie verschiedene Sequenzen, um zu prüfen ob die Methode animateButtons korrekt funktioniert.

animateButtons(Arrays.asList(3, 1, 0, 3, 2, 1));

Übung 3

Die Sequenz, welche animiert werden soll, soll Schritt für Schritt über eine Zufallszahl zwischen 0 und 3 erzeugt werden. Nach jedem erfolgreichen Abspielen der Benutzer:in soll die Sequenz um eine Zufallszahl zwischen 0 und 3 erweitert werden.Bei Start der App soll eine ArrayList (diese kann dynamisch erweitert werden) mit einem Zufallswert erstellt werden (zB [3]). Der Ablauf des Spiels soll dann folgendermaßen gestaltet sein:

  1. Abspielen der Sequenz über die Methode animateButtons (Übung 2). Während des Abspielen sollen die Buttons deaktiviert sein.
  2. Nach dem Abspielen sollten alle Buttons aktiviert sein und über Click-Events Schritt für Schritt geprüft werden, ob die eingehenden Klicks in der Reichenfolge sind, entsprechend der generierten Sequenz.
  3. Falls die Sequenz von der Benutzer:in richtig wiedergegeben wurde, soll eine neue Zufallszahl (zwischen 0 und 3) erzeugt werden und in der ArrayList hinzugefügt werden. Danach soll wieder bei Schritt 1 gestartet werden.
  4. Falls die Sequenz von der Benutzer:in nicht richtig wiedergegeben wurde, soll die Länge der richtig gespielten Buttons über ein Extra an eine GameOverActivity (Übung 4) übergeben werden.

Hinweis

Buttons können über die Methode setEnabled aktiviert oder deaktiviert werden.

Übung 4

Es sollen 2 weitere Activities eingeführt werden und die aktuelle MainActivity soll zu einer GameActivity refactored werden:

  • Es soll eine neue MainActivity geben, welche 2 Buttons enthält, welche das Spiel entweder im Normalen Modus oder im Schnellen Modus starten können. Über ein Extra im Intent sollen unterschiedliche Werte für die Duration der Animationen übergeben werden (eine schnelle und eine normale Variante).
  • Die GameActivity soll das Spiel enthalten, also alles was von Übung 1 bis Übung 3 implementiert wurde.
  • Die GameOverActivity soll die Anzahl der richtig gespielten Buttons anzeigen.

Allgemeiner Hinweis

Die Action Bar kann über den Aufruf getSupportActionBar().hide() in der onCreate Methode der Activity ausgeblendet werden.