Skip to content

Repository files navigation

Memory Game

A memory game for kids aged 4+. No ads, no accounts, nothing collected: press Play, walk a road of rounds, find the pairs before the clock runs out, collect stars.

Main menu The road of rounds Playing the animals theme Level completed with stars

  • 4 themes: Animals, Monsters, Emojis and Ocean, each with its own progress
  • 6 roads per theme, from 3x2 up to 10x5 cards, 100 rounds each; the next road opens as you play
  • Every fifth round is one of seven mini-games: "Who was here?", "Follow the song", "What changed?", "Shadow match", "Odd one out", "Shopping list" and "Peek and find"
  • Stars per round, confetti and hopping friends when a round is done, a friend of the day on the menu
  • A friends album: every ten rounds a character joins it, tap one to meet it by name, and the collected friends visit the menu
  • A parents' corner behind a hold-to-open gate, with the privacy policy and a start-over
  • 21 languages, switchable in the game's settings
  • Works on phones and tablets, in landscape, offline

The story

2014 to 2019. The game was written in Java, released on Google Play as Memory Game (Free) and published here as open source. The last release was version 1.01.001007 in February 2019.

2019 to 2026. Maintenance stopped. Google Play removed the app in November 2019 for not keeping up with its developer policies, and the code sat still while Android moved on by twelve API levels.

2026. The revival. The whole app was converted from Java to Kotlin, restructured, debugged, tested and prepared for release purely with AI (Claude Code), with the original artwork and gameplay kept intact. Then it grew: the single round per difficulty became roads of a hundred rounds per theme, seven mini-games arrived on the special rounds, a friends album filled up, the menu came alive, and the game learned twenty new languages, with the words lifted out of the artwork so every picture could speak them. It is on its way back to the store.

Building

Standard Android Studio project: Kotlin, AndroidX, Gradle Kotlin DSL, target SDK 36, min SDK 24.

./gradlew :app:assembleDebug        # debug build, installs next to the store version
./gradlew :app:testDebugUnitTest    # game-logic unit tests
./gradlew :app:lintDebug            # lint, warnings are errors
./gradlew checkKeystore             # verify the signing keystore configuration
scripts/verify-release.sh           # signed release APK + AAB with pre-upload checks

Signing and the Play Store checklist are in docs/RELEASE.md. Signing material never lives in this repository. The privacy policy is published from the sromku.github.io site repository.

Artwork

The originals live in art/original. Everything the app draws is generated from them by one Gradle task, so a change to an original is a rerun and a commit:

  • Cards are vector characters. Each picture is upscaled 4x with Real-ESRGAN, traced to paths with vtracer, and its parts (body, eyes, pupils, shadow) tagged by geometry into app/src/main/assets/characters/<name>.chr. The app draws them on a Canvas, crisp at any size, and animates them: breathing and blinking while face up, a hop when matched. Tagging mistakes are corrected in art/character-overrides.txt.
  • UI art (buttons, popups, theme cards) becomes one vector drawable per asset: colours are bled into the transparent area, the silhouette is traced from the alpha channel and used as a clip path, and the soft drop shadow becomes one translucent path. The pictures carry no words: the lettered originals are kept in art/original/lettered, tools/erase-lettering.py writes de-lettered copies, and the app draws the words at runtime in the language of the player.
  • The title is a hatched texture that does not trace well and stays WebP. English keeps the hand-made original; tools/generate-titles.py draws the other languages in the same style. The play-button glow and the backgrounds stay WebP too.
  • Launcher and Play Store icons come from art/original/app_icon.png the same way.
brew install webp
# download realesrgan-ncnn-vulkan and vtracer for macOS from their GitHub releases
./gradlew regenerateArt -Prealesrgan=/path/to/realesrgan-ncnn-vulkan -Pvtracer=/path/to/vtracer

Languages

English plus twenty languages. The translations are Python data in tools/i18n, one dictionary per language, and tools/i18n/generate.py writes the values-<locale> resources from them. Grobold, the display font, has Latin letters only, so @font/game resolves per language to Rubik, Baloo 2 or Mitr (all Open Font License), and Chinese, Japanese and Korean use the system font. See docs/design/localisation.md.

Rules for changes

The Play listing declares the game for children and certifies COPPA and GDPR compliance. Any change must keep it free of data collection, network access, permissions, ads, purchases and third-party SDKs; CLAUDE.md spells this out and the checkChildSafety task fails the build when it can tell.

License

About

Simple and beautiful memory game for kids (since 2014)

Topics

Resources

Stars

597 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages