Advertisement
  1. Code
  2. Android SDK
Code

Android SDK: Erstellen Sie ein arithmetisches Spiel - Spielweise-Logik

by
Difficulty:BeginnerLength:LongLanguages:

German (Deutsch) translation by Katharina Nevolina (you can also view the original English article)

In dieser Serie erstellen wir ein einfaches Arithmetikspiel für Android. Das Spiel wird den Benutzern eine Taschenrechner-ähnliche Oberfläche anzeigen, in der wiederholt Fragen gestellt und nachverfolgt werden, wie viele richtige Antworten sie hintereinander erhalten. Im ersten Teil der Serie haben wir die Benutzeroberfläche erstellt, das Setup der Hauptaktivitätsklasse erstellt und den Grundstein für drei weitere Aktivitätsklassen gelegt. In diesem Teil werden wir an der Spiellogik arbeiten, wobei der Benutzer aus drei möglichen Schwierigkeitsgraden auswählt. Wir werden das Frage-und-Antwort-Gameplay mit vier Operatoren implementieren: Addition, Subtraktion, Multiplikation und Division. Das Spiel wählt Operator und Operanden nach dem Zufallsprinzip aus, wobei der Prozess für jeden Operator angepasst wird.


Serienformat

Diese Serie zum Erstellen eines arithmetischen Spiels wird in drei Teilen veröffentlicht:


Spielübersicht

Das Folgende ist ein Screenshot des Spiels, das ich dir beibringen werde, wie man baut:

Arithmetic Game

Die Hauptaktivität bietet drei Optionen: Spielen, Spielen und Highscores. Nach dem Drücken der Play-Option muss der Benutzer einen Schwierigkeitsgrad auswählen, und das Spiel beginnt. Jede vom Benutzer eingegebene Antwort erhält ein Häkchen oder Kreuz als Antwort, während die Punktzahl weiter erhöht wird, bis der Benutzer eine falsche Antwort eingibt oder das Spiel beendet. Wir werden die Funktionen "Spielanleitung" und "Highscores" im letzten Teil der Serie vervollständigen und den Status der App-Instanz speichern.


1. Starten Sie das Spiel

Schritt 1

Das letzte Mal haben wir die Hauptaktivitätsklasse so vorbereitet, dass sie auf Klicks auf die drei Schaltflächen wartet. Lassen Sie uns nun implementieren, was passiert, wenn der Benutzer auf die Wiedergabetaste klickt. Fügen Sie zunächst der Hauptklasse der App die folgenden Importe hinzu:

Wir möchten, dass der Benutzer eine von drei Ebenen auswählt, um ein Spiel zu starten. Fügen Sie der Klasse eine Instanzvariable hinzu, um die Ebenennamen in einem Array zu speichern:

Erstellen Sie in Ihrer onClick-Methode einen Warnungsdialog in der if-Anweisung, die wir für die Wiedergabetaste erstellt haben.

Legen Sie nun die Details des Dialogfelds fest, übergeben Sie das Array mit den Ebenennamen und richten Sie den Klick-Listener für die folgenden Optionen ein:

Wenn eine Ebene ausgewählt ist, ruft die onClick-Methode für das Warnungsdialogfeld eine Hilfsmethode auf, die wir als Nächstes hinzufügen und den Index der ausgewählten Ebene aus dem Array übergeben. Bevor wir die Hilfsmethode implementieren, erstellen und zeigen Sie den Dialog, der sich noch in der if-Anweisung für die Schaltfläche "Abspielen" befindet:

Choosing a Level

Fügen Sie nun die Hilfsmethode nach der Activity onClick-Methode zur Klasse hinzu:

Wir starten die Spielaktivität und geben die Levelnummer an die Absicht weiter. Wir werden im letzten Teil der Serie Klicks auf die beiden anderen Schaltflächen implementieren.


2. Bereiten Sie sich auf das Spiel vor

Schritt 1

Das letzte Mal haben wir eine Aktivitätsklasse für das Gameplay erstellt. Eclipse sollte die folgende Gliederungsstruktur mit den von Ihnen gewählten Namen eingefügt haben:

Fügen Sie Ihrer Klasse die folgenden Importanweisungen hinzu:

Fügen Sie die onCreate-Methode ein und stellen Sie die Inhaltsansicht auf das Layout ein, das wir zuletzt erstellt haben:

Erweitern Sie die Eröffnungszeile der Klassendeklaration, um Click Listening zu implementieren:

Schritt 2

Fügen wir der Klasse einige Instanzvariablen hinzu, um das Gameplay zu vereinfachen. Zunächst Ganzzahlen zur Darstellung der Ebene, der Operanden, des Operators und der Antwort:

Definieren Sie als Nächstes einige Konstanten für die vier Operatoren, um die Gameplay-Verarbeitung zu optimieren:

Fügen Sie nun für jeden dieser Operatoren ein Array für den anzuzeigenden Text hinzu, wobei der Array-Index jeweils der Konstanten entspricht:

Der Bereich der Operatoren hängt von der vom Benutzer gewählten Ebene und dem verwendeten Operator ab (dh die Additionsoperanden für die einfache Ebene haben eine andere mögliche minimale und maximale Anzahl als die Operanden, die mit anderen Operatoren und auf anderen Ebenen verwendet werden). . Wir werden einen Zufallszahlengenerator verwenden, um die Operanden auszuwählen, jeweils mit einem Minimum und einem Maximum. Definieren Sie die minimale und maximale Anzahl für jeden Operator und jede Ebene mithilfe der folgenden 2D-Arrays:

Jedes Array repräsentiert die Ebenen und Operatoren, wobei das Minimum oder Maximum für die drei Ebenen für Addition, Subtraktion, Multiplikation und Division aufgelistet ist - in derselben Reihenfolge wie die von uns definierten Konstanten. Beispielsweise beträgt der minimale Operand für die Addition bei mittlerem Schwierigkeitsgrad 11, während der maximale Operand für die Subtraktion bei schwerem Schwierigkeitsgrad 30 beträgt. Der Zweck wird klarer, wenn wir den Teil des Gameplays implementieren, in dem wir die Fragen generieren. Sie können die minimale und maximale Anzahl später ändern, wenn Sie möchten.

Fügen Sie als Nächstes eine Instanzvariable für einen Zufallszahlengenerator hinzu, den wir in der gesamten Klasse verwenden werden:

Fügen Sie abschließend Instanzvariablen für die Elemente der Benutzeroberfläche hinzu, die wir beim letzten Mal in der Layoutdatei definiert haben, einschließlich der Textansichten für Frage, Antwort und Punktzahl, der Bildansicht für das Häkchen- oder Kreuzantwortbild und der Schaltflächen für die Ziffern 0-9 plus Eingabe und klar:

Schritt 3

Wenden wir uns nun der onCreate-Methode zu. Rufen Sie nach dem vorhandenen Code Verweise auf die Text- und Bildansichten ab:

Stellen Sie das Tick/Cross-Antwortbild zunächst so ein, dass es unsichtbar ist:

Rufen Sie als Nächstes Verweise auf die Schaltflächen Nummer, Löschen und Eingeben ab:

Achten Sie auf Klicks auf alle diese Schaltflächen:

Rufen Sie nun die Stufenummer ab, die wir beim Starten dieser Aktivität aus der Hauptaktivität übergeben haben:

Die Stufevariable wurde ursprünglich auf Null gesetzt. Wenn also keine Nummer empfangen wird, wird standardmäßig ein einfaches Level verwendet. Initialisieren Sie nach dieser if-Anweisung, die sich noch in onCreate befindet, den Zufallszahlengenerator:

Rufen Sie schließlich eine Hilfsmethode auf, um das Spiel zu starten - wir werden die Methode als nächstes implementieren:


3. Starten Sie das Spiel

Schritt 1

Fügen Sie Ihrer Klasse die in onCreate aufgerufene Methode hinzu:

Diese Methode wird jedes Mal ausgeführt, wenn wir eine neue Frage benötigen. Der Operator und die Operanden werden zufällig innerhalb des für den Operator und die Stufe angegebenen Bereichs ausgewählt. Die Methode gibt die Frage an die Benutzeroberfläche aus und ist bereit für die Antwort des Benutzers.

Schritt 2

Setzen Sie in der neuen Methode zuerst die Antwort zurück. Textansicht:

Das ist erforderlich, da in der Antworttextansicht die vom Benutzer eingegebene Antwort angezeigt wird. Sie muss daher jedes Mal zurückgesetzt werden, wenn eine neue Frage generiert wird. Wählen Sie einen Operator nach dem Zufallsprinzip aus und stellen Sie sicher, dass er im Bereich des Operator-Arrays liegt (es enthält vier Operatoren, die Sie jedoch möglicherweise ändern können):

Wählen Sie zwei Operanden nach dem Zufallsprinzip mit einer anderen Hilfsmethode aus:

Schritt 3

Fügen Sie nach Ihrer chooseQuestion-Methode der Klasse die neue Hilfsmethode hinzu, um Operanden auszuwählen:

Wir verwenden hierfür eine Hilfsmethode, die wiederholt aufgerufen werden kann. Die Methode gibt eine Ganzzahl innerhalb des relevanten Bereichs zurück. Fügen Sie den Methodeninhalt hinzu:

Dieser Code stellt sicher, dass die Ganzzahl im richtigen Bereich für den aktuellen Operator und die aktuelle Stufe liegt.

Schritt 4

Zurück in Ihrer chooseQuestion-Methode müssen Sie nun je nach Bediener einige Qualifikationen hinzufügen. Zum Beispiel möchten wir keine negativen Antworten zulassen, daher dürfen die Subtraktionsoperatoren kein negatives Ergebnis erzeugen. Fügen Sie einen bedingten Test hinzu:

Wenn der zweite Operand größer als der erste ist, generieren wir einfach weiter Operanden, bis wir ein Paar erhalten, in dem der erste Operand größer ist. Mit dem Divide-Operator möchten wir nur Antworten, die ganze Zahlen sind. Fügen Sie daher eine weitere Bedingung hinzu:

Dieses Mal fahren wir fort, bis wir eine Division haben, die zu einer ganzen Zahl führt, und vermeiden auch Fälle, in denen die beiden Operanden gleich sind. Sie können diesen Code natürlich weiter optimieren, um die Effektivität des Spiels zu verbessern.

Schritt 5

Jetzt haben wir einen gültigen Satz von Operanden für den ausgewählten Operator. Berechnen wir die Antwort mit einer switch-Anweisung:

Wir werden dies verwenden, um die Antwort des Benutzers später zu überprüfen. Jetzt können wir dem Benutzer die Frage anzeigen:


4. Benutzereingaben verarbeiten

Schritt 1

Jetzt wird dem Benutzer eine Frage angezeigt. Wir müssen nur noch auf die Klicks auf die Schaltflächen antworten. Fügen Sie Ihrer Klasse eine onClick-Methode hinzu:

Finden Sie heraus, auf welche Schaltfläche geklickt wurde:

Denken Sie daran, dass wir Klick-Listener für die Zifferntasten, die Eingabetaste und die Löschtaste einrichten. Wir prüfen zuerst die Eingabetaste und löschen dann die Schaltflächen. Wenn das Klickereignis ausgelöst wurde und keines davon war, muss es sich um eine Zifferntaste handeln, die wir im else-Block behandeln werden.

Schritt 2

Lassen Sie uns zuerst den Löschknopf behandeln. Setzen Sie im else if für die Löschen-Schaltfläche einfach die Antwort zurück. Textansicht:

Schritt 3

Lassen Sie uns nun die Zifferntasten behandeln. Beginnen Sie im else-Block damit, dass das Häkchen/Kreuzbild ausgeblendet wird, da kein Feedback angezeigt werden soll, während der Benutzer eine Antwort eingibt:

Denken Sie daran, dass wir Tags setzen, die die relevanten Nummern in jeder Zifferntaste darstellen, wenn wir sie dem Layout hinzufügen. Das bedeutet, dass wir alle Zifferntasten auf die gleiche Weise behandeln können, indem wir die vom Tag gedrückte Nummer abrufen:

Jetzt haben wir zwei mögliche Szenarien: Der Benutzer gibt die erste Ziffer der Antwort oder eine nachfolgende Ziffer ein. Überprüfen Sie die aktuell angezeigte Antwort und reagieren Sie entsprechend, indem Sie die gerade gedrückte Ziffer einstellen oder anhängen:

Schritt 4

Schließlich können wir Klicks auf die Eingabetaste verarbeiten. Rufen Sie im if-Block für die Eingabetaste zuerst die vom Benutzer eingegebene Antwort aus der Antworttextansicht ab:

Überprüfen Sie, ob wir eine Antwort haben. Wenn nicht, tun wir nichts:

Dem Antworttext geht immer der Text "=", mit "=?" wird angezeigt, bis der Benutzer eine Zifferntaste drückt, damit wir wissen, dass wir eine Antwort haben. Innerhalb des if-Blocks können wir jetzt die eingegebene Nummer abrufen:

Wenn wir die Antwort überprüfen, aktualisieren wir die Punktzahl. Rufen Sie daher eine andere Hilfsmethode auf, um sie abzurufen:

Fügen Sie nach der onClick-Methode diese neue Methode hinzu, um die aktuelle Punktzahl durch Lesen der Punktzahl zurückzugeben. Textansicht:

Überprüfen Sie im onClick-Block für die Eingabetaste, ob die Antwort des Benutzers korrekt ist:

Antworten Sie in diesem Block auf die richtige Antwort:

Wir aktualisieren den Partiturtext, zeigen das Häkchenbild an und stellen die Bildansicht auf Anzeige ein. Fügen Sie nach dem if-Block ein else für falsche Antworten hinzu:

Antworten Sie in diesem Block auf die falsche Antwort:

Wir setzen die Punktzahl auf Null zurück und zeigen das Kreuzbild an. Wählen Sie schließlich nach else eine andere Frage:

Gameplay Activity Screen

Und so geht das Spiel weiter ...


Schlussfolgerung

Wir haben jetzt den zweiten Teil der Serie abgeschlossen! Zu diesem Zeitpunkt sollten Sie in der Lage sein, Ihre App auszuführen und das Spiel zu spielen, obwohl die Bildschirme "Spielanleitung" und "Highscores" noch nicht funktionieren - wir werden sie im letzten Tutorial vervollständigen. In diesem Tutorial haben wir die Spiellogik implementiert, die Benutzerinteraktion behandelt und darauf reagiert. Im letzten Teil der Serie werden wir mithilfe der Anwendung Shared Preferences Highscores speichern und abrufen. Wir werden auch Instanzstatusdaten speichern, um sicherzustellen, dass die App weiterhin funktioniert, wenn das Spiel unterbrochen wird.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.