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.

Beitragsgrafik: dunkles Raster mit dem Titel des Spiels und dem Icon des fröhlichen Hundes
Eigene Grafik – Haas Arts

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
): PetPose

Kein 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     Versteckspiel

Das 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 #5C4A40 auf 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.