Skip to content
pahosler edited this page Aug 9, 2026 · 3 revisions

Sudoku Solver (Odin + Raylib 6) — TODO

Last updated: 2026-08-09

DONE

  • 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

CLEANUP (optional polish)

  • 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

NEXT (core)

  • 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)

LATER

  • 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)

STRETCH (after solver + save/load)

  • 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)

NOTES

  • 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)

Clone this wiki locally