Skip to content

Commit

Permalink
formulation changes
Browse files Browse the repository at this point in the history
changes the formulation of some tasks and adds ExtraSheetTask4 class for task 4 on the extra sheet
  • Loading branch information
Sara424242 committed Oct 3, 2023
1 parent 2606b61 commit 84c5e94
Show file tree
Hide file tree
Showing 19 changed files with 187 additions and 141 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* This source file is part of the FIUS JVK 2019 project.
* For more information see github.com/FIUS/JVK-2019
*
* Copyright (c) 2019 the FIUS JVK 2019 project authors.
*
* This software is available under the MIT license.
* SPDX-License-Identifier: MIT
*/
package de.unistuttgart.informatik.fius.jvk.tasks;

import java.util.Random;

import de.unistuttgart.informatik.fius.icge.simulation.Position;
import de.unistuttgart.informatik.fius.icge.simulation.Simulation;
import de.unistuttgart.informatik.fius.icge.simulation.tasks.Task;
import de.unistuttgart.informatik.fius.icge.simulation.tools.PlayfieldModifier;
import de.unistuttgart.informatik.fius.jvk.provided.entity.Coin;
import de.unistuttgart.informatik.fius.jvk.provided.entity.Neo;
import de.unistuttgart.informatik.fius.jvk.provided.entity.Wall;
import de.unistuttgart.informatik.fius.jvk.provided.factories.CoinFactory;
import de.unistuttgart.informatik.fius.jvk.provided.factories.WallFactory;
import de.unistuttgart.informatik.fius.jvk.provided.shapes.Rectangle;

/**
* @author Sara Galle
*/
public class ExtraSheetTask4 implements Task{

@Override
public void run(Simulation sim) {
PlayfieldModifier pm = new PlayfieldModifier(sim.getPlayfield());
buildEnvironment(pm);
Neo neo = new Neo();
neo.setCoinsInWallet(500);
pm.placeEntityAt(neo, new Position(1, 2));
//your code here

}

private void buildEnvironment(PlayfieldModifier pm){
// build the outside wall
pm.placeEntityAtEachPosition(new CoinFactory(), new Rectangle(new Position(0, 0), new Position(11, 4)));

Random r = new Random();
for(int i = 1; i < 11; i++){
if(r.nextDouble() < 0.4)
pm.placeEntityAt(new Coin(), new Position(i, 1));

if(r.nextDouble() < 0.4)
pm.placeEntityAt(new Coin(), new Position(i, 3));
}
}

}
15 changes: 10 additions & 5 deletions sheets/1/exercise-2.tex
Original file line number Diff line number Diff line change
Expand Up @@ -165,12 +165,12 @@ \subsection*{Syntax}
\begin{Infobox}
\subsubsection*{Kommandos und Abfragen:}
\begin{itemize}
\item Kommando: Sie ändern eventuell was an dem Objekt z.B. benennen den Hund um
\item Kommando: Sie ändern eventuell was an dem Objekt z.B. benennen den Hund um oder lasse den Hund einen Schritt nach vorne gehen
\item Abfragen: Sie ändern nichts an dem Objekt, geben dafür aber was zurück z.B. den Hundename
\end{itemize}
Um Operationen eines Objekts aufzurufen, wird zuerst der Objektname geschrieben, gefolgt von einem Punkt und dem Operationsname.
Am Ende stehen paar Rundeklammern \q{()}, in denen Parameter stehen können.\\
{\color{red} Wichtig: } Operationen können nur auf Objekten und nicht auf Klassen aufgerufen werden.
\textbf{Wichtig:} Operationen können nur auf Objekten und nicht auf Klassen aufgerufen werden.
Es gibt hier einen Sonderfall, diesen wirst du in PSE kennenlernen.
\end{Infobox}
\begin{lstlisting}[title=\textbf{Kommando/Abfrage Syntax}]
Expand Down Expand Up @@ -213,14 +213,15 @@ \subsubsection*{Konvention Namen:}
\item Abfragen sollen mit \lstinline{get} beginnen $\rightarrow$ ''getName''
\item Kommandos, die einen Wert setzen, sollen mit \lstinline{set} beginnen $\rightarrow$ ''setName''
\item Keine Umlaute (ä, ö, ß,...)
\item Einheitliche Sprache, also entweder alles auf Englisch oder Deutsch

\end{itemize}
\end{Infobox}

\vspace{5mm}

\noindent
Allgemein sollen alle Namen auf Englisch formuliert werden.
Allgemein sollten aber alle Namen auf Englisch formuliert werden.
Variablen und Operationen werden immer mit einem Kleinbuchstaben angefangen.\\

\noindent
Expand Down Expand Up @@ -250,7 +251,7 @@ \subsubsection*{Einrückungen:}
Um direkt auf einen Blick zu erkennen, wo die Operation anfängt und wo sie endet, rückt man den Code in einer Operation (übrigens auch in Klassen) um eine Stufe ein (Eine \fbox{TAB} Stufe).\\

\noindent
{\color{red} Wichtig: }Achte unbedingt darauf das alle Klammern, die du öffnest auch wieder in der richtigen Reihenfolge schließest werden!
\textbf{Wichtig:} Achte unbedingt darauf das alle Klammern, die du öffnest auch wieder in der richtigen Reihenfolge schließest werden!


\begin{lstlisting}[title=\textbf{Beispiel gute Namensgebung}]
Expand Down Expand Up @@ -331,7 +332,9 @@ \subsubsection*{Einrückungen:}
Wie du vielleicht bereits gemerkt hast, ist das sehr hilfreich eine gute Dokumentation zu haben.
Ziel sollte es also sein so gut wie möglich zu beschreiben was bei einer Operation passiert (auch welche Parameter sie braucht und was sie zurück gibt) oder wofür eine Klasse zuständig ist.\\

Diese Dokumentation kannst du zum Beispiel online nachschauen oder direkt in der IDE (Eclipse) indem du den Mauszeiger über den Namen einer Operation bewegst, wird ein Kasten mit der Dokumentation dieser Operation angezeigt.
Diese Dokumentation kannst du zum Beispiel online nachschauen oder direkt in der IDE (Eclipse) indem du den Mauszeiger über den Namen einer Operation bewegst, wird ein Kasten mit der Dokumentation dieser Operation angezeigt.\\

Mehr zu Dokumentation und JavaDoc folgt noch in späteren Aufgaben.
\end{Infobox}

\begin{Infobox}[Autocompletion]
Expand All @@ -358,7 +361,9 @@ \subsubsection*{Einrückungen:}
Mit \fbox{Strg + Shift + l} kannst du eine Liste alle Tastenkombinationen ansehen.\\
\\
Wenn du \fbox{Strg} drückst während du auf einen Klassennamen oder einen Operationsnamen im Code klickst, öffnet Eclipse die entsprechende Java-Datei wo sich diese Operation oder Klasse befindet.\\

Wenn du \fbox{Strg + F11} drückst wird das Programm gestartet/so zu sagen der Run Button gedrückt.\\

Mit \fbox{Strg + Space} kannst du Autocompletion triggern.
\end{Infobox}

Expand Down
14 changes: 7 additions & 7 deletions sheets/1/exercise-3.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@
\label{ex3}

\begin{enumerate}
\item Nun wollen wir wie in Aufgabe 1 ein Spiel starten. Dazu ersetzen wir den \lstinline{ new demoTask} und \lstinline{new demoTaskVerifier} durch
den \lstinline{Sheet1Task3Task} und noch ohne den \lstinline{Sheet1Task3TaskVerifier}:
\item Nun wollen wir wie in Aufgabe 1 ein Spiel starten. Dazu ersetzen wir den \lstinline{ new demoTask} und \lstinline{new demoTaskVerifier} in der Main Klasse, durch
den \lstinline{Sheet1Task3Task} wie hier gezeigt:

\begin{lstlisting}
Game myGame = new Game("Hello World", new Sheet1Task3Task());
Game demoGame = new Game("Hello World", new Sheet1Task3Task());
\end{lstlisting}

Du startest das Spiel in der Variable \lstinline{myGame} indem du die Operation \lstinline{run()} darauf aufrufst.
Du startest das Spiel in der Variable \lstinline{demoGame} indem du die Operation \lstinline{run()} darauf aufrufst.

\begin{lstlisting}
myGame.run();
demoGame.run();
\end{lstlisting}

Starte das Programm in Eclipse, mit dem kleinen Play-Button oben in der Werkzeugleiste und schau dich ein wenig im Fenster, das dann aufgeht um.
Expand All @@ -29,7 +29,7 @@
Finde den \q{Task Status} Tab und drücke den Refresh Button.

\begin{lstlisting}
Game myGame = new Game("Hello World", new Sheet1Task3Task(), new Sheet1Task3TaskVerifier());
Game demoGame = new Game("Hello World", new Sheet1Task3Task(), new Sheet1Task3TaskVerifier());
\end{lstlisting}

\end{enumerate}
Expand Down Expand Up @@ -63,6 +63,6 @@

Wie ist der Zusammenhang zwischen Position der Münze und die Koordinaten im Koordinatensystem?

Tipp: Wenn du nicht genau weißt, wie man eine Münze erzeugt, schaue dir den Code, welchen du in Teilaufgabe d) gefunden hast, nochmal an.
\textbf{Tipp:} Wenn du nicht genau weißt, wie man eine Münze erzeugt, schaue dir den Code, welchen du in Teilaufgabe d) gefunden hast, nochmal an.
\item Du kannst auch im Fenster selbst Münzen und Wände platzieren, dies geht rechts oben mit dem + und - Button. Versuche die Aufgabe e) nun nochmal zu lösen ohne im Code Münzen zu platzieren.
\end{enumerate}
18 changes: 9 additions & 9 deletions sheets/2/exercise-1.tex
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
\item Instanziiere die Simulation wie bekannt und mache dich mit dieser vertraut.
Benutze dabei den Task \lstinline{Sheet2Task1} und den Verifier aus \lstinline{Sheet2Task1Verifier}.
\item Lade Neo in die Matrix.
Dafür musst du zuerst ein Objekt der Klasse \lstinline{Neo} erstellen und in einer Variable (z.B. \lstinline{player}) speichern.
Dann kannst du den \lstinline{player} und die Münze wie bereits gelernt mit dem \lstinline{PlayfieldModifier} auf dem Spielfeld platzieren.
Dafür musst du zuerst ein Objekt der Klasse \lstinline{Neo} erstellen und in einer Variable (z.B. \lstinline{neo}) speichern.
Dann kannst du \lstinline{neo} und die Münze wie bereits gelernt mit dem \lstinline{PlayfieldModifier} auf dem Spielfeld platzieren.

Dein Code sollte in etwa wie folgt aussehen.

Expand All @@ -24,25 +24,25 @@
// Your Implementation here

PlayfieldModifier pm = new PlayfieldModifier(sim.getPlayfield());
Neo player = new Neo();
pm.placeEntityAt(player, new Position(1,1));
Neo neo = new Neo();
pm.placeEntityAt(neo, new Position(1,1));
\end{lstlisting}

Überprüfe im \fbox{Task Status} Tab ob dein Code korrekt funktioniert.
\item Damit sich Neo bewegt, musst du ihm eines der folgenden Kommandos geben und die Simulation mit dem Play Button starten. Im Simulationsfenster musst du dann den Play Button links oben drücken. \\
Tipp: Neben dem Play Button im Simulationsfenster ist ein Geschwindigkeitsschieberegler, mit dem du die Simulationsgeschwindigkeit anpassen kannst.
\textbf{Tipp:} Neben dem Play Button im Simulationsfenster ist ein Geschwindigkeitsschieberegler, mit dem du die Simulationsgeschwindigkeit anpassen kannst.

\begin{lstlisting}[firstnumber=20]
player.move();
player.moveIfPossible();
player.turnClockWise();
neo.move();
neo.moveIfPossible();
neo.turnClockWise();
\end{lstlisting}

Teste alle 3 Kommandos.\\
\item Mit den gegebenen Kommando, kann sich Neo nur nach rechts drehen.\\
Finde un einen Weg, wie du Neo dazu bringen kannst, sich nach links (oder nach hinten) umzudrehen?

Hinweis: Du kannst Kommandos mehrfach hintereinander aufrufen.
\textbf{Hinweis:} Du kannst Kommandos mehrfach hintereinander aufrufen.
\item Gib Neo nun die folgenden Anweisungen:

{
Expand Down
52 changes: 25 additions & 27 deletions sheets/2/exercise-2.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2,52 +2,57 @@

\excercise{Exceptions}

Tank und Neo wollen nun in einer neuen Simulationsumgebung trainieren.
Tank und Neo wollen nun in einer neuen Simulationsumgebung trainieren.
Dabei soll Neo in einem potenziell gefährlichen Situation so schnell wie möglich zur nächsten Telefonstation laufen.

\begin{enumerate}
\item Instanziiere die Simulation wie bekannt (\lstinline{Sheet2Task2} und \lstinline{Sheet2Task2Verifier}) und mache dich mit dieser vertraut.
\item Als Operator hat Tank die Möglichkeit Hindernisse zwischen Neo und der Telefonstation einzufügen.
Betrachte die Klasse \lstinline{Sheet2Task2} mit der Operation \lstinline{run} an der markierten Stelle.

Überlege dir wie du an Tank's Stelle ein solches Hindernis an einer geeigneten Stelle platzieren kannst und platziere es dort.
Falls du nicht weißt wie man ein Hindernis platziert, schaue dir nochmal Blatt 1 Aufgabe 3 oder die Klasse \lstinline{Sheet2Task2} genauer an.

Was passiert, wenn man jetzt die Simulation wie zuvor ausführt?
Überlege dir wie du an Tank's Stelle ein solches Hindernis an einer geeigneten Stelle platzieren kann und platziere es dort. Falls du nicht weißt wie man ein Hindernis platziert, schaue dir nochmal Blatt 1 Aufgabe 3 oder die Klasse \lstinline{Sheet2Task2} genauer an.

Was passiert, wenn man jetzt die Simulation wie zuvor ausführt?\\

\end{enumerate}

\begin{Infobox}[Exceptions]
Eine Exception ist ein Fehler der beim Ausführen des Programmes passieren kann wenn z.B. unvorhergesehene oder verbotene Sachen passieren.\newline
\textbf{Antwort:} Es wird eine Excepion geworfen.\\
\begin{Infobox}[Exception]
Eine Exception ist ein Fehler der beim Ausführen des Programmes passieren kann wenn z.B. unvorhergesehene oder verbotene Sachen passieren.\\


\textbf{Hinweis:} Es gibt in PSE später genauere Unterscheidungen zwischen verschiedene Arten von Exceptions und Errors, wir wollen das ganze hier mal vereinfacht betrachten.
Dabei werden wir allerdings teilweise nicht hundertprozentig genau sein.\newline
\textbf{Notiz:} Es gibt in PSE später genauere Unterscheidungen zwischen verschiedene Arten von Exceptions, Errors usw. wir wollen das ganze hier mal vereinfacht betrachten. Dabei werden wir allerdings teilweise nicht hundertprozentig genau sein.\\

Als nächstes wollen wir den Aufbau einer Exception genauer verstehen.
Überlege dazu was der folgende Programmausschnitt macht:

\begin{lstlisting}[numbers=left,xleftmargin=2em,frame=single,framexleftmargin=1.5em]
public class Main {
public class Main{
//Programmeinstieg
public void main() {
public void main(){
//some other code
divide(1, 0);
}

public int divide(int a, int b) {
public Integer divide(Integer a, Integer b){
return a / b;
}
}
\end{lstlisting}
\textbf{Exkurs:} Operatoren sind in eine Programmiersprache eingebaute Funktion, die durch ein Zeichen repräsentiert werden.
Beispielsweise können wir zwei Zahlen durch den \texttt{-} Operator voneinander abziehen, z.B. mit \texttt{42 - 73}.
Damit wir das Ergebnis auch ansehen können und die Rechnung nicht nur ausgewertet wird und dann verschwindet, kann man es entweder in einer Variable speichern (siehe Nachschlagwerk) oder als Argument in einer Funktionen verwenden.
Wenn man beispielsweise das Ergebnis der Subtraktion oben auf der Konsole ausgeben möchte, kann man diese einfach als Parameter in die runden Klammern der Java-internen Funktion \lstinline{System.out.println()} geben.
Die meisten Programmiersprachen haben eingebaute, einfache arithmetische Operatoren wie \texttt{+}, \texttt{-}, \texttt{*} oder \texttt{/}.\\

Dabei lässt sich erkennen, dass in Zeile 9 der Programmausführung durch 0 geteilt wird.\\
Im oberen Programmausschnitt lässt sich erkennen, dass in Zeile 9 der Programmausführung durch 0 geteilt wird.\\
Dieses ungewollte (''verbotene'') Verhalten wird bei der Programmausführung durch die folgende Exception ersichtlich:

\begin{lstlisting}[keywords={}, breaklines=true, numbers=none]
java.lang.ArithmeticException: / by zero
at de.unistuttgart.informatik.fius.jvk.Main.divide(Main.java:9)
at de.unistuttgart.informatik.fius.jvk.Main.main(Main.java:5)
\end{lstlisting}
\end{lstlisting}

Der Inhalt der Fehlermeldung, lässt sich in folgende Teile aufteilen:

Expand All @@ -58,17 +63,9 @@
In unserem Fall ist die Nachricht \lstinline{"/ by zero"}.
\item Fehlerstelle im Programm: Der Stacktrace der Exception beinhaltet Informationen, wo im Programm die Exception geflogen also passiert ist. Genauer, welche Klassen wo Fehler geworfen haben und so den eigentlichen Fehler produziert haben.\\
Hier interessiert uns fürs Erste nur die zweite Zeile. In unserem Beispiel deutet die zweite Zeile darauf hin, dass die Exception expliziet in der \lstinline{Main} Klasse in der \lstinline{divide}
Operation in Zeile 9 geflogen ist, was wiederum Auswirkungen auf die Main Funktion hatte.
Operation in Zeile 9 geflogen ist, was wiederum Auswirkungen auf die Main Funktion hatte.
\end{enumerate}

\textit{Exkurs:} Operatoren sind in eine Programmiersprache eingebaute Funktion, die durch ein oder mehrere Zeichen repräsentiert werden.\newline

Beispielsweise können wir zwei Zahlen durch den \texttt{-}-Operator voneinander abziehen, z.B. mit \texttt{42 - 73}.
Damit wir das Ergebnis auch ansehen können und die Rechnung nicht nur ausgewertet wird und dann verschwindet, kann man es entweder in einer Variable speichern (siehe Nachschlagwerk) oder etwa als Argument in einer Funktionen verwenden.\newline

Wenn man beispielsweise das Ergebnis der Subtraktion oben auf der Konsole ausgeben möchte, kann man diese einfach als Parameter in die runden Klammern der Java-internen Funktion \lstinline{System.out.println()} geben.
Die meisten Programmiersprachen haben eingebaute arithmetische Operatoren wie \texttt{+}, \texttt{-}, \texttt{*} oder \texttt{/}.

\end{Infobox}


Expand All @@ -94,8 +91,8 @@
\item[ii)] In welcher Operation wurde die Exception geworfen?
\item[iii)] In dem obigen Stacktrace sind die dazugehörigen Zeilennummern verloren gegangen. Ersetze diese!

\textbf{Tipp}: Schaue dazu in die Console.\\
\textbf{Warum diese Analyse}: Stacktraces können vorallem bei komplexerem Code helfen rauszufinden, was wo nicht funktioniert und helfen somit bei der Fehlersuche.
\textbf{Tipp:} Schaue dazu in die Console.\\
\textbf{Warum diese Analyse:} Stacktraces können vorallem bei komplexerem Code helfen rauszufinden, was wo nicht funktioniert hat und helfen somit bei der Fehlersuche.
\end{enumerate}

\item Wie wir gelernt haben sind Exceptions ein Anzeichen das etwas passiert ist was nicht passieren sollte, jetzt wollen wir die Exception verhindern.\\
Expand All @@ -108,6 +105,7 @@
Wenn ja wie ?

\textbf{Hinweis}: In Aufgabe 1 hast du noch ein weiteres Kommando kennengelernt mit dem du Neo bewegen kannst.
Du kannst Neo aber auch um die Wand herum gehen lassen.

\item \optional Welche \q{linenumber} aus dem obigen Stacktrace ändert sich, wenn man zwischen den \lstinline{neo.move()} Aufrufen jeweils Leerzeilen einfügt?
\end{enumerate}

Loading

0 comments on commit 84c5e94

Please sign in to comment.