NumPairs is a native Android puzzle game inspired by arithmetic grid challenges.
The project is being built iteratively, starting with a small playable prototype and expanding later with stronger gameplay rules, better presentation, and more game modes.
Historical snapshots: prd-v0.md, prd-v1.md, prd-v2.md
Canonical product reference: prd-v3.md
- Kotlin
- Jetpack Compose
- Gradle Kotlin DSL
- Android Studio
The puzzle core uses a small domain layer guided by the project's ubiquitous language and DDD-inspired modeling.
Current core concepts:
PuzzleBoardTileExpressionOperatorStrip
app/
├── src/main/java/org/cescfe/numpairs/
│ ├── MainActivity.kt
│ ├── data/puzzle/seed/
│ ├── domain/fourpairs/
│ ├── domain/puzzle/
│ ├── feature/fourpairs/
│ ├── feature/game/
│ │ ├── GameRoute.kt
│ │ ├── presentation/
│ │ └── ui/
│ │ └── components/
│ ├── feature/menu/
│ └── ui/
│ ├── navigation/
│ └── theme/
docs/
├── product/
├── technical/adr/
├── game-rules.md
└── ubiquitous-language.md
Current responsibilities are split as follows:
data/puzzle/seed: handcrafted puzzle data currently used by Tutorial and ready to be replaced by authored tutorial content.domain/puzzle: puzzle rules, validation, assignments, and core domain types.domain/fourpairs: generated4 Pairsrules, generation, and validation-facing domain models.feature/fourpairs: generated4 Pairsroute and puzzle provider wiring.feature/game: reusable Game feature entry point plus itspresentationanduisubpackages.feature/game/ui/components: Game-specific Compose building blocks such as tiles and chips.feature/menu: menu entry point for selecting Tutorial or generated4 Pairs.ui/navigationandui/theme: app-level navigation wiring and shared theming.
- Canonical PRD: prd-v3.md
- Product Requirements Documents:
docs/product/prd/ - Product roadmap: roadmap.md
- Rules helper requirements: rules-helper.md
- Puzzle generation: puzzle-generation.md
- UX decisions:
docs/product/ux-decisions.md - Future in-game calculator proposal: in-game-calculator.md
- Architectural Decision Records:
docs/technical/adr/ - Game rules:
docs/game-rules.md - Ubiquitous Language:
docs/ubiquitous-language.md
- Open the project in Android Studio
- Sync Gradle
- Run on emulator or Android device
# Run unit tests
./gradlew testDebugUnitTest
# Run instrumented UI tests on a connected emulator/device
./gradlew connectedDebugAndroidTest# Check all formatting
./gradlew spotlessCheck
# Apply formatting
./gradlew spotlessApply
# Run all quality checks
./gradlew checkMIT License