Initial commit: Zabavna Matematika web and Android app.
Kids math practice (SL/EN) in a Vite React app, wrapped with Capacitor for Android (net.bit76.matematika). Includes session refactor, i18n, and text-free difficulty icons with translated overlays.
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
# Math Game – Difficulty Levels
|
||||
|
||||
This document describes **how the game works today**.
|
||||
|
||||
Difficulty changes **how the player answers** and some number caps.
|
||||
The player still chooses **which operations** to practice in Settings (`+`, `−`, `×`, `÷`).
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Three difficulties:
|
||||
|
||||
| Key | Label | Input | Timer |
|
||||
|---|---|---|---|
|
||||
| `easy` | Lahko | 4 multiple-choice buttons | Stopwatch (on) |
|
||||
| `medium` | Srednje | 6 multiple-choice buttons | Stopwatch (on) |
|
||||
| `hard` | Težko | Numeric keypad + OK | Stopwatch (on) |
|
||||
|
||||
Settings also choose:
|
||||
|
||||
- Which operations are active
|
||||
- How many questions (`stevilo_racunov`)
|
||||
- Add/subtract range (`max_number`)
|
||||
- Multiplication factors (`za_mnozenje`)
|
||||
- Division divisors (`za_deljenje`)
|
||||
|
||||
---
|
||||
|
||||
## Easy (`easy` / Lahko)
|
||||
|
||||
- Input: **4 choices**
|
||||
- Timer: stopwatch, enabled
|
||||
- Negatives: not allowed
|
||||
- Multiply other-factor cap: **1–10**
|
||||
- Add/subtract range: from settings (`max_number`)
|
||||
|
||||
---
|
||||
|
||||
## Medium (`medium` / Srednje)
|
||||
|
||||
- Input: **6 choices**
|
||||
- Timer: stopwatch, enabled
|
||||
- Negatives: not allowed
|
||||
- Multiply other-factor cap: **1–12**
|
||||
- Add/subtract range: from settings (`max_number`)
|
||||
|
||||
---
|
||||
|
||||
## Hard (`hard` / Težko)
|
||||
|
||||
- Input: **keypad** (digits, backspace, `OK`; `±` only if `allowNegative` is on)
|
||||
- No multiple-choice buttons
|
||||
- Timer: stopwatch, enabled
|
||||
- Negatives: **off** (`allowNegative: false`) unless flipped later in `levels.js`
|
||||
- Multiply other-factor cap: **1–20**
|
||||
- Add/subtract range: from settings (`max_number`)
|
||||
- Division: exact results only
|
||||
|
||||
---
|
||||
|
||||
## Code map
|
||||
|
||||
```js
|
||||
// web/src/levels.js
|
||||
LEVELS = {
|
||||
easy: { inputType: 'choices', choicesCount: 4, timerEnabled: true, allowNegative: false, multiplicationMaxA: 10 },
|
||||
medium: { inputType: 'choices', choicesCount: 6, timerEnabled: true, allowNegative: false, multiplicationMaxA: 12 },
|
||||
hard: { inputType: 'keypad', choicesCount: 0, timerEnabled: true, allowNegative: false, multiplicationMaxA: 20 }
|
||||
}
|
||||
```
|
||||
|
||||
Questions are built by `buildSession(config, level)` in `web/src/questionGenerator.js`.
|
||||
The Game screen only renders `question.text` and checks `question.result`.
|
||||
|
||||
---
|
||||
|
||||
## Design principles
|
||||
|
||||
- Difficulty increases interaction complexity, not intimidation
|
||||
- Same play screen, different answer component
|
||||
- Hard is framed as a challenge, not a punishment
|
||||
- Unfinished modes (rounding, dice, calculator, equations, text problems) are **not** in the live path
|
||||
Reference in New Issue
Block a user