From 6f038a5772e23f6a2c41162ae2642f8dd77f983a Mon Sep 17 00:00:00 2001 From: Anton Johansson Date: Mon, 12 Jan 2009 22:52:23 +0100 Subject: [PATCH] Report, Tower clean --- report/report.tex | 78 ++++++++++++++++++++++++------ src/se/umu/cs/dit06ajnajs/agent/Tower.java | 3 +- 2 files changed, 64 insertions(+), 17 deletions(-) diff --git a/report/report.tex b/report/report.tex index 466d2a2..0e59e5d 100644 --- a/report/report.tex +++ b/report/report.tex @@ -308,18 +308,17 @@ av underklasser till de abstrakta klasserna \textit{Tower} och denna klass under programmets körning. För att få tag på denna instans används den statiska metoden \textit{getInstance()}. -I konstruktorn instansieras och sätts variabler som definierar de -olika enheterna, se beskrivning av \textit{Unit} sida -\pageref{sec:Unit} och \textit{Tower} sida \pageref{sec:Tower} för -vilka variabler som finns och vad de gör. Detta innebär att det inte -behöver skapas en ny klass för varje ny typ av enhet eller torn som -ska skapas, det går dock alltid att skapa unika beteenden genom att -göra en ny klass som utökar klassen \textit{Unit} och överlagrar någon -av dess metoder, till exempel \textit{act()}. +I konstruktorn instansieras och sätts variabler som definierar de olika enheterna, se beskrivning av \textit{Unit} sida \pageref{sec:Unit} och \textit{Tower} sida \pageref{sec:Tower} för vilka variabler som finns och vad de gör. Detta innebär att det inte behöver skapas en ny klass för varje ny typ av enhet eller torn som ska skapas, det går dock alltid att skapa unika beteenden genom att göra en ny klass som utökar klassen \textit{Unit} och överlagrar någon av dess metoder, till exempel \textit{act()}. + +En positiv effekt som fås genom kloning av enheter är att många av dess resurser delas för varje enhet. Varje enhet som finns i spelet har gemensamma referenser till bilder och ljud de ritar upp och spelar. \subsubsection{Tower}\label{sec:Tower} +Den abstrakta klassen \textit{Tower} ska utökas av underklasser för att skapa representationer av torn som ska kunna agera i ett spel. Ett torn består av ett flertal attribut som kommer att definiera stora delar av dess utseende och beteende. +Klassen implementerar gränssnitten \textit{Agent}, \textit{Observer}, \textit{Cloneable}. Torn observerar de rutor av typen \textit{PathSquare}, som är inom dess räckvid, för att få information om det kommer enheter (av typen \textit{Unit}) att möjligtvis skjuta på. % TODO: Algobeskr +Metoder med logik för att flytta enheten finns implementerade, bland +dessa är \textit{act()} och \textit{collision()} viktiga. \subsubsection{BasicTower}\label{sec:BasicTower} Klassen \textit{BasicTower} utökar den abstrakta klassen @@ -383,7 +382,7 @@ Klassen \textit{PathSquare}, representerar en blockerad ruta. I nuvarande versio Klassen \textit{PathSquare}, representerar en ruta där torn kan placeras ut. Rutan kan innehålla en referens till ett torn och markeras då som upptagen. \subsubsection{StartSquare}\label{sec:StartSquare} -Klassen \textit{PathSquare}, representerar en startruta som enheter kan släppas ut på. Den innehåller en kö där enheter lagras och släpper ut en efter en då detta inte skapar kollisioner mellan enheter. En startruta kan markeras med metoden \textit{click()} och detta sätter boolean \textit{active} till sann och i den grafiska representationen läggs en grön ram till runt rutan. +Klassen \textit{PathSquare}, representerar en startruta som enheter kan släppas ut på. Den innehåller en kö där enheter lagras och släpper ut en efter en då detta inte skapar kollisioner mellan enheter. En startruta kan markeras med metoden \textit{click()} och detta sätter boolean \textit{active} till sann och i den grafiska representationen läggs en grön ram till runt rutan. Varje startruta är registrerad som observant till alla andra startrutor vilket gör att när en startruta sätts som aktiv så meddelar den alla andra startrutor på spelplanen att de ska ändra status till att vara inaktiva. \subsubsection{GoalSquare}\label{sec:GoalSquare} Klassen \textit{PathSquare}, representerar en målruta där enheter samlas in @@ -391,7 +390,7 @@ Klassen \textit{PathSquare}, representerar en målruta där enheter samlas in -% \subsubsection{MapSquarePrototypeFactory}\label{sec:MapSquarePrototypeFactory} +%\subsubsection{MapSquarePrototypeFactory}\label{sec:MapSquarePrototypeFactory} \subsection{Paketet se.umu.cs.dit06ajnajs.util} Paketet \textit{se.umu.cs.dit06ajnajs.util} innerhåller främst klasser @@ -428,10 +427,47 @@ undan, enbart informationen som \textit{LevelEditorn} kan skapa sparas. \subsubsection{LevelsXMLParser}\label{sec:LevelsXMLParser} -Klassen \textit{LevelsXMLParser} har två metoder för att tolka XML-dokument som följer XML-schemat i avsnitt \ref{sec:levels.xsd} och bygga upp kompletta ban-instanser \textit{Level} (\ref{sec:Level}). +Klassen \textit{LevelsXMLParser} har två metoder för att tolka +XML-dokument som följer XML-schemat i avsnitt \ref{sec:levels.xsd} och +bygga upp kompletta ban-instanser \textit{Level} (\ref{sec:Level}). \subsubsection{XMLUtil}\label{sec:XMLUtil} -Klassen \textit{XMLUtil} har metoder för att ladda en fil, via \textit{java.net.URL} eller \textit{java.io.File}, och returnera ett dokument, \textit{org.jdom.Document}. +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} +Följande avsnitt förklarar några av algoritmerna som finns +implementerade i spelet i mer detalj. + +\subsubsection{Tråden AnimationThread} + +\subsubsection{Tråden CreditThread} + +\subsubsection{Kollisionshantering} +För att inte enheter ska gå över varandra är kollisionshantering +implementerat. Innan varje enhet rör sig kollas enhetens framtida +position med alla andra enheters nuvarande position för att se om det +kommer att bli någon kollision. + +Om det inträffar en kollision och enheterna har motsatt riktning, det +vill säga ena enheten rör sig med riktning \textit{UP} och andra +\textit{DOWN} eller \textit{LEFT} mot \textit{RIGHT}, sätts båda +enheternas riktning till den motsatta de för närvarande färdas i och +första enheten flyttar sig. Om det inträffa kollision där enheterna +inte har motsatt riktning får enheten som kollen gjordes för inte +förflytta sig denna omgång. + +% TODO ALgoritm besk vis +\subsubsection{Krediträkning} + +\subsubsection{Tornens act()} + +\subsubsection{Enheternas act()} + +\subsubsection{Svängar} + +\subsubsection{Utritning av spelet} \section{Begränsningar}\label{Begransningar} % Vilka problem och begränsningar har din lösning av uppgiften? Hur @@ -451,6 +487,7 @@ Klassen \textit{XMLUtil} har metoder för att ladda en fil, via \textit{java.net % Noggranna testkörningar där man ser att programmet fungerar som det % ska. + \section{Diskussion}\label{Diskussion} % Diskutera om laborationen samt allmänt kring Web services och om hur % och när det är användbart (och inte användbart). Saker som kan vara @@ -479,6 +516,18 @@ I nuläget startas första banan direkt när applikationen startar. Att få se e I kontrollpanelen finns stora möjligheter till vidareutveckling då den nuvarande just täcker den funktionalitet som behövs för att köra spelet. Till en början skulle listan med tillgängliga units kunna bytas ut mot ikoner som visar enhetens grafiska representation. För att lättare kunna få en översikt över en enhets egenskaper skulle hälsa och hastighet kunna förmedlas med staplar istället för med text. Om listan byts mot ikoner finns även möjligheten att ta bort knappen \textit{Release Units} och låta användaren skicka ut önskad enhet genom att direkt klicka på enhetens ikon. +\subsubsection{Observer–Obervable} +Eftersom Javas \textit{Observalbe} är en klass som måste utökas för att användas kan inte \textit{MapSquares} klonas utan att alla får en gemensam lista med \textit{Observers}. En egen implementation av \textit{Observer–Observalbe} skulle behövas för att kunna klona kartrutor på ett användbart sätt. Med en sådan implementation hade det varit lättare i ett senare skede läsa in alla konfigurationsdetaljer för att skapa både kartrutor och enheter utifrån XML-dokument. + +\subsubsection{LevelEditor} +Klassen \textit{LevelEditor} hade behövt vidareutvecklas för att kunna användas för att skapa kompletta banor och redigera tillgängliga banor. Några punkter som hade behövts: +\begin{itemize} +\item Möjlighet att sätta riktning på en \textit{StartSquare} +\item Möjlighet att skapa flera banor och spara dem i en gemensam XML-fil. +\item Möjlighet att välja bilder som ska användas för rutorna. +\item Möjlighet att sätta antal enheter som krävs i mål för att vinna en bana. +\item Möjlighet att sätta ut torn. +\end{itemize} \bibliographystyle{alpha} \bibliography{books.bib} @@ -493,7 +542,6 @@ Härefter följer utskrifter från källkoden och andra filer som hör till denna laboration. \newpage -\subsection{AntiTD.java}\label{AntiTD.java} -\lstinputlisting{../src/se/umu/cs/dit06ajnajs/AntiTD.java} - +% \subsection{AntiTD.java}\label{AntiTD.java} +% \lstinputlisting{../src/se/umu/cs/dit06ajnajs/AntiTD.java} \end{document} diff --git a/src/se/umu/cs/dit06ajnajs/agent/Tower.java b/src/se/umu/cs/dit06ajnajs/agent/Tower.java index 343d751..adc4cf3 100644 --- a/src/se/umu/cs/dit06ajnajs/agent/Tower.java +++ b/src/se/umu/cs/dit06ajnajs/agent/Tower.java @@ -9,7 +9,6 @@ import java.util.List; import java.util.Observable; import java.util.Observer; import java.util.logging.Logger; -import se.umu.cs.dit06ajnajs.Paintable; /** * Abstract class used as superclass to all Towers in a game. All methods are @@ -19,7 +18,7 @@ import se.umu.cs.dit06ajnajs.Paintable; * @author Andreas Jakobsson (dit06ajs@cs.umu.se) * @version 1.0 */ -public abstract class Tower implements Paintable, Agent, Observer, Cloneable { +public abstract class Tower implements Agent, Observer, Cloneable { private static Logger logger = Logger.getLogger("AntiTD"); -- 2.11.4.GIT