\chapter{Kravspecifikation}
\label{sec:gamekravspecifikation}

\section{Kravspecifikation}
I kravspecifikationen vil de krav, der stilles til henholdvis klient og server blive remsset op. De vil i et senere kapitel blive gennemgået i større detaljer.
\subsection{Overordnede krav til programmet}
Der er nogle få overordnede krav programmet skal opfylde. Disse krav skal være gældende for både serveren og klienten.

\begin{itemize}
\item Spillet skal kunne spilles på flere forskellige operativ systemer. 
\item Spillet skal være uafhængig af processer arkitektur. 
\item spillet skal kunne spille over netværk, hvor kommunikationen skal foregår via en klient-server model.
\end{itemize}


\subsection{Krav til serveren}

\begin{itemize}
    \item Serveren skal sende data til og modtage data via UDP fra klienter.
    \item Serveren skal oprette TCP forbindelser mellem klient og server.
    \item Alt UDP kommunikation skal foregå på port 1337.
    \item Indkommende TCP trafik skal accepteres på port 1337.
    \item Når en spiller forlader spillet skal server lukke TCP forbindelsen, og fjerne spilleren fra spillet.
    \item Serveren skal indeholde information om alle spillere.
    \item Serveren skal overvåge og opdatere samtlige spilleres tilstande.
    \item Serveren skal fungere som den autoritære i klient-server forholdet, serveren træffer alle beslutninger vedrørende spillet.
    \item Serveren skal være i stand til at indlæse en brugerdefineret bane.
    \item Server skal står for udregning af kollision..
    \item Serveren skal afgøre hvornår en spiller er død og i så fald fjerne spillerens skib.
    \item Serveren skal være i stand til at genoplive en spiller.
    \item Serveren skal implementere de i gameplay afsnitte nævnte spilelementer.<
\end{itemize}


\subsection{Krav til klienten}
\begin{itemize}
    \item Klienten skal modtage data fra serveren og sende data til serveren via UDP på port 1337
    \item Klienten skal operette en tcp forbindelse på port 1337.
    \item Klienten skal have indeholde information om alle andre spillere.
    \item Klienten skal med jævne mellemrum opdatere serveren med information om spillerens position, orientering, hastighed og desuden mængden af brændstof og skud.
    \item Klienten skal visualisere alle dele af spillet, såsom skibe, skud, bane og status elementer
    \item Klienten skal være i stand til at indlæse en brugerdefineret bane.
    \item Klienten skal kunne tegne polygoner på skærmen.
    \item Klienten skal være i stand til at håndtere input fra brugeren.
    \item Klienten skal være i stand til at manipulere spillerens skib ud fra inputtet.
    \item Klienten skal kunne tegne de definerede views på skærmen.
    \item Klienten skal implementere de i gameplay afsnitte nævnte spilelementer.
\end{itemize}

