summaryrefslogtreecommitdiffstats
path: root/kreversi/DESIGN
diff options
context:
space:
mode:
Diffstat (limited to 'kreversi/DESIGN')
-rw-r--r--kreversi/DESIGN121
1 files changed, 121 insertions, 0 deletions
diff --git a/kreversi/DESIGN b/kreversi/DESIGN
new file mode 100644
index 00000000..d2a13202
--- /dev/null
+++ b/kreversi/DESIGN
@@ -0,0 +1,121 @@
+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 signals to all its views
+ when something changes. Basically, the only difference between
+ this class and the more basic ReversiGame is that it sends 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.