-
Notifications
You must be signed in to change notification settings - Fork 0
DOC
pahosler edited this page Aug 9, 2026
·
3 revisions
Last updated: 2026-08-09
- 9x9 grid, themes (light/dark), navigation (mouse, arrows, hjkl/wasd, Tab blocks)
- Number entry, clear cell, conflict highlight (row/col/box)
- Lock/unlock toggle (Ctrl+Shift+L), clear unlocked (Ctrl+Shift+C)
- Exit confirmation, monospaced fonts, locked cell visuals
- Package refactor (root main.odin, src: collection, Game state, events/render/...)
- Feature parity after refactor
- Cleanup pass: thickness typo, fonts.destroy defer, src:vecs import, remove unused theme param, remove bak/conflict/raydocs, events orchestrator, solver.odin placeholder comment
- game.odin: drop unused imports (mouse alias, core:fmt, core:strings, vecs)
- keyboard.odin: drop unused import "src:theme" if still present
- Merge dev → master when ready
- Save / Load puzzles
- Keyboard shortcuts (Ctrl+S / Ctrl+O) first
- Simple file format (text or small structured format)
- Design functions so UI/menus can call them later
- Backtracking solver
- Fill empty cells; respect locked cells as givens
- No separate "Unsolve" (clear unlocked covers editor workflow)
- Undo / Redo
- History stack of board states (and ideally locked flags)
- Persistent undo across sessions (Neovim-style undofile: save undo history next to puzzle file or in a known cache dir, reload when opening the same puzzle)
- Pencil marks / candidates (useful for designing puzzles)
- More themes
- Near-term: cycle with Space (or Shift+Space)
- Later: microui list of light/dark themes, radio/checkbox selection
- On-screen toolbar or microui menus (Save/Load/Solve, theme picker)
- Printable / shareable puzzle export
- WASM / Linux polish (after macOS is solid)
- Coordinate convention: selected.x = row, selected.y = col
- Locked cells = puzzle givens; Ctrl+Shift+C clears the rest
- Prefer alphabetical order for struct fields and constant lists
- Type the code to learn; ask for walkthroughs when stuck on algorithms
- Build: make run (odin run . -collection:src=src)