Worldexplorer
Mit Worldexplorer habe ich eine App entwickelt, bei der es nicht darum geht, möglichst schnell ans Ziel zu kommen, sondern darum, die Welt Schritt für Schritt zu entdecken. Ausgangspunkt ist eine Weltkarte, die nach Kontinenten aufgeteilt ist. Jeder Kontinent besteht aus vielen einzelnen Kacheln, die man erkunden kann.
Auf die Karte können verschiedene Markers gesetzt werden die einer Kategorie angehören, beispielsweise See, Museum, Statue oder Vulkan. Pro Kachel können so viele Orte markiert werden wie man möchte. Beim Spiel geht es darum die Landkarte, und vor allem Teile der Welt die man sich noch nie genauer angeschaut hat, zu entdecken
Ein anderes Element von Worldexplorer sind die Accomplishments. Diese dienen als zusätzliche Motivation und belohnen bestimmte Leistungen, etwa das vollständige Erkunden eines Kontinents oder das Entdecken mehrerer Orte derselben Kategorie. Accomplishments sind an einen Login gebunden und werden nur für eingeloggte Nutzer:innen gespeichert.
Die App kann jedoch auch ohne Login genutzt werden. In diesem Fall ist es möglich, Worldexplorer vollständig zu erkunden und zu spielen, allerdings ohne dass Fortschritte dauerhaft gespeichert werden. Dieser Ansatz erlaubt einen niederschwelligen Einstieg, ohne die langfristige Motivation für registrierte Nutzer:innen einzuschränken.
Technisch wurde Worldexplorer als Flutter-App umgesetzt. Das Projekt wurde als Webapp deployed und kann gespielt werden. Es gibt auch eine iOS-Version, jedoch ist diese nur lokal auf meinem Gerät verfügbar.
Hier kann gespielt werden: worldexplorer.selmasahin.ch
Planung
Die Planung von Worldexplorer begann auf Figma, wo ich das grundlegende Design der App erstellt habe. Ich habe die Weltkarte in Kacheln aufgeteilt und die verschiedenen Kategorien wie See, Museum, Statue oder Strasse visuell vorbereitet. Gleichzeitig habe ich die ersten Gameplay-Ideen ausprobiert: Wie erkennt man, dass eine Kachel entdeckt wurde? Wie soll der Fortschritt angezeigt werden? Welche Accomplishments könnten motivieren?
Während ich anfing, die App zu programmieren, kamen aber laufend neue Ideen hinzu. Einige Features, die ich zuerst nicht eingeplant hatte, wie zum Beispiel zusätzliche Accomplishments oder kleine visuelle Feedbacks beim Entdecken von Kacheln, habe ich direkt integriert. Dadurch wurde der Entwicklungsprozess sehr iterativ: Design und Funktionalität haben sich gegenseitig beeinflusst, und es war spannend zu sehen, wie sich die App Schritt für Schritt entwickelt.
Umsetzung
Worldexplorer war mein erstes Flutter-Projekt, und die Umstellung von Webentwicklung zu Flutter war gross. In Flutter wird alles in Dart-Dateien umgesetzt, es gibt kein klassisches HTML oder CSS. Layout, Logik und State sind stark verschachtelt, was den Code für mich anfangs nicht sehr übersichtlich gemacht hat. Trotzdem war es spannend, dieses neue Framework auszuprobieren und zu verstehen, wie sich die App komplett in Flutter abbilden lässt.
Besonders klar wurde der Vorteil von Flutter: Sobald alles richtig eingerichtet ist, kann man aus einer Codebasis eine iOS-App, Android-App oder/und Webapp erstellen. Das spart viel Zeit, wenn man plattformübergreifend arbeiten will. Dennoch habe ich gemerkt, dass ich mich mit der Schreibweise und der starken Verschachtelung des Codes nicht wirklich anfreunden konnte. Flutter wird wahrscheinlich nicht mein Lieblingsframework, aber es war lehrreich zu sehen, was alles möglich ist.
Als Datenbank verwendete ich MariaDB. Für die Anbindung habe ich ein kleines PHP-Backend geschrieben. Da mir diese Technologien bereits vertraut waren, verlief dieser Teil der Umsetzung problemlos.
Deployment
Die Webapp zu deployen war vergleichsweise einfach. Ähnlich wie bei anderen Frameworks konnte ich die App live schalten und testen, ohne grössere Probleme.
Die iOS-Version war dagegen deutlich anspruchsvoller. Um die App lokal auf mein iPhone zu bringen, musste ich zunächst ein Apple Developer-Konto erstellen, Xcode korrekt installieren und einrichten, CocoaPods konfigurieren und verschiedene Abhängigkeiten lösen. Dieser Prozess war nicht trivial und hat sehr viel Zeit beansprucht, war aber extrem lehrreich, weil ich dadurch den gesamten iOS-Workflow von Grund auf kennenlernte.