Projects Case Study
Pocket Pals: ein Haustier, das nie verhungert
Eine ruhige Haustier-Simulation für Kinder von 6 bis 12 Jahren – als bewusster Gegenentwurf zu Free-to-Play. Vier Tiere, vier Minispiele, kein Login, keine Werbung.
Ein Haustierspiel als Anti-Pattern#
Free-to-Play-Kinderspiele arbeiten mit einem Instrument, das denkfähig genug ist, um zu funktionieren, und für ein sechsjähriges Kind verheerend: der Haustier-Zwang.
Man füttert, putzt und spielt mit einem Tier, um das Tier glücklich zu halten. Das Tier hat Eigenschaften, die nicht dem Kind gehören – Hunger, Sauberkeit, Energie, Laune. Und weil diese Werte sinken, wenn man nicht spielt, entsteht Druck. Nicht durch eine Strafe, sondern durch ein schlechtendes Wesen.
Pocket Pals ist der Gegenentwurf. Ein Tier, das nie verhungert, nie krank wird und nie verschwindet. Jede Interaktion endet in einem kleinen liebevollen Effekt, und es gibt nichts, was schiefgehen kann.
| Pocket Pals | |
|---|---|
| Werbung | keine |
| In-App-Käufe / Abos | keine |
| Login / Konto | keins |
| Tracking / Analytics | keines |
| Internet zum Spielen | nicht nötig |
| Berechtigungen | nur VIBRATE |
| Cloud-Speicherung | keine |
| Dunkle Muster, FOMO, Verluste | keine |
| Kann das Tier sterben oder verlieren? | nein, niemals |
| Push, Streaks, Daily Bonus | keine |
Diese Tabelle ist keine Marketingzeile, sondern die Abnahmekriterie des ganzen Projekts.
Was drin ist#
| Bereich | Umfang |
|---|---|
| Tiere | 4 (Hund, Katze, Hase, Hamster) mit Farben, Persönlichkeit und Reaktionen |
| Räume | 4 (Wohnzimmer, Garten, Bad, Schlafplatz) |
| Minispiele | 4 (Ball, Blasen, Leckerli-Fangen, Versteckspiel) |
| Futter | 8 Sorten |
| Spielzeug | 11 Stücke, mindestens zwei Minispiele zugeteilt |
| Accessoires | 14 |
| Dekorationsobjekte | 37 |
| Sticker | 36 in 5 Kategorien |
| Profile | 4 lokal |
| Animationen | 16 |
Die 16 Animationen sind kein Deko-Detail: Gehen, Rennen, Springen, Sitzen, Schlafen, Essen, Trinken, Waschen, Bürsten, Spielen, Freuen, Überrascht, Verwundert, Streicheln, Strecken und Idle. Eine Katze, die sich anders bewegt als ein Hund, macht aus einer Liste von Buttons ein Wesen.
Drei Entscheidungen, die alles tragen#
Ein zentraler Zustand, durch den alles läuft#
GameStore ist die einzige Quelle der Wahrheit. Jede Änderung läuft durch eine Funktion, die
vorher- und nachher-Zähler berechnet, Sticker und Freischaltungen synchron hält, Belohnungen
sammelt und sofort speichert.
Das klingt unspektakulär. Es ist aber der Grund, warum Dekoration und Fortschritt nie auseinanderlaufen. Bei einem Spiel mit sechs Zählern und hundert Deko-Objekten ist das keine Detailfrage.
Die Tier-Animation ist reine Mathematik#
fun poseOf(
animation: PetAnimation,
timeSeconds: Float,
species: PetSpecies,
reducedMotion: Boolean
): PetPoseKein Android, kein Compose. Das heißt: direkt unit-testbar, und alle 16 Animationen lassen sich ohne Emulator prüfen. Eine Katze, die im Idle zu schnell atmet, ist ein fehlgeschlagener Test und keine Beschwerde im Play Store.
Kein Asset im APK#
Tiere, Räume, Dekoration, Essen, Spielzeug, Sticker und Icons werden komplett mit Compose-Canvas-Zeichenbefehlen erzeugt. Audio wird auf dem Gerät berechnet.
Das hält das Release-APK bei rund 1,5 MB – bei einem Spiel, das optisch wie ein kleines Zuhause aussieht. Es garantiert Offline-Fähigkeit und schließt Fremd-Assets aus, inklusive aller Lizenzfragen.
Der Minispiel-Register#
Minispiele sind ein Register. Ein fünftes Minispiel wäre eine Klasse plus eine Zeile Registrierung – Fortschritt, Belohnung und Sticker-Regal funktionieren dann automatisch.
Ball Blasen Leckerli-Fangen VersteckspielDas ist deshalb nicht nur Bequemlichkeit. Ein Minispiel, das den Fortschritt des Tiers verändert, muss in denselben Zählern landen wie ein Deko-Kauf. Über einen zentralen Pfad gibt es dafür nur eine Wahrheit.
Kataloge enthalten nur Daten#
Neue Dekoration ist eine Zeile in DecorationCatalog und ein Zeichenast in DecorArt.
Neues Futter, ein neuer Stickertyp, zusätzliche Kleidung – dasselbe Muster. Der Code bleibt
klein, die Inhalte wachsen.
Ich habe diesen Schnitt bewusst über die Spieltiefe gestellt: lieber 37 Deko-Objekte aus Daten als 12 aus Klassen.
42 Unit-Tests, fünf Klassen#
| Klasse | Was drin geprüft wird |
|---|---|
PetStateTest |
Zustand, Deko-Platzierung je Raum, nur positive Zähler, sichere Enum-Auflösung |
SaveLoadTest |
JSON-Roundtrip, korrupte Daten, unbekannte Felder, Neustart, Profilgrenze 4 |
UnlockAndStickerTest |
Schwellwerte, Belohnungen genau einmal, Sticker je Kategorie, MVP-Mindestumfang |
GameStoreTest |
Profile, Aktivitäten, Minispiel-Abschluss, Deko bewegen, Accessoire-Slots, Reset, Parent-Gate |
MiniGameAndPetTest |
vier registrierte Minispiele, Session, alle 16 Animationen, Persönlichkeit, Paletten |
Dazu kommen instrumentierte UI-Tests für Onboarding, Tierauswahl, Profilanlage, Raumwechsel, Füttern, Waschen, Minispiel starten und beenden, Dekoration platzieren, Stickeralbum, Profilwechsel und das Parent-Gate – inklusive Auslesen und Beantworten der Rechenaufgabe im Test.
Barrierefreiheit ohne Kompromiss bei der Optik#
- Große Touch-Ziele von 52 bis 84 dp
- Bedienung ohne Lesen möglich: Icons und Animation tragen die Information
- Kontraste: dunkles Braun
#5C4A40auf Creme#FFF8EF - Keine Information nur über Farbe: Sticker und Status haben Text und Symbol
- Sound, Musik und Vibration einzeln schaltbar
- „Wenig Bewegung" reduziert Bewegung, zusätzlich werden die System-Animationseinstellungen respektiert
- Alle interaktiven Elemente tragen
contentDescription
Was ich dabei gelernt habe#
Ein Anti-Pattern-Projekt braucht keine zusätzliche Disziplin, sondern eine klare Absage. Der Test war: Wenn eine Funktion nur existiert, um ein Kind zum häufigeren Spielen zu bringen, gehört sie nicht ins Projekt.
Zustand an einer Stelle ist der billigste Weg zu Konsistenz. Bei vier Räumen, 37 Deko-Objekten und 36 Stickern ist verteilter Zustand kein Stil, sondern eine Fehlerquelle.
Reine Mathematik im richtigen Modul ist die Hälfte der Testbarkeit. Die Trennung von
PetAnimator und dem Rest war keine Ästhetik, sie hat 16 Animationen testbar gemacht.
Kleine APK ist ein Nebeneffekt guter Entscheidungen. Die 1,5 MB sind nicht das Ziel, sondern das Ergebnis von: keine Assets, keine Fremdbibliothek, keine Features, die es nicht braucht.
Grenzen und offene Punkte#
Die Instrumented-Tests sind implementiert und kompiliert, in dieser Arbeitsumgebung aber nicht vollständig gelaufen: Der verfügbare Emulator mit Software-Rendering und 1 GB RAM wurde vom Betriebssystem beendet. Ein Lauf auf einem Gerät mit 2 GB+ RAM ist sinnvoll, bevor das Release beurteilt wird.
Die Einstellungen sind pro Profil gespeichert, nicht geräteweit. Die Tageszeit wird aus der Geräteuhr abgeleitet, rein atmosphärisch – der Schlafmodus ist bewusst nicht an die reale Zeit gekoppelt. Die Deko-Positionen sind normalisiert, die Skalierung folgt der Raumhöhe. Minispiele speichern Bestwerte, nicht den genauen Verlauf. Kein Kamera-, kein Mikrofonzugriff, nur Deutsch.
Die Referenz auf haasarts.de zeigt das Projekt im Zusammenhang. Wenn du ein ähnliches Produkt bauen willst – ruhig, ohne Dark Patterns, ohne Tracking – melde dich über den Kontakt.
Quelle
Dieses Projekt
Pocket Pals ist Teil meiner Referenzen. Hier geht es zum Projekt auf haasarts.de.