Yuvaraj Vodiboina
All work
(04)Case studyAndroid game

Nicked

Guess the Cricketer

One mystery cricketer a day, and six tries to name them. Every guess is a real cricketer, compared with the answer on six clues, and Nick the cricket ball explains each one.

Platform
Android game
When
2026
Role
Sole developer
Version
0.2.0, 5 Oct 2026
Price
Free, with ads
Status
In closed testing
(01)

How it works

4 steps
  1. 01

    Type any cricketer

    Start with anyone you know. Six tiles turn green, yellow or grey, and Nick explains any tile you tap.

    Open larger: Guess the cricketer
  2. 02

    Nick it in six

    Narrow it down guess by guess, then share your result as a spoiler-free grid of coloured squares.

    Open larger: Nicked it! One new mystery cricketer every day
  3. 03

    Then play Run Chase

    Name as many cricketers as you can in 60 seconds while the runs and combos pile up.

    Open larger: Run Chase: name cricketers before the clock runs out
  4. 04

    Come back tomorrow

    A new mystery cricketer every day. Keep your streak, earn XP and unlock new kit for Nick.

    Open larger: Keep your streak alive
(02)

The problem

Most cricket quizzes are a list of multiple-choice questions. You either know the answer or you don’t, and a wrong answer teaches you nothing.

(03)

What I built

A daily cricket quiz that plays like a word puzzle. There’s one mystery cricketer a day, the same for everyone, and six tries to name them. Every guess is a real cricketer, compared with the answer on six clues: country, role, batting hand, bowling style, debut year and formats played. Each clue turns green, yellow or grey, and Nick, the cricket ball, explains any tile you tap.

After the puzzle there’s Run Chase: name as many cricketers as you can in 60 seconds, with combos for double and triple runs. Streaks, daily quests, XP and badges bring you back, and you can share your result as a spoiler-free grid.

Hard partGetting 403 international cricketers right, from legends to today’s players, each checked against a published source, so no clue is ever wrong.

(04)

What it does

  1. 01

    Six clues on every guess

    Country, role, batting hand, bowling style, debut year and formats played, each green, yellow or grey.

  2. 02

    Nick explains every tile

    Tap a clue and Nick, the cricket ball, says what it means in plain words.

  3. 03

    Run Chase

    Runs for every cricketer you name against the clock, and combos for double and triple runs.

  4. 04

    403 international cricketers

    Legends and today’s stars from India, Australia, England, Pakistan, South Africa, Nepal, Scotland and more.

  5. 05

    Streaks, XP and badges

    Daily quests, a streak freeze for the day you forget, and a cap, shades and a helmet for Nick.

  6. 06

    Practice and past puzzles

    Extra puzzles that never touch your streak, any day you missed, and a code to challenge a friend.

(05)

Under the hood

  1. 01Frozen scheduleThe same cricketer for everyone, every day

    Each day’s cricketer comes from a frozen schedule, shuffled by a SplitMix64 generator of my own, so everyone gets the same one on the same day.

  2. 02SearchForgives typos, initials and other names

    Exact names first, then the start of a name, word starts and initials in order, then typos: one edit for four to six letters and two from seven.

  3. 03Feedback engineSix clues: green, yellow or grey

    Every guess is a real cricketer, compared with the answer on six clues, and Nick the cricket ball explains each one. A colourblind mode swaps the colours.

  4. 04DataStoreToday’s game and your streak, on the phone

    Your streak, stats and settings stay on the phone, with no account. Google Play Games is optional, for achievements, leaderboards and taking a streak to a new phone.

  • An answer order that can’t drift

    Each day’s cricketer comes from a frozen schedule, shuffled by a SplitMix64 generator of my own, because Kotlin’s Random isn’t guaranteed to give the same sequence across versions. A Python script runs the same algorithm, and a golden test keeps the two in step.

  • Search that forgives you

    Exact names first, then the start of a name, word starts and initials in order, then typos: one edit for four to six letters and two from seven, with swapped letters counted as one.

  • A stray tap never costs a guess

    Tapping a suggestion only selects a player, and Guess submits. Free text can’t be submitted at all.

  • Midnight, wherever you are

    The countdown uses the time zone’s real start of day, so it’s right on the 23 and 25-hour days when the clocks change.

  • Readable for everyone

    A colourblind mode swaps green and yellow for blue and orange, every colour pair meets WCAG AA contrast, and every cell also shows a tick, a tilde or a cross.

(06)

In the code

The same cricketer for everyone, every day

Kotlin’s Random isn’t promised to give the same sequence across versions, so the schedule is shuffled by a SplitMix64 of my own. A Python script runs the same algorithm, and a golden test keeps the two in step.

domain/DailyPuzzle.kt, lines 67 to 76 and 80 to 97

DailyPuzzle.kt
/** Fisher-Yates with SplitMix64. Our own PRNG so the order never changes across Kotlin versions. */
fun seededShuffle(items: List<String>, seed: Long): List<String> {
    val out = items.toMutableList()
    val rng = SplitMix64(seed)
    for (i in out.lastIndex downTo 1) {
        val j = rng.nextInt(i + 1)
        val tmp = out[i]; out[i] = out[j]; out[j] = tmp
    }
    return out
}

internal class SplitMix64(private var state: Long) {
    fun nextLong(): Long {
        state += GOLDEN_GAMMA
        var z = state
        z = (z xor (z ushr 30)) * MIX_1
        z = (z xor (z ushr 27)) * MIX_2
        return z xor (z ushr 31)
    }

    /** Uniform enough for shuffling a few hundred ids; bias is below 2^-50. */
    fun nextInt(bound: Int): Int = ((nextLong() ushr 1) % bound).toInt()

    private companion object {
        val GOLDEN_GAMMA = 0x9E3779B97F4A7C15uL.toLong()
        val MIX_1 = 0xBF58476D1CE4E5B9uL.toLong()
        val MIX_2 = 0x94D049BB133111EBuL.toLong()
    }
}
(07)

Decisions

  1. 01

    Every guess is a real cricketer, never a multiple choice

    So every guess tells you something, and a few smart ones make the answer click.

    Trade-offIt needs every player’s six facts to be right. There are 403 international cricketers in it, each checked against a published source.

  2. 02

    No account, and it works offline

    Your streak, stats and settings stay on your phone, and two minutes a day shouldn’t start with a sign-up.

    Trade-offTo take a streak to a new phone, you sign in to Google Play Games, which stays optional.

  3. 03

    An unofficial fan game, with no photos or logos

    It isn’t affiliated with any board, league or team, and it doesn’t pretend to be.

    Trade-offThe clues and Nick have to carry the look on their own.

(08)

A bug I remember

Two quick guesses, saved out of order

What it did
Make two guesses in quick succession, and the game could store the older of the two states.
Why
Each guess saved on its own, so the two writes could finish in either order.
The fix
Saves now go one at a time, and each one writes the latest state. A test caught it before any player could.
(09)

What I tried first

  • Six clues in one row

    Six columns couldn’t fit “Wicketkeeper” or “Right-arm fast-medium” on a 360dp screen with larger text, so each guess is a grid of three by two.

(10)

What I learned

  • Tests on virtual time failed now and then, because storage callbacks only moved forward when the test scheduler happened to run. Running them in real time made the suite pass 15 runs out of 15.
(11)

Timeline

  1. 0.1.0, in testing on Google Play

    A daily mystery cricketer, Run Chase and Practice, with streaks, XP, badges and a colourblind mode. It opens to everyone once testing ends.

  2. 0.2.0

    226 more players, for 403 in all, and Google Play Games if you want it: badges as achievements, three leaderboards, and a saved game that takes your streak to a new phone.

(12)

Built with

KotlinJetpack ComposeDataStorePython, for the data scriptsAdMobPlay BillingPlay Games

Your dataNo account of its own and no sign-up. Your streak, stats and settings stay on your phone unless you sign in to Google Play Games, and the puzzles work offline.

(13)

Every screen

6 from the store listing
  1. Open larger: Guess the cricketer

    01Guess the cricketer

  2. Open larger: Nicked it! One new mystery cricketer every day

    02Nicked it! One new mystery cricketer every day

  3. Open larger: Run Chase: name cricketers before the clock runs out

    03Run Chase: name cricketers before the clock runs out

  4. Open larger: Earn XP and badges

    04Earn XP and badges

  5. Open larger: Keep your streak alive

    05Keep your streak alive

  6. Open larger: Made in India, made for India

    06Made in India, made for India

Next05 of 16Android Companion AI
One good quote a day, at the time you choose. Works offline, with no feed.Read the case study