| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
💡 shdoku
A basic tui sudoku game for your shell.
Controls
The current control scheme adheres to vim-like keybindings and is modal.
-
h, j, k, lto moveleft, down, up, right -
H, J, K, Lto move 3 spaces at once -
1-9to preselect a number -
Modes:
ato enter Markup modeito enter Edit modegto enter Go mode1-9to move to block- you then return to the previous mode
AandIto enter Edit/Markup mode "once"- do a single edit/mark
- you then return to the previous mode
<esc>to return to Edit mode
-
<space>to place/unplace preselected number/mark -
xto delete a number/mark -
qto quit
Preview
This is what the sudoku will be displayed like.
┌────────┬────────┬────────┐
│ 5 3 │ 7 │ │
│ 6 │ 1 9 5 │ │
│ 9 8 │ │ 6 │
├────────┼────────┼────────┤
│ 8 │ 6 │ 3 │
│ 4 │ 8 3 │ 1 │
│ 7 │ 2 │ 6 │
├────────┼────────┼────────┤
│ 6 │ │ 2 8 │
│ │ 4 1 9 │ 5 │
│ │ 8 │ 7 9 │
└────────┴────────┴────────┘
Todo
-
Game logic
- Validate Sudokus
- Generate Sudokus
- Difficulties to choose
- Timer
- Scoreboard per difficulty
- Undo functionality
-
Basic UI
- Basic controls
- Basic rendering
- Centered UI
- Reset terminal state
-
Final UI
- Final controls
- Preselect numbers
- Edit Mode to (re)place numbers
- Markup Mode to mark where numbers could go
- Go Mode to move to blocks 1-9
- Toggle Number/Mark with Space
- Colored UI
- Hightlight selected numbers
- Hightlight selected markups
- Color chooser
- Live timer
- Scoreboard access
- Difficulty selection
- Final controls
The Final UI design should include a sidebar, that will look something like the following:
┌────────┬────────┬────────┐ ┌───────┐
│ │ │ 8 9 │ │ Hard │ <- Difficulty
│ 4 9 7 │ │ 6 │ │ 36/81 │ <- Completion in number of cells
│ 2 │ 3 1 │ 7 │ ├───────┤
├────────┼────────┼────────┤ │ 01:22 │ <- Elapsed Time
│ 6 │ 9 7 │ 3 │ ├───────┤
│ 3 │ 5 2 │ │ │> Edit │ <- Active Mode
│ 7 2 │ 1 3 │ 5 4 │ │ Mark │
├────────┼────────┼────────┤ │ Go │
│ 2 1 │ 3 7 │ 9 5 │ ├───────┤
│ 5 │ 9 │ 3 4 │ │ [9] │ <- Preselected Number
│ │ 4 │ 6 1 │ │ 4 / 9 │ <- Completion of preselected Number
└────────┴────────┴────────┘ └───────┘