TipsyTwo_Header

Projekt | TipsyTwo

Von am 19.01.2025

Im Zuge der Masterklasse Mobile im 1. Semester hatte ich die Möglichkeit ein Semesterprojekt umzusetzen. Ich entschied mich für TipsyTwo, einem „Wer würde eher“-Trinkspiel, welches aber genauso gut ohne Getränke gespielt werden kann.

Screens und deren Features

Home

Am Home-Screen (Tab1) können Spieler*innen mittels Namen hinzugefügt, bearbeitet und gelöscht werden. Mit mind. zwei kann dann auch schon direkt das Spiel gestartet werden. Bevor es losgeht, können ein oder mehrere Fragensets ausgewählt werden. Diese setzen sich aus dem Default-Set und denen der anderen Nutzer*innen zusammen.

Screenshots des Tab 1 der App. Liste der Spieler und Auswahl des Fragensets.

Dies Spiel findet innerhalb eines Ionic Modals statt und funktioniert so, dass immer zufällig zwei Personen ausgewählt werden, die miteinander spielen. Diesen werden eine gewisse Anzahl an „Wer würde eher“-Fragen gestellt. Die Spieler*innen schließen dabei die Augen und zeigen auf die jeweilige Person. Als Trinkspiel kann, statt auf sich selbst zu zeigen, ein Schluck getrunken werden. Die Person mit dem Handy kann dann auswählen, ob die Frage falsch beantwortet wurde (zwei unterschiedliche Antworten), oder bei richtiger Antwort eine der zwei Personen. Das wird so lange wiederholt bis eine gewisse Anzahl an Fragen gespielt wurde oder falsch geantwortet wird. Mit jeder richtigen Antwort sammeln die zwei Spieler*innen einen Punkt. Am Ende ihres Zuges können sie ihre Punktezahl in Form von Schlucken an die restlichen Spieler verteilen, wenn es als Trinkspiel gespielt wird. Dann werden wieder zufällig zwei neue Spieler*innen ausgesucht. Wenn das Spiel endet, wird eine Statistik der besten Runden angezeigt.

Screenshots der App. Zwei Namen von Personen werden angezeigt und die Möglichkeit die Runde zu starten. Am nächsten Screen ist die "Wer würde eher"-Frage zu sehen und drei Buttons mit den Namen der Spieler und der Möglichkeit, die Runde zu beenden. Am letzten Screen sind 3 Säulen mit den besten Runden und der Punkteanzahl.

Fragen

Ist man eingeloggt, so können hier (Tab 2) eigene Sets an Fragen hinzugefügt, bearbeitet und gelöscht werden.

Zwei Screenshots der App. Auf einem sieht man, dass keine Fragensets vorhanden sind, und auf dem anderen hat man die Möglichkeit eines mit Titel und Fragen zu erstellen.

Profil

Hier (Tab 3) kann man sich einloggen oder registrieren. Im eingeloggten Zustand werden einem dann der Username und die E-Mail angezeigt.

Drei Screenshots der App. Der erste zeigt einen Button zum Login, der zweite das Login und der dritte das Profil mit einem User-Icon, der E-Mail und dem Usernamen.

Technologien

Das Projekt habe ich mit Ionic in Kombination mit React umgesetzt. Zum schnellen Stylen von Komponenten habe ich zusätzlich TailwindCSS hinzugefügt. Die Spieler*innen und der Spielstand werden lokal gespeichert (mittels Capacitor Preferences), während ich für die Authentifizierung und das Laden, Erstellen, Bearbeiten und Löschen von Fragensets ebenso ein Backend mittels NestJS und TypeORM geschrieben habe. Um die Spieler*innen in mehreren React Komponenten verwenden zu können und sie nicht immer als Props übergeben zu müssen, habe ich die State Management Library Zustand eingesetzt.

Challenges und Learnings

Im Zuge des Projekts habe ich die oben genannten Technologien (besser) kennengelernt. Es war vor allem interessant Ionic mit React zu verwenden. Bis dahin kannte ich Ionic nur in Kombination mit Angular. Würde mich jemand fragen, was nun die bessere Wahl ist, so habe ich keine direkte Antwort. Je nachdem, ob man bereits mit einem der beiden Frameworks gearbeitet hat, so würde ich dieses empfehlen. In beiden Fällen stehen einem jedenfalls die Ionic Komponenten zur Verfügung. React bietet eine sehr flexible und komponentenbasierte Architektur und es ist alles in einem File (Logik und JSX). Angular ist dahingegen etwas strukturierter, bietet Dependency Injection und kommt mit mehreren Dateien pro Seite bzw. Komponente daher (.html, .ts, .scss, .module.ts).

Eine Challenge war vor allem gewisse Informationen als State Variable und gleichzeitig im lokalem Speicher abzubilden. Da ich diverse Informationen über den Spielstand (aktuelle Spieler, aktuelle Frage, Punkteanzahl etc.) sowohl im Code als State, aber auch im LocalStorage (im Web beispielsweise) speichern und ändern musste, habe ich nach einer guten Lösung hierbei gesucht. Ich entschied mich für eine Custom Hook, die wie useState funktioniert, nur zusätzlich den Wert im lokalen Speicher updated. Dies hat gut funktioniert, nur bei vielen Änderungen in kurzer Zeit gibt es Probleme aufgrund der Asynchronität.

Fazit

Die Implementierung des Projekts hat mir sehr viel Spaß bereitet und ich würde Ionic wieder mit React verwenden.

Beitrag kommentieren

(*) Pflichtfeld