\chapter{Afprøvning af spillet}
\begin{intro}
I det følgende vil afprøvning af spillet blive gennemgået. Først vil den valgte test-strategi blive beskrevet, herefter følger en række eksempler på de udførte tests. Samtlige tests kan findes i bilag \ref{gametest} og \ref{sec:unittestcode}.
\end{intro}

\section{Afprøvnings strategi}
Når spillet skal testes tages der udgangspunkt i kravspecifikationen, gennemgået i afsnit \label{sec:gamekravspecifikation}. Der foretages eksterne, og visuelle tests.
De eksterne tests udføres v.ha. en række test-klasser. Disse klasser opstiller et senario, og bruger C++' \texttt{assert}-funktion til at undersøge om testen fejler. Kildekoden til de implementerede test-klasser kan findes i bilag \ref{sec:unittestcode}.

De visuelle tests er udført som en række trin. For hvert trin opstilles handling, det forventede resultat, samt det egentlige resultat.

Ud fra kravspecifikationen skal følgende overordnede ting afprøves:
\begin{itemize}
    \item Kommunikation imellem fra/til server/klient via UDP og TCP
    \item Fjernelse og tilføjelse af klienter fra/til spil på server såvel som klient
    \item Serverens autoritære rolle
    \item Indlæsning af baner på server og klient
    \item Kollisioner på serveren
    \item Vedligeholdelse af information om spillere på server såvel som klient
    \item Visualisering af spillet på klienten
    \item Brugerinteraktion på klienten
\end{itemize}

Spillet var ikke fuldt implementeret da de nedenstående tests blev udført. Det betød at visse tests har måtte udelades. Det drejede sig om afprøvning af serverens autoritære rolle, da netværks-beskeder ikke fungerede, og server/klient derfor ikke kunne kommunikere.



\subsection{Visuel afprøvning af spillet}
\begin{itemize}
    \item Start af spillet
    \item Bevægelse af skibet
    \item Rotation af skibet
    \item Kollision imellem skib og bane
    \item Affyring af skud
    \item Udtømning af brændstof
\end{itemize}

De 2 første scenarier, ``start af spillet''\ og ``rotation af skibet''\ er vist her. Samtlige scenarier kan findes i bilag \ref{gametestvisual}.

\begin{figure}[h] 
\begin{center} 
    \begin{minipage}[t]{0.8\textwidth} 
        \begin{center} 
            \includegraphics[width=0.9\textwidth]{gfx/tests/gamestart.png} 
            \caption{Spil ved start} 
            \label{fig:rapgamestart} 
        \end{center} 
    \end{minipage} 
\end{center} 
\end{figure}

\subsubsection{Start af spilet}
\begin{tabular}{| p{0.3\textwidth} | p{0.3\textwidth} | p{0.3\textwidth} |}
\hline
\textbf{Nr.} & \multicolumn{2}{| p{0.6\textwidth} |}{\textbf{Navn}} \\
\hline
1 & \multicolumn{2}{| p{0.6\textwidth} |}{Start af spilet} \\
\hline
\multicolumn{3}{| p{0.9\textwidth} |}{\textbf{Beskrivelse}} \\
\hline
\multicolumn{3}{| p{0.9\textwidth} |}{Spillet skal kunne starte} \\
\hline
\hline
\textbf{Trin beskrivelse} & \textbf{Forventet resultat} & \textbf{Resultat} \\
\hline
Start spillet & Spillet starter og viser en bane, et skib, samt en række status-bjælker i bunden af skærmen. & Spillet starter og der ses en bane med et trekantet skib i midten. I bunden findes 3 status-bjælker, og en point-angivning. \\
\hline 
\hline 
\multicolumn{2}{| l |}{\textbf{Afprøvning bestået}} & Ja, se figur \ref{fig:rapgamestart}\\
\hline
\end{tabular}

\subsubsection{Bevæg skibet frem}
\begin{figure}[h] 
\begin{center} 
    \begin{minipage}[t]{0.4\textwidth} 
        \begin{center} 
            \includegraphics[width=0.7\textwidth]{gfx/tests/shipmove1.png} 
            \caption{Lige før bevægelse} 
            \label{fig:rapshipmove1} 
        \end{center} 
    \end{minipage} 
    \begin{minipage}[t]{0.4\textwidth} 
        \begin{center} 
            \includegraphics[width=0.7\textwidth]{gfx/tests/shipmove2.png} 
            \caption{Lige efter bevægelse} 
            \label{fig:rapshipmove2} 
        \end{center} 
    \end{minipage} 
\end{center} 
\end{figure}

\begin{tabular}{| p{0.3\textwidth} | p{0.3\textwidth} | p{0.3\textwidth} |}
\hline
\textbf{Nr.} & \multicolumn{2}{| p{0.6\textwidth} |}{\textbf{Navn}} \\
\hline
2 & \multicolumn{2}{| p{0.6\textwidth} |}{Bevæg skibet frem} \\
\hline
\multicolumn{3}{| p{0.9\textwidth} |}{\textbf{Beskrivelse}} \\
\hline
\multicolumn{3}{| p{0.9\textwidth} |}{Når der trykkes på fremdrifts-knappen (pil op), skal skibet flyve fremad, såfremt der er mere brændstof} \\
\hline
\hline
\textbf{Trin beskrivelse} & \textbf{Forventet resultat} & \textbf{Resultat} \\
\hline
Se test 1& - & - \\
\hline
Tryk på fremdrifts-knappen & Skibet accelereres&  Skibet accelererer, brændstofmåleren i bunden af skærmen falder.\\
\hline 
\multicolumn{2}{| l |}{\textbf{Afprøvning bestået}} & Ja, se figur \ref{fig:rapshipmove1} og \ref{fig:rapshipmove1}\\
\hline
\end{tabular}
