Lucky Scratch
Lucky Scratch is an Android game I designed and developed end-to-end as a solo
developer. Beyond being a casual game, the project was an experiment in
client-side 2D gaming for Android, scalable backend ranking, and user behavior
at scale, reaching 200,000+ downloads on
Google Play Store.
This was my first and only app for Android.

Technical Focus
This project involved full ownership of the system, from rendering and input
handling on Android to backend ranking logic and cloud deployment.

Android Client (Native, Java)
- Custom 2D Rendering Engine Implemented directly on Android Canvas with
bitmap blending to simulate realistic scratch interactions while keeping
rendering lightweight and deterministic.
- Scratch Detection Algorithm Designed a point-cloud–based detection
algorithm using Gaussian distributions to determine when a card was
sufficiently scratched, tolerant to noisy or irregular user gestures.
- Game Loop & Logic Manual game loop management for consistent frame
updates, animations, and input handling without relying on external engines.
- Card & Scoring Systems Multiple card types with distinct probability
distributions, pricing, and reward logic, designed to be randomic rather than
hardcoded.
Backend & Infrastructure
- Application Server (Java, Google App Engine) Implemented REST endpoints
for score submission and leaderboard queries.
- Custom Leaderboard Ranking Algorithm Built an N-ary tree–based ranking
system to efficiently insert and rank scores at scale.
- Lexicographic Score Ranking deterministic ordering for players with
similar progress.
- Google Cloud Datastore (NoSQL) Used for scalable persistence of user
scores and ranking data.
- Google Play Games Services Integration Authentication and user identity
handled via Google Play Games, separated from game logic.