aboutsummaryrefslogtreecommitdiff
path: root/doc/tex/systemAnalysis.tex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/tex/systemAnalysis.tex')
-rw-r--r--doc/tex/systemAnalysis.tex181
1 files changed, 181 insertions, 0 deletions
diff --git a/doc/tex/systemAnalysis.tex b/doc/tex/systemAnalysis.tex
index d92f537..7753018 100644
--- a/doc/tex/systemAnalysis.tex
+++ b/doc/tex/systemAnalysis.tex
@@ -188,6 +188,8 @@ the Game System to analyze positions and generate moves via decision algorithms.
\subsection{Class analysis}
+\subsubsection{Class diagram}
+
The classes resulting from the analysis phase are shown in
\fref{fig:analysisClasses}.
@@ -198,3 +200,182 @@ The classes resulting from the analysis phase are shown in
phase.}\label{fig:analysisClasses}
\end{center}
\end{figure}
+
+\subsubsection{Class description}
+
+\newcommand{\interclassSpace}{30pt}
+
+\indent
+
+\begin{tabular}{p{\linewidth}}
+ \toprule
+ \textbf{EngineIO} \\
+ \midrule
+ \textbf{Description} \\
+ Offers the interface with the engine. \\
+ \midrule
+ \textbf{Responsibilities} \\
+ % TODO: Single responsibility would be better?
+ \tabitem{Read input.} \\
+ \tabitem{Do some preprocessing.} \\
+ \tabitem{Forward commands to the engine logic component.} \\
+ \midrule
+ \textbf{Proposed attributes} \\
+ \midrule
+ \textbf{Proposed methods} \\
+ \tabitem{\textbf{start()}: Starts reading standard input in a loop.} \\
+ \bottomrule
+\end{tabular}
+
+\vspace{\interclassSpace}
+
+\begin{tabular}{p{\linewidth}}
+ \toprule
+ \textbf{EngineLogic} \\
+ \midrule
+ \textbf{Description} \\
+ Does the core logic and connects the different components of the engine. \\
+ \midrule
+ \textbf{Responsibilities} \\
+ \tabitem{Processes the commands and arguments forwarded by the IO
+ component.} \\
+ \tabitem{Handles the logic of the game by using components from the game
+ module.} \\
+ \tabitem{Calls a decision algorithm to generate moves.} \\
+ \midrule
+ \textbf{Proposed attributes} \\
+ \midrule
+ \textbf{Proposed methods} \\
+ \bottomrule
+\end{tabular}
+
+\vspace{\interclassSpace}
+
+\begin{tabular}{p{\linewidth}}
+ \toprule
+ \textbf{DecisionAlgorithm} \\
+ \midrule
+ \textbf{Description} \\
+ Interface for the decision algorithms to be used by the engine. \\
+ \midrule
+ \textbf{Responsibilities} \\
+ \tabitem{Analyzing game states and generating moves.} \\
+ \midrule
+ \textbf{Proposed attributes} \\
+ \textit{Depends on the algorithm.} \\
+ \midrule
+ \textbf{Proposed methods} \\
+ \tabitem{\textbf{genmove()}: Gives the coordinates of a move to play.} \\
+ \bottomrule
+\end{tabular}
+
+\vspace{\interclassSpace}
+
+\begin{tabular}{p{\linewidth}}
+ \toprule
+ \textbf{GameIO} \\
+ \midrule
+ \textbf{Description} \\
+ Offers the interface with the game. \\
+ \midrule
+ \textbf{Responsibilities} \\
+ \tabitem{Read input.} \\
+ \tabitem{Do some preprocessing.} \\
+ \tabitem{Forward commands to the game state component.} \\
+ \midrule
+ \textbf{Proposed attributes} \\
+ \midrule
+ \textbf{Proposed methods} \\
+ \tabitem{\textbf{start()}: Starts reading standard input in a loop.} \\
+ \bottomrule
+\end{tabular}
+
+\vspace{\interclassSpace}
+
+\begin{tabular}{p{\linewidth}}
+ \toprule
+ \textbf{GameState} \\
+ \midrule
+ \textbf{Description} \\
+ Stores the state of a match. \\
+ \midrule
+ \textbf{Responsibilities} \\
+ \tabitem{Store state information.} \\
+ \tabitem{Offer methods to manipulate the game state.} \\
+ \midrule
+ \textbf{Proposed attributes} \\
+ \midrule
+ \textbf{Proposed methods} \\
+ \tabitem{\textbf{getCurrentPlayer()}: Returns the player who should play
+ next.} \\
+ \tabitem{\textbf{playMove()}: Play a move in the specified coordinates
+ for the specified player.} \\
+ \tabitem{\textbf{playMoveForPlayer()}: Play a move in the specified coordinates
+ for the player who should play next.} \\
+ \tabitem{\textbf{undo()}: Reset the state to how it was just before the
+ last move was played.} \\
+ \bottomrule
+\end{tabular}
+
+\vspace{\interclassSpace}
+
+\begin{tabular}{p{\linewidth}}
+ \toprule
+ \textbf{GameTree} \\
+ \midrule
+ \textbf{Description} \\
+ Stores the moves and variations in a match. \\
+ \midrule
+ \textbf{Responsibilities} \\
+ \tabitem{Store the base node of the tree of moves of a match.} \\
+ \midrule
+ \textbf{Proposed attributes} \\
+ \tabitem{\textbf{GameMove root}: First move of the match (normally a
+ symbolic move representing the empty board before the actual first move of a
+ player).} \\
+ \midrule
+ \textbf{Proposed methods} \\
+ \bottomrule
+\end{tabular}
+
+\vspace{\interclassSpace}
+
+\begin{tabular}{p{\linewidth}}
+ \toprule
+ \textbf{GameMove} \\
+ \midrule
+ \textbf{Description} \\
+ Stores information about a specific move and its relationships to the
+ previous and next moves. \\
+ \midrule
+ \textbf{Responsibilities} \\
+ \tabitem{Store information about a move (board, player, coordinates\ldots).} \\
+ \midrule
+ \textbf{Proposed attributes} \\
+ \tabitem{\textbf{GameBoard board}: The board as of this move.} \\
+ \tabitem{\textbf{GameMove[] nextMoves}: The list of moves played after this
+ one. Different moves represent different game variations.} \\
+ \tabitem{\textbf{GameMove previousMove}: The move before this one.} \\
+ \tabitem{\textbf{boolean isPass}: True if the move is a pass and not a stone
+ placement.} \\
+ \tabitem{\textbf{int[] coords}: The coordinates of the board the move was
+ played at. Have no meaning if \textbf{isPass} is true.} \\
+ \midrule
+ \textbf{Proposed methods} \\
+ \tabitem{\textbf{getRow()}: Returns the row the move was played at.} \\
+ \tabitem{\textbf{getCol()}: Returns the col the move was played at.} \\
+ \tabitem{\textbf{getPlayer()}: Returns the player who played the move.} \\
+ \tabitem{\textbf{getNextPlayer()}: Returns the player who should play after
+ this move.} \\
+ \tabitem{\textbf{getGameLength()}: Returns the number of moves the game has
+ had.} \\
+ \tabitem{\textbf{getPlayableVertices()}: Returns the legal vertices for the
+ next move.} \\
+ \tabitem{\textbf{addMove()}: Inserts a new children move for the given
+ coordinates and for the player who should make the next move.} \\
+ \tabitem{\textbf{addMoveForPlayer()}: Inserts a new children move for the given
+ coordinates and player.} \\
+ \bottomrule
+\end{tabular}
+
+\vspace{\interclassSpace}