Ü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:
- Abspielen der Sequenz über die Methode
animateButtons
(Übung 2). Während des Abspielen sollen die Buttons deaktiviert sein. - 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. - 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.
- Falls die Sequenz von der Benutzer:in nicht richtig wiedergegeben wurde, soll die Länge der richtig gespielten Buttons über ein
Extra
an eineGameOverActivity
(Ü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 imNormalen Modus
oder imSchnellen Modus
starten können. Über einExtra
imIntent
sollen unterschiedliche Werte für dieDuration
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.