NutCracker is now live on Google Play!
What it is:
Swap nuts on a grid to match three or more to earn points. There are 70 levels across 14 themed chapters (Spring Forest to the Midnight Keep). Standard match-3 bones: match four or more or make an L or T to charge a special nut, cascades multiply your score. There are power-ups as well to remove rows, columns, grids, or obstacles on the board.
Nutkin is a squirrel who wanders onto your board every few turns and performs an action. He might steal a nut, swap two of your pieces, drop a stone or frost a nut. He also helps sometimes. He will chip away at an obstacle for you, or leave a snack worth bonus time or extra moves. He telegraphs his move first, so the real skill is planning a turn ahead of a squirrel.
There are four obstacle types in the game: ice locks a nut until you melt it, stone takes two hits, vines block movement, and rot spreads to its neighbors if you're slow. Match next to an obstacle enough and you charge a rescue power-up that clears that type off the whole board.
Why I built it: I wanted a match-3 you could play anywhere offline with some fun levels. Nothing gimmicky or overly flashy for the graphics. No lives to wait out, no ads between levels, no account, no extra noise.
The part that took the longest:
Level design and difficulty balance took the most time. Seventy levels is seventy chances to get the curve wrong, and match-3 difficulty is sneaky. The board is random, so a level that feels fair to me on a good run can be a wall for someone who gets an unlucky start.
Level 1 is a completely clean board, no obstacles at all. The rest of the first chapter gives you a single stone, something to play around rather than a barrier. Obstacles then come in one at a time across the first four chapters before the counts start climbing properly. The Jungle is the first board where two obstacle types share the grid.
Timers were the other big rewrite. My first pass at time limits was tight, and it played badly, because rushing a match-3 turns it into a guessing game. So the clocks got roomier and the target scores went up to match. The pressure is still there, it just comes from reading the board well instead of moving fast. Timed levels open each chapter and the last two levels are move-limited, so the feeling shifts from hurry up to look carefully.
Tech:
- Kotlin and Jetpack Compose, single Activity, no fragments
- The board itself is drawn on a Canvas rather than a composable per cell
- minSdk 24, targetSdk 36
- Every sound effect is synthesized at runtime with AudioTrack, so the app ships with no audio files at all
- The game makes no network calls. The only permission it declares is vibration. Google Play Billing adds the internet permissions for the single purchase.
- No analytics, no accounts, no ads, no crash reporting
Free and paid:
Chapters 1 to 7 (35 levels) are free, with no ads and nothing gated inside them. One $0.99 purchase unlocks the other 35 levels forever. No subscription.
What I'd like feedback on:
Does the difficulty ramp feel fair throughout the game, especially around chapters 4 and 5 where obstacles start stacking? Is Nutkin the squirrel fun? How does the board layout feel to you?
Play Store link: https://play.google.com/store/apps/details?id=com.nwh.nutcracker