PRIORITY QUEUE

- general:
  - make support for puzzle files in a directory
  - print error message (at least into log.txt or error.txt) when something bad happens
  - make a tool which downloads puzzles from the nikoli webpage
  - processmousedown() is hideous, improve it
  - fix the graphic bug on unix!
  - allow resizing when messagebox is shown, use callback to update or something
    like that
  - make fancy controls:
    - hold mouse button and mark all unfilled cells
  - serious refactoring: remove all common code between games
  - nice resizing of numbers
  - timer
  - some kind of puzzle selection system

- nurikabe
  - make fancy controls:
    - enclose finalized island
    - fill enclosed region with island

- yajilin

- hashiwokakero

- masyu

- shikaku

- slitherlink

- fillomino

- kakuro

- sudoku (generalized)

- more games?

- variants of above games?


GENERAL GOAL

make a client for playing nurikabe, heyawake, akari, slitherlink, yajilin, hashiwokakero, masyu
and possibly other fun puzzles. use sdl (maybe opengl) for graphics.

features:
- automatic puzzle generation
- read puzzles from files supplied by user
- in-game hint function which uses a fabolous solver written by myself
  - the hint system has several levels: 
    - only show trivial hints (like surrounding the 1 in nurikabe,
      forced placement of light in akari, one possible way to fill in
      a rectangle independently of surrounding)
    - medium hints (like o | ? | o in heyawake, fill the ?)
    - deep hints (stuff requiring backtracking or advanced reasoning)
- in-game intervention of player moves: warn about wrong moves
  (can be turned off, or warn about trivial mistakes only, or warn also about
  deeper mistakes)

framework:
- make a general graphics engine with the following helper functionality:
  - given a screen resolution and grid size, scale appropriately
  - sttt flgende mouse events:
    - klikk i celle
    - dra fra celle til nabocelle
    - klikk p ikon over (som check, try, etc)
    - klikk p en kant mellom to celler (slitherlink)
  - sttt tastaturstyring:
    - cursor: flytt rundt
    - space: endre cell
    - shift+cursor: legge til/fjerne kant
    - cursormode for slitherlink: naviger langs kanter
  - sttte for full undo, som for hvert trekk lagrer hvilke grafiske endringer som
    skjer (dvs endret innhold i rute, endring i kanter som trekkes

documentation:
- for each game, write a nice article (html page?) showing:
  - the rules (with screenshots)
  - the heuristics used by the solver (demonstrated with screenshots),
    containing.
    - when to apply the heuristic
    - how to apply it (what cells to fill with what)
    - which rule we violate by filling out the cells in a wrong way
