|
|
|
This file describes the overall design of KReversi. Some of the
|
|
|
|
classes have different names at this point, but that is indicated by a
|
|
|
|
(now: XXX) tag. These names will be changed when the KDE project has
|
|
|
|
converted from CVS to Subversion since Subversion has so much better
|
|
|
|
support for renaming files and directories.
|
|
|
|
|
|
|
|
Almost all of the classes hold more members than are mentioned here,
|
|
|
|
but those are implementation details and would only obscure the
|
|
|
|
overall picture. This file is only to give a helicopter view of the
|
|
|
|
program, not to serve as detailed documentation.
|
|
|
|
|
|
|
|
|
|
|
|
Classes
|
|
|
|
=======
|
|
|
|
|
|
|
|
Class Diagram (See details below)
|
|
|
|
-------------
|
|
|
|
|
|
|
|
KReversi----------------------------------------------+
|
|
|
|
| | +--------------------------------+ |
|
|
|
|
| +-----------------+ | |
|
|
|
|
| | | |
|
|
|
|
| v v v
|
|
|
|
| QReversiGameView Engine StatusBar
|
|
|
|
| | | | (shows whose turn it is)
|
|
|
|
| +- - - - - - - + | +----------+
|
|
|
|
| | v v
|
|
|
|
| +- - - -QReversiBoardView Other widgets
|
|
|
|
| | | (movelist, score)
|
|
|
|
v v v
|
|
|
|
QReversiGame
|
|
|
|
X
|
|
|
|
v
|
|
|
|
Game
|
|
|
|
I +=========+
|
|
|
|
I I
|
|
|
|
v v
|
|
|
|
Position Move[]
|
|
|
|
|
|
|
|
|
|
|
|
Legend:
|
|
|
|
XXXXXXXX> Inherits
|
|
|
|
========> Contains
|
|
|
|
--------> Ownership pointer
|
|
|
|
- - - - > Reference pointer
|
|
|
|
|
|
|
|
|
|
|
|
Details
|
|
|
|
-------
|
|
|
|
|
|
|
|
ReversiPosition (now: Position)
|
|
|
|
Holds a Reversi position. This is the object that implements the
|
|
|
|
Reversi rules.
|
|
|
|
|
|
|
|
|
|
|
|
ReversiMove (now: Move)
|
|
|
|
A move in a Reversi game.
|
|
|
|
|
|
|
|
|
|
|
|
ReversiGame (now: Game)
|
|
|
|
Holds all the moves of the game being played.
|
|
|
|
Contains: ReversiPosition Holds the current position.
|
|
|
|
Move[60]
|
|
|
|
FIXME: Remove the ReversiPosition and let it be implicit?
|
|
|
|
FIXME: Implement variations (later)
|
|
|
|
|
|
|
|
|
|
|
|
Engine
|
|
|
|
Can generate a move, given a ReversiPosition.
|
|
|
|
|
|
|
|
|
|
|
|
QReversiGame
|
|
|
|
The "document" for KReversi.
|
|
|
|
Handles a game being played and sends Q_SIGNALS to all its views
|
|
|
|
when something changes. Basically, the only difference between
|
|
|
|
this class and the more basic ReversiGame is that it sends Q_SIGNALS
|
|
|
|
to the views.
|
|
|
|
Inherits: ReversiGame The actual game being played
|
|
|
|
|
|
|
|
|
|
|
|
QReversiGameView (status: PLANNED)
|
|
|
|
|
|
|
|
Shows a view of a complete game. Currently this comprises a board
|
|
|
|
view, a listbox with a list of the moves, two status widgets
|
|
|
|
showing the current score.
|
|
|
|
|
|
|
|
Contains: *QReversiBoardView
|
|
|
|
*QListBox
|
|
|
|
*StatusWidget (two of them)
|
|
|
|
|
|
|
|
|
|
|
|
QReversiBoardView
|
|
|
|
|
|
|
|
A view for a Reversi board. The rest of the game view is
|
|
|
|
implemented in the class QReversiGameView.
|
|
|
|
|
|
|
|
Inherits: QWidget.
|
|
|
|
Contains: *QReversiGame (not owner)
|
|
|
|
|
|
|
|
FIXME: Enhance the view with timing information, clock, etc.
|
|
|
|
|
|
|
|
|
|
|
|
KReversi
|
|
|
|
The main class for the KReversi program
|
|
|
|
Contains: KActions
|
|
|
|
*QReversiGame (owner)
|
|
|
|
*KReversiGameView (owner)
|
|
|
|
*Engine (owner)
|
|
|
|
Statusbar
|
|
|
|
|
|
|
|
FIXME: Let the class also own two players.
|
|
|
|
|
|
|
|
|
|
|
|
EngineView (status: PLANNED)
|
|
|
|
View of the internal thought processes of an Engine (trace, etc).
|
|
|
|
|
|
|
|
|
|
|
|
Some notes
|
|
|
|
----------
|
|
|
|
|
|
|
|
* KReversi follows the Model/View principle strictly.
|