Skip to content

Commit

Permalink
update lab blockmole and exercise objects
Browse files Browse the repository at this point in the history
  • Loading branch information
bjornregnell committed Aug 1, 2017
1 parent ebe1ea7 commit 14be988
Show file tree
Hide file tree
Showing 6 changed files with 247 additions and 201 deletions.
4 changes: 2 additions & 2 deletions compendium/compendium.cls
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@
\tikzstyle{umlarrow}=[->, >=open triangle 90, thick]

\newcommand{\TODO}{\colorbox{red!70}{TODO!!!}~}
\newcommand{\StudyTheory}[1]{Studera begreppen i kapitel \ref{chapter:W#1}.}
\newcommand{\DoExercise}[2]{Gör övning {\tt #1} i avsnitt \ref{exe:W#2}.}
\newcommand{\StudyTheory}[1]{Studera begreppen i kapitel \ref{chapter:W#1}}
\newcommand{\DoExercise}[2]{Gör övning {\tt #1} i avsnitt \ref{exe:W#2}}
\newcommand{\ReadTheLab}{Läs igenom och begrunda hela laborationsinstruktionen.}

\newcommand{\Emph}[1]{\textcolor{myemphcolor}{\textbf{#1}}}
Expand Down
7 changes: 4 additions & 3 deletions compendium/modules/w03-functions-lab.tex
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
\end{Goals}

\begin{Preparations}
\item \DoExercise{\ExeWeekTWO}{02}
\item \DoExercise{\ExeWeekTHREE}{03}
\item Gör övning övning \texttt{\ExeWeekTHREE} och repetera övning \texttt{\ExeWeekTWO}.
\item Läs appendix~\ref{appendix:terminal} och ~\ref{appendix:compile}.

\item Utveckla en första, spelbar version av ditt textspel, som du kan jobba vidare på under laborationen.
\item Hitta någon som spelar en tidig version av ditt spel och läser din kod och ger återkoppling på kodens läsbarhet. Skriv ner den återkoppling du får.
\item Spela någon annans textspel och ge återkoppling på kodens läsbarhet.
Expand All @@ -18,7 +19,7 @@
\subsection{Krav}

\begin{itemize}
\item Du ska skapa ett lagom irriterande textspel som kan köras i terminalen.
\item Du ska skapa ett lagom irriterande textspel med hjälp av en editor, till exempel \texttt{atom} (se appendix~\ref{appendix:compile:edit}). Spelet ska köras i terminalen.

\item Under redovisningen av laborationen ska du redogöra för vilka programmeringskoncept du tränat på under utvecklingen av ditt textspel. Du ska också för handledaren beskriva hur du har förbättrat din kod genom den återkoppling du fått från någon som spelat ditt spel och läst koden.

Expand Down
2 changes: 0 additions & 2 deletions compendium/modules/w04-objects-exercise-goals.tex
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,3 @@
\item Kunna skapa och använda tupler.
\item Kunna skapa funktioner som har multipla returvärden.
\item Känna till att parenteserna kan skippas runt tupel-argument.

\item \TODO FLER MÅL OM OBJEKT OCH MODULER HÄR
128 changes: 125 additions & 3 deletions compendium/modules/w04-objects-exercise.tex
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

\begin{Preparations}
\item \StudyTheory{04}
\item Läs om hur man fixar buggar i appendix \ref{appendix:debug}.
\end{Preparations}

\else
Expand All @@ -25,8 +26,12 @@
\BasicTasks %%%%%%%%%%%%%%%%




%%%% TODO
%%%% ta med tupler
%%%% ändra blockmole så att den använder pt som tuple2 istf x,y
%%%% flytta simplewindowundersökningar från blockmole till övningen
%%%% visa classpath och ladda ner cslib på övningen
%%%%

\WHAT{Para ihop begrepp med beskrivning.}

Expand All @@ -52,13 +57,130 @@



\WHAT{\TODO Fixa detta som är hitflyttat från labben}

\QUESTBEGIN

\Task \what~\TODO


\Subtask
Ladda ner \texttt{cslib.jar} via länken \url{http://cs.lth.se/pgk/cslib} och lägg jar-filen i samma katalog som ditt Scala-program. Detta kan du göra i Linux med \code{wget} så här:
\begin{REPLnonum}
> wget -O cslib.jar http://cs.lth.se/pgk/cslib
\end{REPLnonum}
En jar-fil används för att paketera färdigkompilerade program, kod, dokumentation, resursfiler, etc, och är komprimerad på samma sätt som en zip-fil.

\Subtask
Byt ut \code{main}-funktionens kropp mot följande block:
\begin{Code}
{
val w = new cslib.window.SimpleWindow(300, 500, "Digging")
w.moveTo(10, 10)
w.lineTo(10, 20)
w.lineTo(20, 20)
w.lineTo(20, 10)
w.lineTo(10, 10)
}
\end{Code}
Den första raden skapar ett nytt \code{SimpleWindow} som ritar upp ett fönster som är 300 bildpunkter brett och 500 bildpunkter högt med titeln \emph{Digging}.
\code{SimpleWindow} har en \emph{penna} som kan flyttas runt och rita linjer.
Anropet \code{w.moveTo(10, 10)} flyttar pennan för fönstret \code{w} till position $(10,10)$ utan att rita något, och anropet \code{w.lineTo(10, 20)} ritar en linje därifrån till position $(10, 20)$.

\Subtask
Nu ska du kompilera ditt program, men eftersom \code{SimpleWindow} inte finns i Scalas standardbibliotek utan i \texttt{cslib.jar} behöver du visa kompilatorn var den ska leta.
Det gör du genom att ange en \emph{classpath}, dvs. en sökväg till \texttt{class}-filer, när du kompilerar.
Använd flaggan \texttt{-cp cslib.jar} för att ange \texttt{cslib.jar} som classpath och kompilera ditt Scala-program igen:
\begin{REPLnonum}
> scalac -cp cslib.jar Mole.scala
\end{REPLnonum}

\Subtask
Nu ska du köra ditt program, och då behöver du också ange var \texttt{class}-filerna ligger.
Du ska ange den katalog där \texttt{class}-filerna för \code{Mole} ligger, som du just kompilerat, men du ska också ange \texttt{cslib.jar}, och det gör du med en kolon-separerad lista\footnote{Kolon används i Linux och macOS, medan Windows använder semikolon.}, till exempel \code{"sökväg1:sökväg2:sökväg3"}.
Katalogen du står i, där dina \texttt{class}-filer ligger, kan anges med en punkt (\texttt{.}).
Kör programmet med följande kommando (om Windows använd semikolon):
\begin{REPLnonum}
> scala -cp ".:cslib.jar" Mole
\end{REPLnonum}
Du ska nu få upp ett fönster med en liten kvadrat utritad i övre vänstra hörnet.


\SOLUTION

\TaskSolved \what~\TODO

\QUESTEND





\WHAT{\TODO FIXA ÖVNING MED FÄRG. Nedan borttaget ur labben.}

\QUESTBEGIN


\Task \what~

Det finns många sätt att beskriva färger.
I naturligt språk har vi olika namn på färgerna, till exempel \emph{vitt}, \emph{rosa} och \emph{magenta}.
I datorn är det vanligt att beskriva färgerna som en blandning av \emph{rött}, \emph{grönt} och \emph{blått} i det så kallade RGB-systemet.
\code{SimpleWindow} använder typen \code{java.awt.Color} för att beskriva färger och \code{java.awt.Color} bygger på RGB.
Det finns några fördefinierade färger i \code{java.awt.Color}, till exempel \code{java.awt.Color.black} för svart och \code{java.awt.Color.green} för grönt.
Andra färger kan skapas genom att ange mängden rött, grönt och blått.

\Subtask
Skapa ett nytt objekt i \texttt{Mole.scala} med namnet \code{Colors} och lägg in följande definitioner:
\begin{Code}
val mole = new java.awt.Color(51, 51, 0)
val soil = new java.awt.Color(153, 102, 51)
val tunnel = new java.awt.Color(204, 153, 102)
\end{Code}
% val sky = new java.awt.Color(51, 51, 204)
% val grass = new java.awt.Color(51, 204, 51)
Den tre parametrarna till \code{new java.awt.Color(r, g, b)} anger hur mycket \emph{rött}, \emph{grönt} respektive \emph{blått} som färgen ska innehålla, och mängderna ska vara i intervallet 0--255.
Färgen $(153, 102, 51)$ innebär ganska mycket rött, lite mindre grönt och ännu mindre blått och det upplevs som brunt.
Objektet \code{Colors} är en färgpallett, men vi har inte ritat något med färg ännu.
Kompilera och kör ditt program ändå, för att se så programmet fungerar likadant som sist.

\Subtask
Lägg till en parameter till \code{Graphics.block} sist i parameterlistan med namnet \code{color} och typen \code{java.awt.Color}.
Låt \emph{default-argumentet} för den nya parametern vara \code{java.awt.Color.black}.
(Kommer du inte ihåg hur man gör default-argument kan du titta på övningarna i kapitel~\ref{exe:W03}.)
För att ändra färgen på blocket kan du byta linjefärg innan du ritar.
Lägg till följande rad i början på \code{Graphics.block}:
\begin{Code}
w.setLineColor(color)
\end{Code}
Kompilera och kör ditt program igen för att se om det fortfarande fungerar.

\Subtask\Pen
Funktionen \code{Graphics.block} har tre parametrar, men den anropas bara med två parametrar i \code{Mole.main}.
Varför är det tillåtet?
Vilket värde har den tredje parametern om ingen anges?
Skriv ner dina svar inför redovisningen.


\Subtask
Ändra i \code{Mole.main} och lägg till en av definitionerna från objektet \code{Colors} som tredje parameter till \code{Graphics.block}.
Kompilera och kör ditt program och upplev världen i färg.


\QUESTEND
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%







\WHAT{Objekt som moduler.}

\QUESTBEGIN

\Task \what~ \TODO{FLYTTA ALLT OM OBJEKT TILL W04}
\Task \what~

\Subtask Lär dig följande terminologi utantill:

Expand Down
6 changes: 4 additions & 2 deletions compendium/modules/w04-objects-lab-goals.tex
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
%!TEX encoding = UTF-8 Unicode
%!TEX root = ../compendium2.tex
%!TEX root = ../labs.tex

\item Kunna definiera objekt med medlemmar.
\item Kunna skapa singelobjekt med medlemmar.
\item Förstå kvalificerade namn och import.
\item Förstå synlighet och skuggning.
\item Kunna använda tupler.
\item Kunna använda uppdelade parameterlistor.
Loading

0 comments on commit 14be988

Please sign in to comment.