ksudoku's move to kdereview

Robert Knight robertknight at gmail.com
Mon May 7 03:18:50 BST 2007

Hi Josel,

I have played around with ksudoku a little.  Some comments:

1.  For a Sudoku game, the interface looks very complicated on
startup.  I think a simple and tidy interface is important not to
scare away people looking for a distraction ( once you get them
hooked, they will stay for more ).  Some of this I think can be easily

- There is a toolbar with the numbers 1 to 9 on it.  Is this really necessary?
- The contents of the "Web" menu can be put in the Help menu
- The "Select Number" menu is in the same situation as the toolbar, I
don't think it is really very useful because selecting an item from it
is a slow task to perform ( You have to click on the menu item, scan
for the appropriate letter, move the mouse to it, select it and then
rinse and repeat )
- Can the contents of the "Options" menu be put in the Settings menu?
- The Undo / Redo actions are duplicated in the Edit and Move menus.
Since these are the only items in the Edit menu, removing them means
that whole menu can be removed.

I found the startup screen a little confusing for a couple of reasons.
 Firstly there are a lot of options and other UI elements ( including
the toolbar which is not relevant outside of actual gameplay ) on
screen when you start the application.   I can think of a couple of

A:  Most games tend to take a "story-board" approach to setting up a
game, where you select the game options on a series of screens.  As
opposed to having all the options on one screen.  Each screen is
typically fairly simple with only one decision available on each
screen, and only four or five clickable elements on screen.

So for example, on startup you go through a sequence:

[ Game Type Screen ] -> [ Difficulty Screen ] -> Play!

Where the "Game Type" screen would show maybe four or five pictures
for the different types of Sudoku board available.  The difficulty
screen would then display three buttons - one for "Easy", one for
"Medium" and one for "Advanced"

A welcome screen was recently added to KBattleShip which implements
this, hopefully you could make use of that code.

B:  Another approach used in other kde games is to start up and go
straight into the game using sensible default settings.  In the case
of Sudoku, probably a straightforward 9x9 grid with an easy difficulty
level.  The user can then change the game type using the menu.

2.  I found all the colored areas drawn as you move the cursor around
on the game board quite distracting.  There is a strong blue
background, the current segment highlighted in green and the current
row in a red color.  This makes it harder to read the numbers in the

3.  I wasn't sure how to enter numbers int cells at first, because the
cells do not change their appearance when you click on them to
indicate that you can enter a number.

4.  There are some performance problems.  The minor one is the
perceptible delay after pressing a number before the cell under the
mouse cursor is filled in ( perhaps 200-300 ms or so ) - especially
with large games.  I think this delay contributed to (3) because I
pressed a number key on my keyboard and had to wait a moment before
the cell got filled in.  I had a quick look using callgrind and there
was nothing very obviously wrong, and most of the timer spent in
SKSolver::solve_engine as one might expect.  It looks like you have
already spent quite some time on this, and Sudoku is a hard problem -
so perhaps the easiest option is to tweak the user interface such that
the number appears as soon as you press the key, while any
computations that it triggers happen in the background.

Rendering large ( eg. 25x25 ) Sudoku boards is somewhat slow.

Looking at your code, it seems that you are using a QWidget for every
tile on the board.  So for a 25 * 25 board, that means 625 widgets.
Widgets are heavy resource-wise and not designed to be used like this.
 The Qt 4 Graphics View framework is a much better fit for what you
are trying to do.  With QGraphicsView,  you have only one QWidget on
screen, rendering the contents of a QGraphicsScene.  Each tile then
becomes a much lighter-weight QGraphicsItem object.  I don't have
experience converting games over to the QGraphicsView framework, but
the kde-games developers do - I would suggest asking them about this.
I think it is very much worth doing though, not only for performance
but also for the pretty effects and extras that are made much easier
with it.

5.  The 3D Sudoku mode is quite interesting - although I didn't know
from the game setup screen that is what it was. Perhaps include the
phrase "3D Sudoku" somewhere?


On 05/05/07, Johannes Bergmeier <Johannes.Bergmeier at gmx.net> wrote:
> on thursday i moved ksudoku from playground to kdereview.
> ksudoku is a sudoku game, which provides a puzzle generator and solver and
> support for different variants of sudoku (like roxdoku, samurai and jigsaw).
> it was invited to be part of kdegames and is now allmost completely ported to
> KDE4.
> if you have suggestions on what parts needs to be improved or where our team
> did mistakes i would love to receive comments.
> Josel
> --
> Johannes Bergmeier
> Johannes.Bergmeier at gmx.net
> Jabber: joselb at jabber.org

More information about the kde-core-devel mailing list