Skip to content

Commit 239bf66

Browse files
committed
update exercise classes, add sbt lib explanation
1 parent 1bc7635 commit 239bf66

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

compendium/modules/w05-classes-exercise.tex

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,22 @@
414414

415415

416416

417-
\Subtask Gör klart klassen \code{BlockWindow} enligt nedan. Metoden \code{setBlock} ska med hjälp av metoden \code{pixelWindow.fill} fylla ett kvadratiskt område med sidan \code{blockSize} pixlar på en viss position \code{pos} i block-koordinater och med en viss färg \code{color}. Metoden \code{getBlock} ska med hjälp av metoden \code{pixelWindow.getPixel} ge färgen för övre vänstra hörnet i blocket på position \code{pos} i block-koordinater.
417+
\Subtask Under laborationen behöver du en klass \code{blockbattle.BlockWindow} som med hjälp av \code{introprog.PixelWindow} erbjuder blockgrafik. Varje instans av \code{BlockWindow} ska ha ett attribut som refererar till en \code{PixelWindow}-instans. Detta kallas \textbf{aggregering} \Eng{aggregation}.\footnote{\url{https://en.wikipedia.org/wiki/Object\_composition\#Aggregation}}
418+
419+
För att det ska gå att kompilera och testa din \code{BlockWindow}-klass behöver du ha \code{introprog}-paketet på classpath. Med byggverktyget \code{sbt} hamnar alla jar-filer som ligger i biblioteket \texttt{lib} automatiskt på classpath när du gör \code{compile}, \code{run}, etc.
420+
421+
\begin{REPLnonum}
422+
> mkdir lib
423+
> wget -O lib/introprog.jar http://cs.lth.se/pgk/lib
424+
> sbt
425+
sbt> ~compile
426+
\end{REPLnonum}
427+
Du kan köra ditt program med \code{sbt}-kommatod \code{run} och då hamnar \code{lib/introprog.jar} automatiskt på classpath. Du kan också köra igång ditt program ''manuellt'' med detta kommando (semikolon i Windows):
428+
\begin{REPLnonum}
429+
> scala -cp "lib/introprog.jar:target/scala-2.12/classes" blockbattle.Main
430+
\end{REPLnonum}
431+
432+
Gör klart klassen \code{BlockWindow} enligt nedan. Metoden \code{setBlock} ska med hjälp av metoden \code{pixelWindow.fill} fylla ett kvadratiskt område med sidan \code{blockSize} pixlar på en viss position \code{pos} i block-koordinater och med en viss färg \code{color}. Metoden \code{getBlock} ska med hjälp av metoden \code{pixelWindow.getPixel} ge färgen för övre vänstra hörnet i blocket på position \code{pos} i block-koordinater.
418433

419434
\begin{CodeSmall}
420435
class BlockWindow(
@@ -460,8 +475,8 @@
460475
case object Undefined extends EventType
461476
}
462477
}
463-
464478
\end{CodeSmall}
479+
I instruktionerna till laborationen \texttt{\LabWeekFIVE} finns tips om hur du kan hantera händelser i ett \code{BlockWindow} med hjälp av metoden \code{nextEvent} ovan.
465480

466481
\Subtask Gör så att huvudprogramet i \code{Main.scala} ritar några valfria block i ett \code{BlockWindow}. Skapa även en \code{while(!quit)}-loop som med hjälp av \code{nextEvent()} skriver ut händelser i terminalen som inte är av typen \code{Undefined}. Varje looprunda ska även innehålla en \code{200} millisekunders fördröjning genom anrop av \code{delay}-metoden i kompanjonsobjektet ovan. Om händelsen \code{WindowClosed} inträffar ska loopen avslutas. Kör huvudprogrammet och kontrollera så att resultatet blir som förväntat.
467482

0 commit comments

Comments
 (0)