From 2cef938937c2e18dcc6fbfbf5e187ce6e0889295 Mon Sep 17 00:00:00 2001 From: Andreas Jakobsson Date: Tue, 13 Jan 2009 03:33:19 +0100 Subject: [PATCH] Algoritmbeskrivning AnimationThread och CreditThread --- report/report.tex | 95 +++++++++++++++++++++++++++---------------------------- 1 file changed, 47 insertions(+), 48 deletions(-) diff --git a/report/report.tex b/report/report.tex index 04baa96..7b6d4ea 100644 --- a/report/report.tex +++ b/report/report.tex @@ -185,10 +185,13 @@ Ett spel startas automatiskt vid start men när som helst kan ett helt nytt spel % Beskriv översiktligt hur programmet är uppbyggt och hur det löser % problemet. -Följande avsnitt beskriver de olika delarna av programmet uppdelat -paketvis med beskrivningar över vad de olika klasserna har för -funktion. Även en kort beskrivning över resurserna programmet använder -när det gäller filer som inte är Java-kod. +\begin{figure}[H] + \begin{center} + \includegraphics[width=110mm]{images/Paintables.pdf} + \caption{UML klassdiagram} + \label{fig:image/Paintable} + \end{center} +\end{figure} \subsection{Resurser} Resurser som används av programmet men som inte är Java-filer ligger i @@ -244,23 +247,12 @@ Katalogen \textit{tower-images} innehåller bilder som används av klasser av typen \textit{Tower} (se avsnitt \ref{sec:Tower}). \subsubsection{Katalogen unit-images}\label{sec:unit-images} -Katalogen \textit{unit-images} innehåller bilder som används av -klasser av typen \textit{Unit} (se avsnitt \ref{sec:Unit}). +Katalogen \textit{unit-images} innehåller bilder som används av klasser av typen \textit{Unit} (se avsnitt \ref{sec:Unit}). \subsection{Paketet se.umu.cs.dit06ajnajs} Paketet \textit{se.umu.cs.dit06ajnajs} är huvudpaket som används i programmet. I detta paket ligger de klasser som startar och -kontrollerar körningen av hela programmet. Se diagram i figur -\ref{fig:dit06ajnajs-uml} för en översiktlig beskrivning över hur -klasserna använder varandra. - -\begin{figure}[H] - \begin{center} - \includegraphics[width=110mm]{images/mvc.pdf} - \caption{} - \label{fig:dit06ajnajs-uml} - \end{center} -\end{figure} +kontrollerar körningen av hela programmet. \subsubsection{AntiTD}\label{sec:AntiTD} Klassen \textit{AntiTD} används för att en användare ska kunna starta @@ -279,8 +271,8 @@ programmets exekvering. Från denna klass konstruktor skapas motsvarande \textit{Model} och \textit{View}. Det startas två viktiga trådar när denna klass skapas, -\textit{AnimationThread} och \textit{CreditThread}, se -algoritmbeskrivning på sida \pageref{sec:Algoritmbeskrivning}. +\textit{AnimationThread} och \textit{CreditThread}. +% TODO alogbeskr \subsubsection{ATDModel}\label{sec:ATDModel} Klassen \textit{ATDModel} hanterar informationen som behövs för varje @@ -290,12 +282,6 @@ på den aktiva banan, och så vidare. Denna information använder och ändrar \textit{ATDController} och \textit{ATDView} läser informationen. -Denna klass agerar som ett mellansteg för informationen som finns -sparade i många av de klasser som finns i de paketen -\textit{se.umu.cs.dit06ajnajs.agent} och -\textit{se.umu.cs.dit06ajnajs.level}. Bland annat finns det metoder -för att lägga till torn och enheter i spelet. - \subsubsection{ATDView}\label{sec:ATDView} Klassen \textit{ATDView} är spelets grafiska gränssnitt. Här ritas en komponent ut som innehåller själva spelplanen och ett antal @@ -303,23 +289,9 @@ komponenter för att styra spelets flöde finns. Metoder för att fästa lyssnare på specifika komponenter finns för att \textit{ATDController} ska kunna fästa lyssnare på dem. -Metoder för att rita om spelplanen finns tillgängliga för att -\textit{ATDController} ska kunna uppdatera gränssnittet efter varje -uppdatering av speldatan. - +\subsubsection{NoActiveStartSquareException}\label{sec:NoActiveStartSquareException} \subsubsection{Paintable}\label{sec:Paintable} -Gränssnittet \textit{Paintable} ska implementeras av allt som ska -kunna ritas upp på spelplanen. Detta görs då med metoden -\textit{paint(Graphics g)}. - -\subsubsection{Clickable}\label{sec:Clickable} -Gränssnittet \textit{Clickable}, är ett gränssnitt med metod -\textit{click()}. Instanser av \textit{Clickable} reagerar på -metodanropet på olika sätt beroende på implementation. - \subsubsection{Player}\label{sec:Player} -Klassen \textit{Player} representerar en spelare av spelate. Här -sparas poäng, krediter och vilken nivån användaren spelar. \subsection{Paketet se.umu.cs.dit06ajnajs.agent} \subsubsection{Agent}\label{sec:Agent} @@ -411,6 +383,11 @@ olika karaktär. Se klassdiagram över de olika kartrutorna i figur \end{center} \end{figure} +\subsubsection{Clickable}\label{sec:Clickable} +Gränssnittet \textit{Clickable}, är ett gränssnitt med metod +\textit{click()}. Instanser av \textit{Clickable} reagerar på +metodanropet på olika sätt beroende på implementation. + \subsubsection{Traversable}\label{sec:Traversable} Gränssnittet \textit{Traversable}, är ett gränssnitt med metod \textit{landOn()} vilket tar emot en \textit{Unit} som parameter och @@ -488,11 +465,8 @@ läggs en grön ram till runt rutan. Klassen \textit{PathSquare}, representerar en målruta där enheter samlas in % TODO is something lost here? -\subsubsection{NoActiveStartSquareException}\label{sec:NoActiveStartSquareException} -Klassen \textit{NoActiveStartSquareException} är ett undantag som -utökar \textit{RuntimeException}. Detta undantag kan kastas om det -skulle vara så att ingen aktiv startruta är aktiv när en användare -försöker sätta ut en ny enhet. + + % \subsubsection{MapSquarePrototypeFactory}\label{sec:MapSquarePrototypeFactory} @@ -540,16 +514,41 @@ Klassen \textit{XMLUtil} har metoder för att ladda en fil, via \textit{java.net.URL} eller \textit{java.io.File}, och returnera ett validerat dokument, \textit{org.jdom.Document}. -\subsection{Algoritmbeskrivning}\label{sec:Algoritmbeskrivning} +\subsection{Algoritmbeskrivning} Följande avsnitt förklarar några av algoritmerna som finns implementerade i spelet i mer detalj. \subsubsection{Tråden AnimationThread} +Tråden \textit{AnimationThread} är aktiv under hela applikationens livstid. Följande steg genomförs för varje iteration. + +\begin{enumerate} + \item Starta tidtagning. + \item Är spelet pausat? + \begin{itemize} + \item Om ja, gå till en inre oändlig loop som fortsätter snurra tills dess att spelet går ur pausläget. + \item Om nej, gå till nästa steg. + \end{itemize} + \item För varje enhet på bana, kontrollera kollisioner och säg till enhet att agera (se algoritmbeskrivning \textit{Kollisionshantering} samt algoritmbeskrivning \textit{Enheternas act()}). + \item Samla upp döda enheter och meddela \textit{ATDController} att dessa ska tas bort från modellen. + \item För varje torn på banan, säg till torn att agera (se algoritmbeskrivning \textit{Tornens act()}). + \item För varje målruta, samla in enheter och räkna mängden tjänade krediter. + \item Är spelet redan vunnit? + \begin{itemize} + \item Om ja, gör inget av krediterna och gå vidare. + \item Om nej, tilldela spelaren (\textit{Player}) krediterna och gå vidare. + \end{itemize} + \item För varje startruta, släpp ut enheter från kö om utsläppet inte innebär en kollision + \item För varje \textit{Agent}, anropa dess metod \textit{Paint()}. + \item Uppdatera spelkomponenten i \textit{ATDView} (se algoritmbeskrivning \textit{Utritning av spelet}). + \item Stoppa tidtagning och sov tråden den kvarvarande tiden av det förinställda tidssteget för att sedan börja om från steg 1. +\end{enumerate} + + \subsubsection{Tråden CreditThread} Tråden \textit{CreditThread} är aktiv under hela applikationens livstid. Följande steg genomförs för varje iteration. -\begin{itemize} +\begin{enumerate} \item Är spelet pausat? \begin{itemize} \item Om ja, gå till en inre oändlig loop som fortsätter snurra tills dess att spelet går ur pausläget. @@ -567,7 +566,7 @@ Tråden \textit{CreditThread} är aktiv under hela applikationens livstid. Följ \item Om nej, gå till nästa steg. \end{itemize} \item Sov ett förinställt intervall och börja sedan om. -\end{itemize} +\end{enumerate} \subsubsection{Kollisionshantering} För att inte enheter ska gå över varandra är kollisionshantering -- 2.11.4.GIT