1 \documentclass[titlepage, twoside,
a4paper,
12pt
]{article
}
2 \usepackage[swedish
]{babel
}
3 \usepackage[utf8
]{inputenc}
14 % Include pdf with multiple pages ex \includepdf[pages=-, nup=2x2]{filename.pdf}
15 \usepackage[final
]{pdfpages
}
16 % Place figures where they should be
20 \definecolor{keywordcolor
}{rgb
}{0.5,
0,
0.75}
25 basicstyle=
\scriptsize\ttfamily,
26 stringstyle=
\color{blue
},
27 commentstyle=
\color{red
},
30 numberblanklines=true,
32 showstringspaces=false,
33 keywordstyle=
\color{keywordcolor
}
34 % identifierstyle=\color{identifiercolor}
39 \newfloat{xml
}{H
}{lop
}
44 \def\preTitle{Laboration
4}
45 \def\kurs{Applikationsprogrammering i Java, HT-
08}
47 \def\namn{Andreas Jacobsson
}
48 \def\mail{dit06ajs@cs.umu.se
}
49 \def\namnTva{Anton Johansson
}
50 \def\mailTva{dit06ajn@cs.umu.se
}
52 \def\pathtocode{$
\sim$dit06ajn/edu/apjava/lab4
}
54 \def\handledareEtt{Johan Eliasson, johane@cs.umu.se
}
55 \def\handledareTva{Tor Sterner-Johansson, tors@cs.umu.se
}
56 \def\handledareTre{Daniel Henriksson, danielh@cs.umu.se
}
57 \def\handledareFyra{Johan Granberg, johang@cs.umu.se
}
59 \def\inst{datavetenskap
}
60 \def\dokumentTyp{Laborationsrapport
}
66 \begin{tabular
}{@
{}p
{\textwidth}@
{}}
67 UMEÅ UNIVERSITET
\hfill \today \\
68 Institutionen för
\inst \\
75 \huge{\textbf{\kurs}} \\
85 \large{\textbf{Handledare
}}\\
86 \mbox{\large{\handledareTre}}
87 \mbox{\large{\handledareTva}}
88 \mbox{\large{\handledareEtt}}
89 \mbox{\large{\handledareFyra}}
97 % Dedication goes here
104 \lhead{\footnotesize{\namn,
\mail\\
\namnTva,
\mailTva}}
115 \fancyfoot[LE,RO
]{\thepage}
116 \pagenumbering{arabic
}
118 \section{Problemspecifikation
}\label{Problemspecifikation
}
119 % Beskriv med egna ord vad uppgiften gick ut på. Är det någonting som
120 % varit oklart och ni gjort egna tolkningar så beskriv dessa.
122 Problemspecifikation finns i original på sidan:\\
124 \verb!http://www.cs.umu.se/kurser/
5DV085/HT08/labbar/lab4.html/!
% DONE check
127 \section{Användarhandledning
}\label{Anvandarhandledning
}
128 % Förklara var programmet och källkoden ligger samt hur man kompilerar,
129 % startar och använder det. Förklara även översiktligt vad som händer
130 % när man använder de olika kommandona. Det räcker alltså inte att
131 % skriva "man skriver 'ant' för att kompilera", utan det måste även ingå
132 % en liten förklaring om vad som egentligen händer när man kör ant och
133 % varför det fungerar. Använd Internet eller litteratur för att själva
134 % ta reda på den information ni tycker känns relevant, dels för
135 % rapportens skull och dels för er egen. Kom ihåg att skriva tydliga
136 % (vetenskapliga) referenser!
138 Programmet ligger i katalogen:\\
141 Källkoden ligger i underkatalogen
\verb!src!.
143 Följande kommandon förutsätter att programmet
\textit{Apache
144 Ant
}\footnote{http://ant.apache.org/
} är installerat. Verktyget
145 \textit{Ant
} är ett byggverktyg som använder sig av specifikationen
146 lagrad i en XML-fil, oftast
\textit{build.xml
}, för automatisera alla
147 nödvändiga operationen vid kompilering av ett projekt. Detta kan
148 innefatta all typ av filhantering, det vill säga kopiering,
149 borttagning och flyttning, men även själva kompileringen av
150 projektet. Verktyget kan ses som ett specialanpassat skript för att
151 kompilera hela projekt.
153 Programmet kompileras med kommandot:\\
155 \verb!salt:~/edu/apjava/lab3> ant!
159 Det som händer vid anrop av kommandot ovan är att
\textit{Ant
} läser
160 av filen
\textit{build.xml
} och letar efter standardkommandona att
161 köra. I det här fallet är det operationerna som är definierade i
162 XML-elementet
\verb!<target />! med attributet
\verb!name="dist"!. Se
163 bildaga~
\ref{app:build.xml
} för mer information om vad som händer. Oftast
164 har taggarna i
\textit{build.xml
} relativt självförklarande namn, de
165 motsvarar i många fall direkta kommandon som går att köra i en
168 \section{Systembeskrivning
}\label{Systembeskrivning
}
169 % Beskriv översiktligt hur programmet är uppbyggt och hur det löser
174 \includegraphics[width=
110mm
]{images/Paintables.pdf
}
175 \caption{UML klassdiagram
}
176 \label{fig:image/Paintable
}
180 \subsection{se.umu.cs.dit06ajnajs package
}
181 \subsubsection{ATDController
}\label{sec:ATDController
}
182 \subsubsection{ATDModel
}\label{sec:ATDModel
}
183 \subsubsection{ATDSoundPlayer
}\label{sec:ATDSoundPlayer
}
184 \subsubsection{ATDView
}\label{sec:ATDView
}
185 \subsubsection{AntiTD
}\label{sec:AntiTD
}
186 \subsubsection{NoActiveStartSquareException
}\label{sec:NoActiveStartSquareException
}
187 \subsubsection{Paintable
}\label{sec:Paintable
}
188 \subsubsection{Player
}\label{sec:Player
}
190 \subsection{se.umu.cs.dit06ajnajs.agent package
}
191 \subsubsection{Agent
}\label{sec:Agent
}
192 \subsubsection{AgentPrototypeFactory
}\label{sec:AgentPrototypeFactory
}
193 \subsubsection{BasicTower
}\label{sec:BasicTower
}
194 \subsubsection{Direction
}\label{sec:Direction
}
195 \subsubsection{FootmanUnit
}\label{sec:FootmanUnit
}
196 \subsubsection{FootmanUnit.java
}\label{sec:FootmanUnit.java
}
197 \subsubsection{TeleportUnit
}\label{sec:TeleportUnit
}
198 \subsubsection{Tower
}\label{sec:Tower
}
199 \subsubsection{Unit
}\label{sec:Unit
}
201 \subsection{se.umu.cs.dit06ajnajs.map package
}
202 Paketet
\textit{level
} innehåller en samling klasser som har en koppling till en bana i spelet. En bana är uppbyggd utav rutor av olika karaktär.
204 \subsubsection{Clickable
}\label{sec:Clickable
}
205 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.
207 \subsubsection{Traversable
}\label{sec:Traversable
}
208 Gränssnittet
\textit{Traversable
}, är ett gränssnitt med metod
\textit{landOn()
} vilket tar emot en
\textit{Unit
} som parameter och manipulerar denna beroende tillståndet av instansen av
\textit{Traversible
}.
210 \subsubsection{Level
}\label{sec:Level
}
211 Klassen
\textit{Level
}, motsvarar en bana tänkt att användas i ett rutbaserat spel. Klassen implementerar gränsnitten
\textit{Paintable, Cloneable, Clickable
}. Banan kan alltså bland annat representeras grafiskt genom
\textit{Paintable
} och kan reagera på musklick genom
\textit{Clickable
}. Klassen innehåller en två-dimensionell lista vilket innehåller instanser av typen
\textit{MapSquare
} (se
\pageref{MapSquare
}). Listor finns även med pekare till de rutor som representerar start- och målrutor.
213 \subsubsection{MapSquare
}\label{sec:MapSquare
}
214 Klassen
\textit{Level
}, är en abstrakt klass som motsvarar en ruta tänkt att användas för att kombineras till en bana i ett rutbaserat spel. Gränsnitten
\textit{Paintable, Cloneable, Clickable
} implementeras. Rutan kan alltså bland annat representeras grafiskt genom
\textit{Paintable
} och kan reagera på musklick genom
\textit{Clickable
}. Dessutom ärver klassen från
\textit{Observable
} för att kunna registrera lyssnare som sedan notifieras när en enhet går på rutan. Ett objekt av typen
\textit{MapSquare
} kan vara av typen
\textit{PathSquare, TurnSquare, BlockedSquare, TowerSquare, BlockedSquare, StartSquare
} och
\texit{GoalSquare
}. Typernas egenskaper beskrivs nedan.
216 \subsubsection{MapSquareFactory
}\label{sec:MapSquareFactory
}
217 Klassen
\textit{MapSquareFactory
}, används för att skapa nya instanser av olika implementationer av
\textit{MapSquareFactory
} från en sträng. Detta för att underlätta skapandet av nya sorters rutor. Designmönstret
\textit{Singelton
} implementeras för att säkerställa att en och endast en instans finns tillgänglig.
219 \subsubsection{PathSquare
}\label{sec:PathSquare
}
220 Klassen
\textit{PathSquare
}, representerar en vägruta och implementerar därför gränssnittet
\textit{Traversible
}. Enheter kan alltså befinna sig och färdas framåt på en ruta av denna typ. Klassen implementerar designmönstret
\textit{Observer/Observable
} tillsammans med klassen
\textit{Tower
} ur paketet
\textit{agent
}. När en enhet anropar en rutas
\textit{landOn()
}-metod notifieras kringliggande torn och pekaren till den anropande enheten skickas vidare till tornen (se
\pageref{Tower
})
222 \subsubsection{TurnSquare
}\label{sec:TurnSquare
}
223 Klassen
\textit{PathSquare
}, representerar en sväng och ärver från
\textit{PathSquare
}. Klassen innehåller en lista med giltiga riktningar samt ett attribut för den nuvarande vald riktning. När en enhet anropar metoden
\textit{landOn()
} som kontrollerar om enheten har passerat mittlinjen av rutan relativt enhetens riktning. Om det är sant tilldelas enheten rutans nuvarande valda riktning. Metoden
\textit{click()
} byter den nuvarande valda riktningen till nästa giltiga riktning samt roterar bilden till den nya riktningen.
225 \subsubsection{BlockedSquare
}\label{sec:BlockedSquare
}
226 Klassen
\textit{PathSquare
}, representerar en blockerad ruta. I nuvarande version innehåller klassen inga implementationer och fungerar enbart som en utfyllnad.
228 \subsubsection{TowerSquare
}\label{sec:TowerSquare
}
229 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.
231 \subsubsection{StartSquare
}\label{sec:StartSquare
}
232 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.
234 \subsubsection{GoalSquare
}\label{sec:GoalSquare
}
235 Klassen
\textit{PathSquare
}, representerar en målruta där enheter samlas in
240 % \subsubsection{MapSquarePrototypeFactory}\label{sec:MapSquarePrototypeFactory}
247 \subsection{se.umu.cs.dit06ajnajs.util package
}
248 \subsubsection{LevelEditor
}\label{sec:LevelEditor
}
249 \subsubsection{LevelsXMLOutputter
}\label{sec:LevelsXMLOutputter
}
250 \subsubsection{LevelsXMLParser
}\label{sec:LevelsXMLParser
}
251 \subsubsection{LevelsXMLValidator
}\label{sec:LevelsXMLValidator
}
252 \subsubsection{XMLUtil
}\label{sec:XMLUtil
}
253 \subsubsection{XMLValidator
}\label{sec:XMLValidator
}
255 \section{Begränsningar
}\label{Begransningar
}
256 % Vilka problem och begränsningar har din lösning av uppgiften? Hur
257 % skulle de kunna rättas till?
259 \section{Reflektioner
}\label{Reflektioner
}
260 % Reflektioner - Var det något som var speciellt krångligt? Vilka
261 % problem uppstod och hur löste ni dem? Vilka verktyg använde ni? Hur
262 % upplevde ni de verktygen? + Allmänna synpunkter. Om ni har upplevt
263 % problem på grund av olika miljöer (i termer av operativsystem och
264 % liknande) så kan det även vara intressant att nämna det, samt motivera
267 \section{Testkörningar
}\label{Testkorningar
}
268 % Noggranna testkörningar där man ser att programmet fungerar som det
271 \section{Diskussion
}\label{Diskussion
}
272 % Diskutera om laborationen samt allmänt kring Web services och om hur
273 % och när det är användbart (och inte användbart). Saker som kan vara
274 % trevliga att ta upp är interoperabilitet, lite om prestanda, koncepten
275 % lös koppling och så vidare. Den här sektionen ska vara en betydande
276 % del av rapporten. Det är upp till er själva att ta reda på den
277 % information ni behöver, även om föreläsningsmaterialet kan vara
278 % väldigt användbart. Kom även här ihåg att referera till era källor
279 % (även om det är från föreläsningsmaterialet).
281 \bibliographystyle{alpha
}
282 \bibliography{books.bib
}
286 \pagenumbering{arabic
}
287 \section{Källkod
}\label{sec:kallkod
}
288 % Källkoden ska finnas tillgänglig i er hemkatalog
289 % ~/edu/apjava/lab1/. Bifoga även utskriven källkod.
290 Härefter följer utskrifter från källkoden och andra filer som hör till
294 \subsection{AntiTD.java
}\label{AntiTD.java
}
295 \lstinputlisting{../src/se/umu/cs/dit06ajnajs/AntiTD.java
}