<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=130.149.17.45</id>
	<title>FreitagsrundenWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=130.149.17.45"/>
	<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//Spezial:Beitr%C3%A4ge/130.149.17.45"/>
	<updated>2026-11-01T12:58:40Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Studieren_und_mehr&amp;diff=15262</id>
		<title>Studieren und mehr</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Studieren_und_mehr&amp;diff=15262"/>
		<updated>2010-10-22T12:13:09Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.45: /* Studieren und mehr -- Was kann man sonst noch so in der Uni machen? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Studieren und mehr -- Was kann man sonst noch so in der Uni machen? ==&lt;br /&gt;
... ist ein Vortrag den die Freitagsrunde in der E-Woche hällt. Wir erklären was die TU Berlin an angenehmen Dingen für werdende Studenten der Fak.IV bereit hält.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Einführungswoche]] &lt;br /&gt;
&lt;br /&gt;
== alte Folien ==&lt;br /&gt;
&lt;br /&gt;
* [http://docs.freitagsrunde.org/E-Woche/2008/Studieren_und_mehr_WS2008.pdf Folien aus WS2008 als PDF]&lt;br /&gt;
* [https://docs.freitagsrunde.org/E-Woche/2010/StudierenUndMehr/sonstso2010.pdf Folien zum 2010&#039;er Vortrag &amp;quot;Studieren und mehr: Was man sonst noch so in der Uni machen kann&amp;quot;] (achtung, groß, 15MB)&lt;/div&gt;</summary>
		<author><name>130.149.17.45</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Studieren_und_mehr&amp;diff=15261</id>
		<title>Studieren und mehr</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Studieren_und_mehr&amp;diff=15261"/>
		<updated>2010-10-22T12:11:08Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.45: 2010&amp;#039;er Folien&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Studieren und mehr -- Was kann man sonst noch so in der Uni machen? ==&lt;br /&gt;
... ist ein Vortrag den die Freitagsrunde in der E-Woche hällt. Wir erklären was die TU Berlin an angenehmen Dingen für werdende Studenten der Fak.IV bereit hällt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://docs.freitagsrunde.org/E-Woche/2008/Studieren_und_mehr_WS2008.pdf Folien aus WS2008 als PDF]&lt;br /&gt;
* [https://docs.freitagsrunde.org/E-Woche/2010/StudierenUndMehr/sonstso2010.pdf Folien zum 2010&#039;er Vortrag &amp;quot;Studieren und mehr: Was man sonst noch so in der Uni machen kann&amp;quot;] (achtung, groß, 15MB)&lt;/div&gt;</summary>
		<author><name>130.149.17.45</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Diskussion:Ewoche/seidaktiv&amp;diff=15235</id>
		<title>Diskussion:Ewoche/seidaktiv</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Diskussion:Ewoche/seidaktiv&amp;diff=15235"/>
		<updated>2010-10-20T11:02:29Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.45: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitte drückt jetzt auf das Plus, damit ihr einen Kommentar hinterlasst.  Damit wir wissen, wer diesen Kommentar geschrieben hat, schreibt bitte  das gleiche auch auf eure Abgabe. &lt;br /&gt;
&lt;br /&gt;
== Kommentar ==&lt;br /&gt;
&lt;br /&gt;
Hallo liebe &amp;lt;u&amp;gt;&#039;&#039;&#039;Erst&#039;&#039;&#039;&amp;lt;/u&amp;gt;semester  --[[Benutzer:Tkroenert|Tkroenert]] 13:56, 30. Sep. 2010 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Hallo ==&lt;br /&gt;
&lt;br /&gt;
Hallo von der Zimt gruppe.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Gruppe hat die Aufgabe 12 bearbeitet.&lt;br /&gt;
&lt;br /&gt;
Aufgabe 12 erledigt. (&amp;gt;°-°)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SDF-Gruppe&lt;/div&gt;</summary>
		<author><name>130.149.17.45</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Doom&amp;diff=13719</id>
		<title>Javakurs/Übungsaufgaben/Doom</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Doom&amp;diff=13719"/>
		<updated>2010-03-25T16:17:13Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.45: /* Kommentare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ASCII-DOOM&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
In Ascii-Doom geht es darum, ein kleines [http://de.wikipedia.org/wiki/Rogue-like rogue-like] Spiel zu implementieren. &lt;br /&gt;
&lt;br /&gt;
D.h. es wird möglich sein mittels [http://en.wikipedia.org/wiki/ASCII_art ASCII-Art], mit einer Spielfigur auf dem Spielfeld zu laufen, später könnt ihr auch&lt;br /&gt;
Items, Waffen und [http://imblog.aufeminin.com/blog/D20060112/71199_224296211_liv_tyler_H210646_L.jpg Liv Tyler] einbauen! &lt;br /&gt;
&lt;br /&gt;
Wir werden Schritt für Schritt das Spiel implementieren. Wenn ihr verloren geht, keine Angst, wir können euch helfen ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Die Klasse &#039;&#039;GameMain&#039;&#039; - Der Anfang ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse &#039;&#039;GameMain&#039;&#039; ist die Klasse, die die main Methode enthalten wird und somit ausführbar ist. Sie wird die Schnittstelle zur Außenwelt sein und die Ausgabe auf die Konsole tätigen.&lt;br /&gt;
&lt;br /&gt;
* Erstellt zunächst nur diese Klasse. Sobald ihr Klassen aus den späteren Aufgaben implementiert habt, könnt ihr in der &#039;&#039;main&#039;&#039;-Methode ihre Funktionalität testen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Positionen für alle Objekte ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse &#039;&#039;Position&#039;&#039; repräsentiert eine Position auf einem 2D-Spielfeld. Also karthesische 2 dimensionale Koordinaten, wie ihr sie von einem kariertem Papier kennt. Des Weiteren enthält Sie private die folgende Attribute:  &#039;&#039;x&#039;&#039; und &#039;&#039;y&#039;&#039;, gekapselt mit &#039;&#039;Gettern&#039;&#039; und &#039;&#039;Settern&#039;&#039;.&lt;br /&gt;
	&lt;br /&gt;
* Schreibt diese &#039;&#039;Getter&#039;&#039; und &#039;&#039;Setter&#039;&#039;&lt;br /&gt;
* Implementiert eine equals-Methode, die 2 Objekte vom Typ &#039;&#039;Position&#039;&#039; vergleicht.&lt;br /&gt;
* Testet nun eure &#039;&#039;equals&#039;&#039;-Methode in der &#039;&#039;main&#039;&#039;. (Tested sie solange bis sie funktioniert)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Repräsentation eines Gebietes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;GameTile&#039;&#039; wird unsere Klasse sein, die ein Tile, also ein Feld, im späteren Spiel repräsentiert. Alle weiteren Felder werden von ihr erben. So wird es später ein &#039;&#039;leeres Feld&#039;&#039; geben, eine &#039;&#039;Mauer&#039;&#039;, und Alles was euch noch einfällt.&lt;br /&gt;
&lt;br /&gt;
* Es enthält außerdem eine private Variable vom Typ &#039;&#039;Position&#039;&#039;, welche die Position des GameTiles auf dem Feld speichert.&lt;br /&gt;
	&lt;br /&gt;
* Implementiert eine &#039;&#039;toString&#039;&#039;-Methode, die jedem &#039;&#039;GameTile&#039;&#039; einen &#039;&#039;String&#039;&#039; mit Länge 1 zuordnet.&lt;br /&gt;
** Diese Methode wird von allen erbenden Klassen überschrieben werden&lt;br /&gt;
&lt;br /&gt;
* Schreibt nun einige Klassen die von &#039;&#039;GameTile&#039;&#039; erben&lt;br /&gt;
** Als Namen bietet sich &#039;&#039;WallTile&#039;&#039; und &#039;&#039;EmptyTile&#039;&#039;&lt;br /&gt;
** Die &#039;&#039;toString()&#039;&#039;-Methoden sollten dann sinvolle Zeichen zurückgeben, wie &amp;quot; &amp;quot; oder &amp;quot;#&amp;quot;.&lt;br /&gt;
		&lt;br /&gt;
* Testet auch hier euere &#039;&#039;toString&#039;&#039;-Methoden, in dem ihr euch einzelne Tiles erzeugt und diese ausgeben last&#039;&#039;&#039;&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
== Das GameField ==&lt;br /&gt;
Euer &#039;&#039;GameField&#039;&#039; ist eine zentrale Klasse in diesem Spiel, sie repräsentiert das Spielfeld als Ganzes und besteht aus mehreren &#039;&#039;GameTiles&#039;&#039;.&lt;br /&gt;
	&lt;br /&gt;
* Enthält eine private Variable für das Level (2D-Array aus GameTiles). &lt;br /&gt;
	&lt;br /&gt;
* Über den Konstruktor wird ein String dieser Form übergeben(ebenso wie die Breite des Spielfeldes): 		&lt;br /&gt;
        String s = &amp;quot;########&amp;quot; +&lt;br /&gt;
 		  &amp;quot;#      #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;#      #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;###    #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;#      #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;########&amp;quot;;&lt;br /&gt;
** Es soll mit einer Schleife der String Zeichen für Zeichen ausgelesen werden und aus jedem Zeichen ein neues &#039;&#039;GameTile&#039;&#039; (Wand oder leer) erzeugt werden. Diese &#039;&#039;GameTiles&#039;&#039; werden dann in dem Array gespeichert!&lt;br /&gt;
** Wie man Strings Zeichen für Zeichen ausliest, findet ihr in der API (java.lang.String).&lt;br /&gt;
** Implementiert ein toString, dieser soll folgenden String liefern: 	&lt;br /&gt;
 		 ######## &lt;br /&gt;
 		 #      #&lt;br /&gt;
 		 #      #&lt;br /&gt;
 		 ###    #&lt;br /&gt;
 		 #      #&lt;br /&gt;
  		 ########&lt;br /&gt;
** Tipp: &amp;quot;\n&amp;quot; steht in einem String für Zeilenumbruch.&lt;br /&gt;
** Es soll also aus dem &#039;&#039;GameField&#039;&#039;-Array wieder ein &#039;&#039;String&#039;&#039; generiert werden.&lt;br /&gt;
** Die &#039;&#039;toString&#039;&#039;-Methode von &#039;&#039;GameField&#039;&#039; soll die &#039;&#039;toString&#039;&#039;-Methode der &#039;&#039;GameTile&#039;&#039;s verwenden, um diese Ausgabe zu erzeugen.&lt;br /&gt;
* &#039;&#039;&#039;TESTET euer Programm mit verschiedenen Levels&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Eine Welt aus Feldern ==&lt;br /&gt;
	&lt;br /&gt;
Die Klasse &#039;&#039;World&#039;&#039; ist die Klasse, die Alles verbinden wird, Spieler, Items, Spielfeld etc.&lt;br /&gt;
&lt;br /&gt;
Bei Java funktioniert es bei grafischen Anwendungen etwa so: Man hat ein Objekt, das eine Leinwand repräsentiert (Canvas), man darf auf diesem Objekt Sachen malen. In einem Spiel wird das Objekt in jedem Frame leer gemacht, danach werden alle beteiligten grafischen Objekte (Spieler, Spielfeld, Gegner) nacheinander auf diese Leinwand gemalt. Letzendlich wird die Leinwand auf dem Bildschirm ausgegeben. Das hat den Vorteil, dass jede Klasse die darauf Zugriff bekommt, irgendetwas malen kann ohne zu wissen, was bereits darauf ist oder noch darauf kommt. (Jedes Objekt kümmert sich selbst um seine grafische Entsprechung.)&lt;br /&gt;
Das werden wir hier auch machen, allerdings mit einem String, da uns die Grundlagen für Grafisches fehlen.&lt;br /&gt;
	&lt;br /&gt;
* Zunächst einmal gibt es nur das &#039;&#039;GameField&#039;&#039;, was wir einbinden können (später den Spieler, etc.).&lt;br /&gt;
** So muss es auch ein Variable vom Typ &#039;&#039;GameField&#039;&#039; geben.	&lt;br /&gt;
* Die &#039;&#039;Main&#039;&#039; Klasse erzeugt ab jetzt nur noch eine Instanz von &#039;&#039;World&#039;&#039; nicht mehr von &#039;&#039;GameField&#039;&#039;. Denn &#039;&#039;World&#039;&#039; selbst soll sich das &#039;&#039;GameField&#039;&#039; erzeugen (im Konstruktor).&lt;br /&gt;
	&lt;br /&gt;
* Definiert eine &#039;&#039;canvas&#039;&#039; Variable, die für die grafische Repräsentierung des Spielfelds stehen wird.&lt;br /&gt;
**  &#039;&#039;canvas&#039;&#039; ist dabei ein String der der linear das GameField speichert.&lt;br /&gt;
BSP: Diese Feld&lt;br /&gt;
 ###&lt;br /&gt;
 # ##&lt;br /&gt;
 #@ #&lt;br /&gt;
 ####&lt;br /&gt;
Entspricht dann (für eine Breite von 4)&lt;br /&gt;
 ### # ###@ #####&lt;br /&gt;
&lt;br /&gt;
Unter der Annahme das das Feld n Einheiten breit ist, kann man berechnen auf welchem Index des Strings ein Tile liegen soll. Beispiel: ein Tile hat die Koordinaten (4,7) und das Feld ist 16 Einheiten breit, dann berechnet sich der Index aus i = 4 + 7*16, also i = x + y*w.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zeichnen der Welt ==&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;World&#039;&#039; sollte sich nun selbst zeichnen können. Diese Methode sollte &#039;&#039;draw&#039;&#039; heißen. SIe muss  die &#039;&#039;toString&#039;&#039;-Methode des GameFields aufrufen. Diese Methode liefert einen linearisierte Variante des Feldes zurück und diese &#039;&#039;draw&#039;&#039;-Methode müsste dann nur die linearisierte Variante in Abhängigkeit von der Breite der &#039;&#039;Welt&#039;&#039;, 2D ausgeben.&lt;br /&gt;
&lt;br /&gt;
Dazu ein Beispiel: Angenommen &#039;&#039;GameField.toString()&#039;&#039; liefert&lt;br /&gt;
 #### ## ##@####&lt;br /&gt;
Und unter der Annahme die Welt sei 3 Einheiten breit, dann sollte die Ausgabe so aussehen:&lt;br /&gt;
 ###&lt;br /&gt;
 # #&lt;br /&gt;
 # #&lt;br /&gt;
 #@#&lt;br /&gt;
 ###&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039; TESTET nun eure Grafik Ausgabe anhand verschiedener Level&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schönheit der Ausgabe im GameMain ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse GameMain enthält als einzige eine Instanz der Klasse World und kann somit das Spielfeld zeichnen. 	&lt;br /&gt;
Sofern ihr beim Testen versucht habt, das Spielfeld mehrmals auf die Konsole auszugeben, seht ihr, dass das alte Spielfeld  noch immer sichtbar ist über dem neuen. Das sieht irgendwie blöd aus.&lt;br /&gt;
	  &lt;br /&gt;
* Zählt nach, wieviele Zeilen euere Konsole hat. 	&lt;br /&gt;
* Bevor man das Level ausgibt, kann man soviele leere Zeilen ausgeben lassen, dass das alte Level nicht mehr sichtbar ist. &#039;&#039;System.out.println(&amp;quot;&amp;quot;);&#039;&#039; gibt eine leere Zeile aus. &lt;br /&gt;
* &#039;&#039;&#039;TESTEN ob das klappt und gut aussieht&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Der Spieler ==&lt;br /&gt;
&lt;br /&gt;
Der Spieler wird die Möglichkeit haben, auf dem Spielfeld rumzulaufen und je nachdem, wie weit ihr kommt, noch viel mehr. Perfekt wäre es wenn dieser Spieler auch von &#039;&#039;GameField&#039;&#039; erbt, damit ihr die Funktionalitäten eines Feldes weiter benutzen könnt (Position, etc.).&lt;br /&gt;
	  		  &lt;br /&gt;
* Der Spieler wird durch ein &amp;quot;@&amp;quot; auf dem &#039;&#039;GameField&#039;&#039; repräsentiert.&lt;br /&gt;
* Schreibt eine &#039;&#039;draw&#039;&#039;-Methode, die einen String bekommt und anhand der obigen Formel zur Indexberechnung und der Position des Spielers den übergebenen String um den Spieler selber ergänzt.&lt;br /&gt;
&lt;br /&gt;
Wenn wir das ganze als Ausgabe betrachten, könnte dies der Eingabe-String sein:&lt;br /&gt;
 ###&lt;br /&gt;
 # #&lt;br /&gt;
 # #####&lt;br /&gt;
 #     #&lt;br /&gt;
 #######&lt;br /&gt;
&lt;br /&gt;
oder linear:&lt;br /&gt;
 ###    # #    # ######     ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn der Player jetzt eine Position von (5,4) hat, und die Welt eine Breite von 7 hat, so muss der Index 5+4*7=33 um den Spieler ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren wollen wir auch den Spieler bewegen können, also muss er folgende Funktionalitäten besitzen:&lt;br /&gt;
* public void moveLeft() &lt;br /&gt;
* public void moveRight()&lt;br /&gt;
* public void moveUp()&lt;br /&gt;
* public void moveDown()&lt;br /&gt;
** Welche einfach nur die X- oder Y-Position um 1 erhöhen oder verringern.&lt;br /&gt;
&lt;br /&gt;
	  &lt;br /&gt;
&lt;br /&gt;
== Der Spieler in der Welt ==&lt;br /&gt;
&lt;br /&gt;
* Im Konstruktor soll nun auch eine Spielerinstanz erzeugt werden und zunächst an einer bel. Position gesetzt werden.&lt;br /&gt;
	  &lt;br /&gt;
* Erweitert die draw-Methode so, dass nun auch der Spieler angezeigt wird. &lt;br /&gt;
	&lt;br /&gt;
* &#039;&#039;&#039;TESTET ob das funktioniert. Was passiert eigentlich, wenn man den Spieler an der Position  -1 | -1 setzt ? &#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interaktive Welt ==&lt;br /&gt;
&lt;br /&gt;
Nun ist es an der Zeit eurem Spieler das Bewegen beizubringen. Dazu solltet ihr die &#039;&#039;World&#039;&#039;-Klasse überarbeiten.&lt;br /&gt;
&lt;br /&gt;
* Implementiert eine Methode &#039;&#039;public boolean onKeyPressed( String key ){ ... }&#039;&#039;. Sie wird dann aufgerufen werden, wenn eine Taste gedrückt wurde und soll &#039;&#039;true&#039;&#039; zurückgeben, wenn der Spieler sich bewegt hat, ansonsten &#039;&#039;false&#039;&#039;. 	  &lt;br /&gt;
	  &lt;br /&gt;
* Zunächst müssen wir in &#039;&#039;onKeyPressed&#039;&#039; prüfen, ob key einer der Strings &amp;quot;a&amp;quot; (links) , &amp;quot;s&amp;quot;(unten) , &amp;quot;d&amp;quot;(rechts) , &amp;quot;w&amp;quot;(oben) ist (&#039;&#039;equals&#039;&#039; benutzen!). Falls ja, wurde schonmal eine gültige Taste gedrückt. Falls nein, können wir &#039;&#039;false&#039;&#039; zurückliefern.&lt;br /&gt;
	&lt;br /&gt;
* Wir müssen als nächstes prüfen, ob der Spieler durch die Bewegung nicht in eine Mauer reinläuft, dazu müssen wir die Spielerposition vergleichen und schauen, in welchem Tile er stehen würde, wenn wir rechts/links/hoch/runter liefen. Sofern dieses Tile leer ist, dürfen wir in diese Richtung laufen. Denkt dabei an die Getter der &#039;&#039;GameField&#039;&#039;-Klasse&lt;br /&gt;
	  &lt;br /&gt;
* Nun wo wir das alles geprüft haben, bewegen wir den Spieler mit einer der vier Bewegungsfunktionen und geben true zurück.&lt;br /&gt;
		  &lt;br /&gt;
* &#039;&#039;&#039;TESTET unbedingt manuell diese Methode, sie muss korrekt funktionieren! &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Final Touch ==&lt;br /&gt;
&lt;br /&gt;
Jetzt müsst ihr nur noch eine passende Main-Schleife schreiben, und ihr habt eure erste Sandbox zum weiteren Experimentieren fertig. &lt;br /&gt;
&lt;br /&gt;
* Für die Eingabe von der Konsole benutzt ihr am Besten die &#039;&#039;Terminal&#039;&#039;-Klasse.&lt;br /&gt;
&lt;br /&gt;
* Es muss geprueft werden ob es sich um ein gueltiges Zeichen handelt und ob es eines der Zeichen &#039;&#039;a,s,w,d&#039;&#039; ist.&lt;br /&gt;
&lt;br /&gt;
* Das eingegebene Zeichen soll dann an die &#039;&#039;World&#039;&#039;-Klasse übergeben werden und diese soll den Spieler bewegen, falls dies möglich ist!&lt;br /&gt;
		     	 &lt;br /&gt;
Das ist das Basisgerüst für ein Spiel, ihr könnt nun weitere Sachen einfügen wie z.B. Items, die man einsammeln kann. Wie könnte man das machen? Was hat Liv Tyler in diesem Spiel für eine Aufgabe?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 pwd&lt;br /&gt;
 cd Desktop/javakurs10/DOOM/&lt;br /&gt;
 TERM_ATTRS=&amp;quot;-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -tostop -echoprt -echoctl -echoke&amp;quot;  &lt;br /&gt;
 &lt;br /&gt;
 /bin/stty $TERM_ATTRS &lt;br /&gt;
 java -cp . GameMain&lt;br /&gt;
 &lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java_Aufgaben]]&lt;/div&gt;</summary>
		<author><name>130.149.17.45</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Doom&amp;diff=13718</id>
		<title>Javakurs/Übungsaufgaben/Doom</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Doom&amp;diff=13718"/>
		<updated>2010-03-25T16:16:55Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.45: /* Kommentare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ASCII-DOOM&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
In Ascii-Doom geht es darum, ein kleines [http://de.wikipedia.org/wiki/Rogue-like rogue-like] Spiel zu implementieren. &lt;br /&gt;
&lt;br /&gt;
D.h. es wird möglich sein mittels [http://en.wikipedia.org/wiki/ASCII_art ASCII-Art], mit einer Spielfigur auf dem Spielfeld zu laufen, später könnt ihr auch&lt;br /&gt;
Items, Waffen und [http://imblog.aufeminin.com/blog/D20060112/71199_224296211_liv_tyler_H210646_L.jpg Liv Tyler] einbauen! &lt;br /&gt;
&lt;br /&gt;
Wir werden Schritt für Schritt das Spiel implementieren. Wenn ihr verloren geht, keine Angst, wir können euch helfen ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Die Klasse &#039;&#039;GameMain&#039;&#039; - Der Anfang ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse &#039;&#039;GameMain&#039;&#039; ist die Klasse, die die main Methode enthalten wird und somit ausführbar ist. Sie wird die Schnittstelle zur Außenwelt sein und die Ausgabe auf die Konsole tätigen.&lt;br /&gt;
&lt;br /&gt;
* Erstellt zunächst nur diese Klasse. Sobald ihr Klassen aus den späteren Aufgaben implementiert habt, könnt ihr in der &#039;&#039;main&#039;&#039;-Methode ihre Funktionalität testen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Positionen für alle Objekte ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse &#039;&#039;Position&#039;&#039; repräsentiert eine Position auf einem 2D-Spielfeld. Also karthesische 2 dimensionale Koordinaten, wie ihr sie von einem kariertem Papier kennt. Des Weiteren enthält Sie private die folgende Attribute:  &#039;&#039;x&#039;&#039; und &#039;&#039;y&#039;&#039;, gekapselt mit &#039;&#039;Gettern&#039;&#039; und &#039;&#039;Settern&#039;&#039;.&lt;br /&gt;
	&lt;br /&gt;
* Schreibt diese &#039;&#039;Getter&#039;&#039; und &#039;&#039;Setter&#039;&#039;&lt;br /&gt;
* Implementiert eine equals-Methode, die 2 Objekte vom Typ &#039;&#039;Position&#039;&#039; vergleicht.&lt;br /&gt;
* Testet nun eure &#039;&#039;equals&#039;&#039;-Methode in der &#039;&#039;main&#039;&#039;. (Tested sie solange bis sie funktioniert)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Repräsentation eines Gebietes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;GameTile&#039;&#039; wird unsere Klasse sein, die ein Tile, also ein Feld, im späteren Spiel repräsentiert. Alle weiteren Felder werden von ihr erben. So wird es später ein &#039;&#039;leeres Feld&#039;&#039; geben, eine &#039;&#039;Mauer&#039;&#039;, und Alles was euch noch einfällt.&lt;br /&gt;
&lt;br /&gt;
* Es enthält außerdem eine private Variable vom Typ &#039;&#039;Position&#039;&#039;, welche die Position des GameTiles auf dem Feld speichert.&lt;br /&gt;
	&lt;br /&gt;
* Implementiert eine &#039;&#039;toString&#039;&#039;-Methode, die jedem &#039;&#039;GameTile&#039;&#039; einen &#039;&#039;String&#039;&#039; mit Länge 1 zuordnet.&lt;br /&gt;
** Diese Methode wird von allen erbenden Klassen überschrieben werden&lt;br /&gt;
&lt;br /&gt;
* Schreibt nun einige Klassen die von &#039;&#039;GameTile&#039;&#039; erben&lt;br /&gt;
** Als Namen bietet sich &#039;&#039;WallTile&#039;&#039; und &#039;&#039;EmptyTile&#039;&#039;&lt;br /&gt;
** Die &#039;&#039;toString()&#039;&#039;-Methoden sollten dann sinvolle Zeichen zurückgeben, wie &amp;quot; &amp;quot; oder &amp;quot;#&amp;quot;.&lt;br /&gt;
		&lt;br /&gt;
* Testet auch hier euere &#039;&#039;toString&#039;&#039;-Methoden, in dem ihr euch einzelne Tiles erzeugt und diese ausgeben last&#039;&#039;&#039;&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
== Das GameField ==&lt;br /&gt;
Euer &#039;&#039;GameField&#039;&#039; ist eine zentrale Klasse in diesem Spiel, sie repräsentiert das Spielfeld als Ganzes und besteht aus mehreren &#039;&#039;GameTiles&#039;&#039;.&lt;br /&gt;
	&lt;br /&gt;
* Enthält eine private Variable für das Level (2D-Array aus GameTiles). &lt;br /&gt;
	&lt;br /&gt;
* Über den Konstruktor wird ein String dieser Form übergeben(ebenso wie die Breite des Spielfeldes): 		&lt;br /&gt;
        String s = &amp;quot;########&amp;quot; +&lt;br /&gt;
 		  &amp;quot;#      #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;#      #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;###    #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;#      #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;########&amp;quot;;&lt;br /&gt;
** Es soll mit einer Schleife der String Zeichen für Zeichen ausgelesen werden und aus jedem Zeichen ein neues &#039;&#039;GameTile&#039;&#039; (Wand oder leer) erzeugt werden. Diese &#039;&#039;GameTiles&#039;&#039; werden dann in dem Array gespeichert!&lt;br /&gt;
** Wie man Strings Zeichen für Zeichen ausliest, findet ihr in der API (java.lang.String).&lt;br /&gt;
** Implementiert ein toString, dieser soll folgenden String liefern: 	&lt;br /&gt;
 		 ######## &lt;br /&gt;
 		 #      #&lt;br /&gt;
 		 #      #&lt;br /&gt;
 		 ###    #&lt;br /&gt;
 		 #      #&lt;br /&gt;
  		 ########&lt;br /&gt;
** Tipp: &amp;quot;\n&amp;quot; steht in einem String für Zeilenumbruch.&lt;br /&gt;
** Es soll also aus dem &#039;&#039;GameField&#039;&#039;-Array wieder ein &#039;&#039;String&#039;&#039; generiert werden.&lt;br /&gt;
** Die &#039;&#039;toString&#039;&#039;-Methode von &#039;&#039;GameField&#039;&#039; soll die &#039;&#039;toString&#039;&#039;-Methode der &#039;&#039;GameTile&#039;&#039;s verwenden, um diese Ausgabe zu erzeugen.&lt;br /&gt;
* &#039;&#039;&#039;TESTET euer Programm mit verschiedenen Levels&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Eine Welt aus Feldern ==&lt;br /&gt;
	&lt;br /&gt;
Die Klasse &#039;&#039;World&#039;&#039; ist die Klasse, die Alles verbinden wird, Spieler, Items, Spielfeld etc.&lt;br /&gt;
&lt;br /&gt;
Bei Java funktioniert es bei grafischen Anwendungen etwa so: Man hat ein Objekt, das eine Leinwand repräsentiert (Canvas), man darf auf diesem Objekt Sachen malen. In einem Spiel wird das Objekt in jedem Frame leer gemacht, danach werden alle beteiligten grafischen Objekte (Spieler, Spielfeld, Gegner) nacheinander auf diese Leinwand gemalt. Letzendlich wird die Leinwand auf dem Bildschirm ausgegeben. Das hat den Vorteil, dass jede Klasse die darauf Zugriff bekommt, irgendetwas malen kann ohne zu wissen, was bereits darauf ist oder noch darauf kommt. (Jedes Objekt kümmert sich selbst um seine grafische Entsprechung.)&lt;br /&gt;
Das werden wir hier auch machen, allerdings mit einem String, da uns die Grundlagen für Grafisches fehlen.&lt;br /&gt;
	&lt;br /&gt;
* Zunächst einmal gibt es nur das &#039;&#039;GameField&#039;&#039;, was wir einbinden können (später den Spieler, etc.).&lt;br /&gt;
** So muss es auch ein Variable vom Typ &#039;&#039;GameField&#039;&#039; geben.	&lt;br /&gt;
* Die &#039;&#039;Main&#039;&#039; Klasse erzeugt ab jetzt nur noch eine Instanz von &#039;&#039;World&#039;&#039; nicht mehr von &#039;&#039;GameField&#039;&#039;. Denn &#039;&#039;World&#039;&#039; selbst soll sich das &#039;&#039;GameField&#039;&#039; erzeugen (im Konstruktor).&lt;br /&gt;
	&lt;br /&gt;
* Definiert eine &#039;&#039;canvas&#039;&#039; Variable, die für die grafische Repräsentierung des Spielfelds stehen wird.&lt;br /&gt;
**  &#039;&#039;canvas&#039;&#039; ist dabei ein String der der linear das GameField speichert.&lt;br /&gt;
BSP: Diese Feld&lt;br /&gt;
 ###&lt;br /&gt;
 # ##&lt;br /&gt;
 #@ #&lt;br /&gt;
 ####&lt;br /&gt;
Entspricht dann (für eine Breite von 4)&lt;br /&gt;
 ### # ###@ #####&lt;br /&gt;
&lt;br /&gt;
Unter der Annahme das das Feld n Einheiten breit ist, kann man berechnen auf welchem Index des Strings ein Tile liegen soll. Beispiel: ein Tile hat die Koordinaten (4,7) und das Feld ist 16 Einheiten breit, dann berechnet sich der Index aus i = 4 + 7*16, also i = x + y*w.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zeichnen der Welt ==&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;World&#039;&#039; sollte sich nun selbst zeichnen können. Diese Methode sollte &#039;&#039;draw&#039;&#039; heißen. SIe muss  die &#039;&#039;toString&#039;&#039;-Methode des GameFields aufrufen. Diese Methode liefert einen linearisierte Variante des Feldes zurück und diese &#039;&#039;draw&#039;&#039;-Methode müsste dann nur die linearisierte Variante in Abhängigkeit von der Breite der &#039;&#039;Welt&#039;&#039;, 2D ausgeben.&lt;br /&gt;
&lt;br /&gt;
Dazu ein Beispiel: Angenommen &#039;&#039;GameField.toString()&#039;&#039; liefert&lt;br /&gt;
 #### ## ##@####&lt;br /&gt;
Und unter der Annahme die Welt sei 3 Einheiten breit, dann sollte die Ausgabe so aussehen:&lt;br /&gt;
 ###&lt;br /&gt;
 # #&lt;br /&gt;
 # #&lt;br /&gt;
 #@#&lt;br /&gt;
 ###&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039; TESTET nun eure Grafik Ausgabe anhand verschiedener Level&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schönheit der Ausgabe im GameMain ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse GameMain enthält als einzige eine Instanz der Klasse World und kann somit das Spielfeld zeichnen. 	&lt;br /&gt;
Sofern ihr beim Testen versucht habt, das Spielfeld mehrmals auf die Konsole auszugeben, seht ihr, dass das alte Spielfeld  noch immer sichtbar ist über dem neuen. Das sieht irgendwie blöd aus.&lt;br /&gt;
	  &lt;br /&gt;
* Zählt nach, wieviele Zeilen euere Konsole hat. 	&lt;br /&gt;
* Bevor man das Level ausgibt, kann man soviele leere Zeilen ausgeben lassen, dass das alte Level nicht mehr sichtbar ist. &#039;&#039;System.out.println(&amp;quot;&amp;quot;);&#039;&#039; gibt eine leere Zeile aus. &lt;br /&gt;
* &#039;&#039;&#039;TESTEN ob das klappt und gut aussieht&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Der Spieler ==&lt;br /&gt;
&lt;br /&gt;
Der Spieler wird die Möglichkeit haben, auf dem Spielfeld rumzulaufen und je nachdem, wie weit ihr kommt, noch viel mehr. Perfekt wäre es wenn dieser Spieler auch von &#039;&#039;GameField&#039;&#039; erbt, damit ihr die Funktionalitäten eines Feldes weiter benutzen könnt (Position, etc.).&lt;br /&gt;
	  		  &lt;br /&gt;
* Der Spieler wird durch ein &amp;quot;@&amp;quot; auf dem &#039;&#039;GameField&#039;&#039; repräsentiert.&lt;br /&gt;
* Schreibt eine &#039;&#039;draw&#039;&#039;-Methode, die einen String bekommt und anhand der obigen Formel zur Indexberechnung und der Position des Spielers den übergebenen String um den Spieler selber ergänzt.&lt;br /&gt;
&lt;br /&gt;
Wenn wir das ganze als Ausgabe betrachten, könnte dies der Eingabe-String sein:&lt;br /&gt;
 ###&lt;br /&gt;
 # #&lt;br /&gt;
 # #####&lt;br /&gt;
 #     #&lt;br /&gt;
 #######&lt;br /&gt;
&lt;br /&gt;
oder linear:&lt;br /&gt;
 ###    # #    # ######     ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn der Player jetzt eine Position von (5,4) hat, und die Welt eine Breite von 7 hat, so muss der Index 5+4*7=33 um den Spieler ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren wollen wir auch den Spieler bewegen können, also muss er folgende Funktionalitäten besitzen:&lt;br /&gt;
* public void moveLeft() &lt;br /&gt;
* public void moveRight()&lt;br /&gt;
* public void moveUp()&lt;br /&gt;
* public void moveDown()&lt;br /&gt;
** Welche einfach nur die X- oder Y-Position um 1 erhöhen oder verringern.&lt;br /&gt;
&lt;br /&gt;
	  &lt;br /&gt;
&lt;br /&gt;
== Der Spieler in der Welt ==&lt;br /&gt;
&lt;br /&gt;
* Im Konstruktor soll nun auch eine Spielerinstanz erzeugt werden und zunächst an einer bel. Position gesetzt werden.&lt;br /&gt;
	  &lt;br /&gt;
* Erweitert die draw-Methode so, dass nun auch der Spieler angezeigt wird. &lt;br /&gt;
	&lt;br /&gt;
* &#039;&#039;&#039;TESTET ob das funktioniert. Was passiert eigentlich, wenn man den Spieler an der Position  -1 | -1 setzt ? &#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interaktive Welt ==&lt;br /&gt;
&lt;br /&gt;
Nun ist es an der Zeit eurem Spieler das Bewegen beizubringen. Dazu solltet ihr die &#039;&#039;World&#039;&#039;-Klasse überarbeiten.&lt;br /&gt;
&lt;br /&gt;
* Implementiert eine Methode &#039;&#039;public boolean onKeyPressed( String key ){ ... }&#039;&#039;. Sie wird dann aufgerufen werden, wenn eine Taste gedrückt wurde und soll &#039;&#039;true&#039;&#039; zurückgeben, wenn der Spieler sich bewegt hat, ansonsten &#039;&#039;false&#039;&#039;. 	  &lt;br /&gt;
	  &lt;br /&gt;
* Zunächst müssen wir in &#039;&#039;onKeyPressed&#039;&#039; prüfen, ob key einer der Strings &amp;quot;a&amp;quot; (links) , &amp;quot;s&amp;quot;(unten) , &amp;quot;d&amp;quot;(rechts) , &amp;quot;w&amp;quot;(oben) ist (&#039;&#039;equals&#039;&#039; benutzen!). Falls ja, wurde schonmal eine gültige Taste gedrückt. Falls nein, können wir &#039;&#039;false&#039;&#039; zurückliefern.&lt;br /&gt;
	&lt;br /&gt;
* Wir müssen als nächstes prüfen, ob der Spieler durch die Bewegung nicht in eine Mauer reinläuft, dazu müssen wir die Spielerposition vergleichen und schauen, in welchem Tile er stehen würde, wenn wir rechts/links/hoch/runter liefen. Sofern dieses Tile leer ist, dürfen wir in diese Richtung laufen. Denkt dabei an die Getter der &#039;&#039;GameField&#039;&#039;-Klasse&lt;br /&gt;
	  &lt;br /&gt;
* Nun wo wir das alles geprüft haben, bewegen wir den Spieler mit einer der vier Bewegungsfunktionen und geben true zurück.&lt;br /&gt;
		  &lt;br /&gt;
* &#039;&#039;&#039;TESTET unbedingt manuell diese Methode, sie muss korrekt funktionieren! &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Final Touch ==&lt;br /&gt;
&lt;br /&gt;
Jetzt müsst ihr nur noch eine passende Main-Schleife schreiben, und ihr habt eure erste Sandbox zum weiteren Experimentieren fertig. &lt;br /&gt;
&lt;br /&gt;
* Für die Eingabe von der Konsole benutzt ihr am Besten die &#039;&#039;Terminal&#039;&#039;-Klasse.&lt;br /&gt;
&lt;br /&gt;
* Es muss geprueft werden ob es sich um ein gueltiges Zeichen handelt und ob es eines der Zeichen &#039;&#039;a,s,w,d&#039;&#039; ist.&lt;br /&gt;
&lt;br /&gt;
* Das eingegebene Zeichen soll dann an die &#039;&#039;World&#039;&#039;-Klasse übergeben werden und diese soll den Spieler bewegen, falls dies möglich ist!&lt;br /&gt;
		     	 &lt;br /&gt;
Das ist das Basisgerüst für ein Spiel, ihr könnt nun weitere Sachen einfügen wie z.B. Items, die man einsammeln kann. Wie könnte man das machen? Was hat Liv Tyler in diesem Spiel für eine Aufgabe?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 pwd&lt;br /&gt;
 cd Desktop/javakurs10/DOOM/&lt;br /&gt;
 TERM_ATTRS=&amp;quot;-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -tostop -echoprt -echoctl -echoke&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
 /bin/stty $TERM_ATTRS &lt;br /&gt;
 java -cp . GameMain&lt;br /&gt;
 &lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java_Aufgaben]]&lt;/div&gt;</summary>
		<author><name>130.149.17.45</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Doom&amp;diff=13717</id>
		<title>Javakurs/Übungsaufgaben/Doom</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Doom&amp;diff=13717"/>
		<updated>2010-03-25T16:16:21Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.45: /* Kommentare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ASCII-DOOM&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
In Ascii-Doom geht es darum, ein kleines [http://de.wikipedia.org/wiki/Rogue-like rogue-like] Spiel zu implementieren. &lt;br /&gt;
&lt;br /&gt;
D.h. es wird möglich sein mittels [http://en.wikipedia.org/wiki/ASCII_art ASCII-Art], mit einer Spielfigur auf dem Spielfeld zu laufen, später könnt ihr auch&lt;br /&gt;
Items, Waffen und [http://imblog.aufeminin.com/blog/D20060112/71199_224296211_liv_tyler_H210646_L.jpg Liv Tyler] einbauen! &lt;br /&gt;
&lt;br /&gt;
Wir werden Schritt für Schritt das Spiel implementieren. Wenn ihr verloren geht, keine Angst, wir können euch helfen ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Die Klasse &#039;&#039;GameMain&#039;&#039; - Der Anfang ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse &#039;&#039;GameMain&#039;&#039; ist die Klasse, die die main Methode enthalten wird und somit ausführbar ist. Sie wird die Schnittstelle zur Außenwelt sein und die Ausgabe auf die Konsole tätigen.&lt;br /&gt;
&lt;br /&gt;
* Erstellt zunächst nur diese Klasse. Sobald ihr Klassen aus den späteren Aufgaben implementiert habt, könnt ihr in der &#039;&#039;main&#039;&#039;-Methode ihre Funktionalität testen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Positionen für alle Objekte ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse &#039;&#039;Position&#039;&#039; repräsentiert eine Position auf einem 2D-Spielfeld. Also karthesische 2 dimensionale Koordinaten, wie ihr sie von einem kariertem Papier kennt. Des Weiteren enthält Sie private die folgende Attribute:  &#039;&#039;x&#039;&#039; und &#039;&#039;y&#039;&#039;, gekapselt mit &#039;&#039;Gettern&#039;&#039; und &#039;&#039;Settern&#039;&#039;.&lt;br /&gt;
	&lt;br /&gt;
* Schreibt diese &#039;&#039;Getter&#039;&#039; und &#039;&#039;Setter&#039;&#039;&lt;br /&gt;
* Implementiert eine equals-Methode, die 2 Objekte vom Typ &#039;&#039;Position&#039;&#039; vergleicht.&lt;br /&gt;
* Testet nun eure &#039;&#039;equals&#039;&#039;-Methode in der &#039;&#039;main&#039;&#039;. (Tested sie solange bis sie funktioniert)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Repräsentation eines Gebietes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;GameTile&#039;&#039; wird unsere Klasse sein, die ein Tile, also ein Feld, im späteren Spiel repräsentiert. Alle weiteren Felder werden von ihr erben. So wird es später ein &#039;&#039;leeres Feld&#039;&#039; geben, eine &#039;&#039;Mauer&#039;&#039;, und Alles was euch noch einfällt.&lt;br /&gt;
&lt;br /&gt;
* Es enthält außerdem eine private Variable vom Typ &#039;&#039;Position&#039;&#039;, welche die Position des GameTiles auf dem Feld speichert.&lt;br /&gt;
	&lt;br /&gt;
* Implementiert eine &#039;&#039;toString&#039;&#039;-Methode, die jedem &#039;&#039;GameTile&#039;&#039; einen &#039;&#039;String&#039;&#039; mit Länge 1 zuordnet.&lt;br /&gt;
** Diese Methode wird von allen erbenden Klassen überschrieben werden&lt;br /&gt;
&lt;br /&gt;
* Schreibt nun einige Klassen die von &#039;&#039;GameTile&#039;&#039; erben&lt;br /&gt;
** Als Namen bietet sich &#039;&#039;WallTile&#039;&#039; und &#039;&#039;EmptyTile&#039;&#039;&lt;br /&gt;
** Die &#039;&#039;toString()&#039;&#039;-Methoden sollten dann sinvolle Zeichen zurückgeben, wie &amp;quot; &amp;quot; oder &amp;quot;#&amp;quot;.&lt;br /&gt;
		&lt;br /&gt;
* Testet auch hier euere &#039;&#039;toString&#039;&#039;-Methoden, in dem ihr euch einzelne Tiles erzeugt und diese ausgeben last&#039;&#039;&#039;&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
== Das GameField ==&lt;br /&gt;
Euer &#039;&#039;GameField&#039;&#039; ist eine zentrale Klasse in diesem Spiel, sie repräsentiert das Spielfeld als Ganzes und besteht aus mehreren &#039;&#039;GameTiles&#039;&#039;.&lt;br /&gt;
	&lt;br /&gt;
* Enthält eine private Variable für das Level (2D-Array aus GameTiles). &lt;br /&gt;
	&lt;br /&gt;
* Über den Konstruktor wird ein String dieser Form übergeben(ebenso wie die Breite des Spielfeldes): 		&lt;br /&gt;
        String s = &amp;quot;########&amp;quot; +&lt;br /&gt;
 		  &amp;quot;#      #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;#      #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;###    #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;#      #&amp;quot; +&lt;br /&gt;
 		  &amp;quot;########&amp;quot;;&lt;br /&gt;
** Es soll mit einer Schleife der String Zeichen für Zeichen ausgelesen werden und aus jedem Zeichen ein neues &#039;&#039;GameTile&#039;&#039; (Wand oder leer) erzeugt werden. Diese &#039;&#039;GameTiles&#039;&#039; werden dann in dem Array gespeichert!&lt;br /&gt;
** Wie man Strings Zeichen für Zeichen ausliest, findet ihr in der API (java.lang.String).&lt;br /&gt;
** Implementiert ein toString, dieser soll folgenden String liefern: 	&lt;br /&gt;
 		 ######## &lt;br /&gt;
 		 #      #&lt;br /&gt;
 		 #      #&lt;br /&gt;
 		 ###    #&lt;br /&gt;
 		 #      #&lt;br /&gt;
  		 ########&lt;br /&gt;
** Tipp: &amp;quot;\n&amp;quot; steht in einem String für Zeilenumbruch.&lt;br /&gt;
** Es soll also aus dem &#039;&#039;GameField&#039;&#039;-Array wieder ein &#039;&#039;String&#039;&#039; generiert werden.&lt;br /&gt;
** Die &#039;&#039;toString&#039;&#039;-Methode von &#039;&#039;GameField&#039;&#039; soll die &#039;&#039;toString&#039;&#039;-Methode der &#039;&#039;GameTile&#039;&#039;s verwenden, um diese Ausgabe zu erzeugen.&lt;br /&gt;
* &#039;&#039;&#039;TESTET euer Programm mit verschiedenen Levels&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Eine Welt aus Feldern ==&lt;br /&gt;
	&lt;br /&gt;
Die Klasse &#039;&#039;World&#039;&#039; ist die Klasse, die Alles verbinden wird, Spieler, Items, Spielfeld etc.&lt;br /&gt;
&lt;br /&gt;
Bei Java funktioniert es bei grafischen Anwendungen etwa so: Man hat ein Objekt, das eine Leinwand repräsentiert (Canvas), man darf auf diesem Objekt Sachen malen. In einem Spiel wird das Objekt in jedem Frame leer gemacht, danach werden alle beteiligten grafischen Objekte (Spieler, Spielfeld, Gegner) nacheinander auf diese Leinwand gemalt. Letzendlich wird die Leinwand auf dem Bildschirm ausgegeben. Das hat den Vorteil, dass jede Klasse die darauf Zugriff bekommt, irgendetwas malen kann ohne zu wissen, was bereits darauf ist oder noch darauf kommt. (Jedes Objekt kümmert sich selbst um seine grafische Entsprechung.)&lt;br /&gt;
Das werden wir hier auch machen, allerdings mit einem String, da uns die Grundlagen für Grafisches fehlen.&lt;br /&gt;
	&lt;br /&gt;
* Zunächst einmal gibt es nur das &#039;&#039;GameField&#039;&#039;, was wir einbinden können (später den Spieler, etc.).&lt;br /&gt;
** So muss es auch ein Variable vom Typ &#039;&#039;GameField&#039;&#039; geben.	&lt;br /&gt;
* Die &#039;&#039;Main&#039;&#039; Klasse erzeugt ab jetzt nur noch eine Instanz von &#039;&#039;World&#039;&#039; nicht mehr von &#039;&#039;GameField&#039;&#039;. Denn &#039;&#039;World&#039;&#039; selbst soll sich das &#039;&#039;GameField&#039;&#039; erzeugen (im Konstruktor).&lt;br /&gt;
	&lt;br /&gt;
* Definiert eine &#039;&#039;canvas&#039;&#039; Variable, die für die grafische Repräsentierung des Spielfelds stehen wird.&lt;br /&gt;
**  &#039;&#039;canvas&#039;&#039; ist dabei ein String der der linear das GameField speichert.&lt;br /&gt;
BSP: Diese Feld&lt;br /&gt;
 ###&lt;br /&gt;
 # ##&lt;br /&gt;
 #@ #&lt;br /&gt;
 ####&lt;br /&gt;
Entspricht dann (für eine Breite von 4)&lt;br /&gt;
 ### # ###@ #####&lt;br /&gt;
&lt;br /&gt;
Unter der Annahme das das Feld n Einheiten breit ist, kann man berechnen auf welchem Index des Strings ein Tile liegen soll. Beispiel: ein Tile hat die Koordinaten (4,7) und das Feld ist 16 Einheiten breit, dann berechnet sich der Index aus i = 4 + 7*16, also i = x + y*w.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zeichnen der Welt ==&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;World&#039;&#039; sollte sich nun selbst zeichnen können. Diese Methode sollte &#039;&#039;draw&#039;&#039; heißen. SIe muss  die &#039;&#039;toString&#039;&#039;-Methode des GameFields aufrufen. Diese Methode liefert einen linearisierte Variante des Feldes zurück und diese &#039;&#039;draw&#039;&#039;-Methode müsste dann nur die linearisierte Variante in Abhängigkeit von der Breite der &#039;&#039;Welt&#039;&#039;, 2D ausgeben.&lt;br /&gt;
&lt;br /&gt;
Dazu ein Beispiel: Angenommen &#039;&#039;GameField.toString()&#039;&#039; liefert&lt;br /&gt;
 #### ## ##@####&lt;br /&gt;
Und unter der Annahme die Welt sei 3 Einheiten breit, dann sollte die Ausgabe so aussehen:&lt;br /&gt;
 ###&lt;br /&gt;
 # #&lt;br /&gt;
 # #&lt;br /&gt;
 #@#&lt;br /&gt;
 ###&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039; TESTET nun eure Grafik Ausgabe anhand verschiedener Level&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schönheit der Ausgabe im GameMain ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse GameMain enthält als einzige eine Instanz der Klasse World und kann somit das Spielfeld zeichnen. 	&lt;br /&gt;
Sofern ihr beim Testen versucht habt, das Spielfeld mehrmals auf die Konsole auszugeben, seht ihr, dass das alte Spielfeld  noch immer sichtbar ist über dem neuen. Das sieht irgendwie blöd aus.&lt;br /&gt;
	  &lt;br /&gt;
* Zählt nach, wieviele Zeilen euere Konsole hat. 	&lt;br /&gt;
* Bevor man das Level ausgibt, kann man soviele leere Zeilen ausgeben lassen, dass das alte Level nicht mehr sichtbar ist. &#039;&#039;System.out.println(&amp;quot;&amp;quot;);&#039;&#039; gibt eine leere Zeile aus. &lt;br /&gt;
* &#039;&#039;&#039;TESTEN ob das klappt und gut aussieht&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Der Spieler ==&lt;br /&gt;
&lt;br /&gt;
Der Spieler wird die Möglichkeit haben, auf dem Spielfeld rumzulaufen und je nachdem, wie weit ihr kommt, noch viel mehr. Perfekt wäre es wenn dieser Spieler auch von &#039;&#039;GameField&#039;&#039; erbt, damit ihr die Funktionalitäten eines Feldes weiter benutzen könnt (Position, etc.).&lt;br /&gt;
	  		  &lt;br /&gt;
* Der Spieler wird durch ein &amp;quot;@&amp;quot; auf dem &#039;&#039;GameField&#039;&#039; repräsentiert.&lt;br /&gt;
* Schreibt eine &#039;&#039;draw&#039;&#039;-Methode, die einen String bekommt und anhand der obigen Formel zur Indexberechnung und der Position des Spielers den übergebenen String um den Spieler selber ergänzt.&lt;br /&gt;
&lt;br /&gt;
Wenn wir das ganze als Ausgabe betrachten, könnte dies der Eingabe-String sein:&lt;br /&gt;
 ###&lt;br /&gt;
 # #&lt;br /&gt;
 # #####&lt;br /&gt;
 #     #&lt;br /&gt;
 #######&lt;br /&gt;
&lt;br /&gt;
oder linear:&lt;br /&gt;
 ###    # #    # ######     ########&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn der Player jetzt eine Position von (5,4) hat, und die Welt eine Breite von 7 hat, so muss der Index 5+4*7=33 um den Spieler ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren wollen wir auch den Spieler bewegen können, also muss er folgende Funktionalitäten besitzen:&lt;br /&gt;
* public void moveLeft() &lt;br /&gt;
* public void moveRight()&lt;br /&gt;
* public void moveUp()&lt;br /&gt;
* public void moveDown()&lt;br /&gt;
** Welche einfach nur die X- oder Y-Position um 1 erhöhen oder verringern.&lt;br /&gt;
&lt;br /&gt;
	  &lt;br /&gt;
&lt;br /&gt;
== Der Spieler in der Welt ==&lt;br /&gt;
&lt;br /&gt;
* Im Konstruktor soll nun auch eine Spielerinstanz erzeugt werden und zunächst an einer bel. Position gesetzt werden.&lt;br /&gt;
	  &lt;br /&gt;
* Erweitert die draw-Methode so, dass nun auch der Spieler angezeigt wird. &lt;br /&gt;
	&lt;br /&gt;
* &#039;&#039;&#039;TESTET ob das funktioniert. Was passiert eigentlich, wenn man den Spieler an der Position  -1 | -1 setzt ? &#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interaktive Welt ==&lt;br /&gt;
&lt;br /&gt;
Nun ist es an der Zeit eurem Spieler das Bewegen beizubringen. Dazu solltet ihr die &#039;&#039;World&#039;&#039;-Klasse überarbeiten.&lt;br /&gt;
&lt;br /&gt;
* Implementiert eine Methode &#039;&#039;public boolean onKeyPressed( String key ){ ... }&#039;&#039;. Sie wird dann aufgerufen werden, wenn eine Taste gedrückt wurde und soll &#039;&#039;true&#039;&#039; zurückgeben, wenn der Spieler sich bewegt hat, ansonsten &#039;&#039;false&#039;&#039;. 	  &lt;br /&gt;
	  &lt;br /&gt;
* Zunächst müssen wir in &#039;&#039;onKeyPressed&#039;&#039; prüfen, ob key einer der Strings &amp;quot;a&amp;quot; (links) , &amp;quot;s&amp;quot;(unten) , &amp;quot;d&amp;quot;(rechts) , &amp;quot;w&amp;quot;(oben) ist (&#039;&#039;equals&#039;&#039; benutzen!). Falls ja, wurde schonmal eine gültige Taste gedrückt. Falls nein, können wir &#039;&#039;false&#039;&#039; zurückliefern.&lt;br /&gt;
	&lt;br /&gt;
* Wir müssen als nächstes prüfen, ob der Spieler durch die Bewegung nicht in eine Mauer reinläuft, dazu müssen wir die Spielerposition vergleichen und schauen, in welchem Tile er stehen würde, wenn wir rechts/links/hoch/runter liefen. Sofern dieses Tile leer ist, dürfen wir in diese Richtung laufen. Denkt dabei an die Getter der &#039;&#039;GameField&#039;&#039;-Klasse&lt;br /&gt;
	  &lt;br /&gt;
* Nun wo wir das alles geprüft haben, bewegen wir den Spieler mit einer der vier Bewegungsfunktionen und geben true zurück.&lt;br /&gt;
		  &lt;br /&gt;
* &#039;&#039;&#039;TESTET unbedingt manuell diese Methode, sie muss korrekt funktionieren! &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Final Touch ==&lt;br /&gt;
&lt;br /&gt;
Jetzt müsst ihr nur noch eine passende Main-Schleife schreiben, und ihr habt eure erste Sandbox zum weiteren Experimentieren fertig. &lt;br /&gt;
&lt;br /&gt;
* Für die Eingabe von der Konsole benutzt ihr am Besten die &#039;&#039;Terminal&#039;&#039;-Klasse.&lt;br /&gt;
&lt;br /&gt;
* Es muss geprueft werden ob es sich um ein gueltiges Zeichen handelt und ob es eines der Zeichen &#039;&#039;a,s,w,d&#039;&#039; ist.&lt;br /&gt;
&lt;br /&gt;
* Das eingegebene Zeichen soll dann an die &#039;&#039;World&#039;&#039;-Klasse übergeben werden und diese soll den Spieler bewegen, falls dies möglich ist!&lt;br /&gt;
		     	 &lt;br /&gt;
Das ist das Basisgerüst für ein Spiel, ihr könnt nun weitere Sachen einfügen wie z.B. Items, die man einsammeln kann. Wie könnte man das machen? Was hat Liv Tyler in diesem Spiel für eine Aufgabe?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
pwd&lt;br /&gt;
cd Desktop/javakurs10/DOOM/&lt;br /&gt;
TERM_ATTRS=&amp;quot;-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -tostop -echoprt -echoctl -echoke&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/bin/stty $TERM_ATTRS &lt;br /&gt;
java -cp . GameMain&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java_Aufgaben]]&lt;/div&gt;</summary>
		<author><name>130.149.17.45</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Eclipsekurs_2008/Tag_2&amp;diff=11382</id>
		<title>Eclipsekurs 2008/Tag 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Eclipsekurs_2008/Tag_2&amp;diff=11382"/>
		<updated>2008-11-15T12:23:22Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.45: /* Aufgabe: Importieren und Exportieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Aufgabe: Grundlagen ==&lt;br /&gt;
* Falls du noch etwas Übung in Java brauchst, dann besuche den [[Javakurs2008/Übungspool | Übungspool des Javakurses 2008]] und mache einfach von dort noch einige Aufgaben.&lt;br /&gt;
* Die folgenden Aufgaben beschäftigen sich weniger mit der Programmierung von Java. Viel mehr stehen die Features von Eclipse im Vordergrund.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Aufgabe: Importieren und Exportieren ==&lt;br /&gt;
* Lade dir Marios [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2008/tutorial/Visualizer.jar Framework für Formen] herunter&lt;br /&gt;
* Informiere dich über den Allgemeinen [[Eclipsekurs_2008/Tag2/VisualizerFramework | Aufbau des Frameworks]]&lt;br /&gt;
* Erstelle ein neues Projekt&lt;br /&gt;
* Lade das JAR in das Projekt (BuildPath -&amp;gt; Add Jars)&lt;br /&gt;
* Schreibe eine &#039;&#039;&#039;main&#039;&#039;&#039; Methode, die den Visualizer erstellt (&#039;&#039;&#039;addVisualElement()&#039;&#039;&#039;) und anzeigt (&#039;&#039;&#039;visualize()&#039;&#039;&#039;)&lt;br /&gt;
* Wie wäre es, wenn du nach dem [[WhishfullThinking | WhishfullThinking-Prinzip]] versuchst weitere VisualElements zu schreiben? Beispielsweise ein Rechteck oder ein Dreieck? Oder gar eine bunte Form?&lt;br /&gt;
** Gibt es eine Möglichkeit, diese mit anderen Studierenden auszutauschen?&lt;br /&gt;
** Wenn ja, dann tue dies doch einfach ...&lt;br /&gt;
&lt;br /&gt;
== Subversion Repository ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Folgende Aufgabe kann leider nur von Benutzern mit einem CS-Account bearbeitet werden! &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wir haben für dich und die anderen Teilnehmer ein Subversion-Repository im CS-Netz angelegt, das ihr für die folgenden Aufgaben nutzen könnt. &lt;br /&gt;
&lt;br /&gt;
* Check dir ein eigenes Verzeichnis davon aus und füge deine Lösungen hinzu.&lt;br /&gt;
* Stell sicher, dass dein eclipse mit dem [http://subclipse.tigris.org/ Subclipse-Plugin] versehen ist. Wenn du eclipse im cs-Netz nutzt, fügst du einfach die &amp;quot;Repository Location&amp;quot; wie auf dem Beipackzettel beschrieben hinzu. Falls nicht, füge es über &amp;quot;Help-&amp;gt;Software Updates&amp;quot; hinzu.&lt;br /&gt;
* Erstelle ein neues Java-SVN-Projekt. (RMB auf PackageExplorer -&amp;gt; new Project -&amp;gt; SVN)&lt;br /&gt;
 svn+ssh://theclaw@cs.tu-berlin.de/home/theclaw/eclipse2008/svn/[NUMMER]&lt;br /&gt;
* Gebe als Repository Location den obigen Text ein&lt;br /&gt;
* Lass dir von einem Tutor eine Nummer zwischen 0 und 9 geben&lt;br /&gt;
* Trage diese als [NUMMER] ein.&lt;br /&gt;
* gebe deinen CS Benutzernamen und dein CS Passwort ein&lt;br /&gt;
* klicke danach auf &#039;&#039;&#039;Next&#039;&#039;&#039; - noch nicht auf &#039;&#039;&#039;Finish&#039;&#039;&#039;:&lt;br /&gt;
* Folge den weiteren Schritten des Dialoges, und bearbeite die Aufgabe, die im SVN als README.txt gestellt wurde&lt;br /&gt;
* Schau dir auch die CommitKommentare (LogMessages) an, evtl.findest du weitere Aufgaben ....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Aufgabe: Refactoring ==&lt;br /&gt;
&lt;br /&gt;
Herzlichen Glückwunsch, du wurdest bei der &amp;quot;Luft- und Bodenverkehr AG&amp;quot; eingestellt! Deine erste Aufgabe als neuer Entwickler der firmeneigenen Software ist es, diese in einen wartbaren und besser verständlichen Zustand zu bringen. Dein Vorgänger, ein Java-Crack, der auf den Programmier-Editor HackPad schwört, musste aufgrund geringer Produktivität leider von dieser Aufgabe abgezogen werden. Nun darfst du dich mit Eclipse daran versuchen!&lt;br /&gt;
&lt;br /&gt;
* Importiere die folgende Zip-Datei in ein leeres Projekt [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2007/Verkehr.zip Verkehr.zip].&lt;br /&gt;
* Zu deinem Schrecken findest du ein Chaos vor. Bringe zuerst die Klassen in eine sinnvolle Ordnung, indem du sie per Drag-and-Drop in die richtigen Java-Packages einordnest.&lt;br /&gt;
* Dir wird aufgefallen sein, dass einige Klassen sehr seltsame und/oder falsch geschriebene Namen haben. Gib diesen Klassen bessere Namen. Benutze dafür die Refactoring-Funktion &#039;&#039;Rename&#039;&#039;.&lt;br /&gt;
* Beim Durchsehen der Klassen ist dir bestimmt folgendes aufgefallen:&lt;br /&gt;
** Die Klassen mit den (ehemaligen) Namen &#039;&#039;Farrad&#039;&#039; und &#039;&#039;MeinAuto&#039;&#039; enthalten beide Code, der die Anzahl der Räder zurückgibt. Benutze die Refactoring-Funktion &#039;&#039;Pull Up&#039;&#039;, so dass in einem Schritt der identische Code von &#039;&#039;anzahl()&#039;&#039; aus beiden Klassen entfernt und in die gemeinsame Superklasse verschoben wird. Führt Eclipse diese Aktion aus, ohne sich zu beschweren? Falls nicht, nicht nutze das von Eclipse erzeugte Preview um das Problem zu erkennen. Dann gehe zurück im Refactoring-Dialog und versuche das Problem zu beseitigen.&lt;br /&gt;
*** &#039;&#039;Tipp:&#039;&#039; Es hat mit dem Attribut &amp;quot;anzahlRaeder&amp;quot; zu tun!&lt;br /&gt;
** Alle Klassen, die ein Verkehrsmittel modellieren (Auto, Fahrrad, Flugzeug, ...), haben Funktionen um die Farbe zurückzuliefern. Verschiebe diese zusammen mit dem Attribut &amp;quot;farbe&amp;quot; in die gemeinsame Superklasse.&lt;br /&gt;
** In der (ehemaligen) Klasse &#039;&#039;MeinAuto&#039;&#039; kommt Code mehrfach vor. Benutze die Refactoring-Funktion &#039;&#039;Extract Method&#039;&#039; um dieses Problem zu beseitigen.&lt;br /&gt;
** Während du den soeben extrahierten Code durchliest, fällt dir auf, dass er viel verständlicher wäre, wenn die Variablen sprechende Namen hätten. Nutze erneut die Refactoring-Funktion &#039;&#039;Rename&#039;&#039; um dies zu erreichen.&lt;br /&gt;
&lt;br /&gt;
==Aufgabe: Standardnormalverteilung (einfach)==&lt;br /&gt;
* Lade die Datei [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2006/StandardNormalVerteilung.java StandardNormalVerteilung.java] herunter und importiere sie in das Projekt &amp;quot;Einstein&amp;quot;.&lt;br /&gt;
* Setze einen Breakpoint in der main-Methode (siehe TODO) und starte das Programm im Debug-Modus.&lt;br /&gt;
* Benutze die &#039;&#039;&#039;Step into/Step over/Run to return/Resume&#039;&#039;&#039; Buttons im Debugger, um Folgendes herauszufinden:&lt;br /&gt;
** Im ersten Aufruf von &#039;&#039;normalVerteilung()&#039;&#039;:&lt;br /&gt;
*** Welcher Wert wird &#039;&#039;xi&#039;&#039;  im 2. Durchlauf der 1. Schleife zugewiesen?&lt;br /&gt;
*** Welcher Wert wird &#039;&#039;summe&#039;&#039; im 2. Durchlauf der 2. Schleife zugewiesen? &lt;br /&gt;
*** &#039;&#039;Tipp:&#039;&#039; Um letzteres herauszufinden kannst du &#039;&#039;zur Laufzeit des Programms&#039;&#039; noch einen Breakpoint einfügen!&lt;br /&gt;
** Im zweiten Aufruf von &#039;&#039;normalVerteilung()&#039;&#039;:&lt;br /&gt;
*** Welchen Wert hat &#039;&#039;summe&#039;&#039; am Ende des Methodenaufrufs? Ermittle dies &#039;&#039;&#039;innerhalb&#039;&#039;&#039; des Aufrufs von &#039;&#039;normalVerteilung()&#039;&#039;!&lt;br /&gt;
*** &#039;&#039;Tipp:&#039;&#039; Auch hier kannst du zur Laufzeit wieder Breakpoints einfügen und entfernen!&lt;br /&gt;
** Lass das Programm bis zum Ende laufen (es erscheint eine Ausgabe auf der Konsole).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Aufgabe: Micki Maus im Labyrinth (etwas schwerer)==&lt;br /&gt;
&lt;br /&gt;
* Bei dieser Aufgabe geht es auch darum, den Eclipse Debugger ein wenig kennenzulernen.&lt;br /&gt;
* Lade dir die Aufgabe unter [http://docs.freitagsrunde.org/eclipsekurs2008/MickiMaus.jar MickiMaus.jar] herunter und importiere diese wie in Aufgabe 1.&lt;br /&gt;
&lt;br /&gt;
Micki die Maus, befindet sich in einem Labyrinth und muss den Käse finden. Du sollst nun &lt;br /&gt;
ihren Weg mit Hilfe des Debuggers verfolgen. Setze dazu einen Breakpoint auf den Methodenaufruf von &#039;&#039;&#039;Mouse.dfs()&#039;&#039;&#039;,&lt;br /&gt;
also in Zeile 30 und in Zeile 40 am &#039;&#039;&#039;return&#039;&#039;&#039;. Starte den Debugger, indem du auf das Käfer-Symbol&lt;br /&gt;
klickst. Um zu sehen, welchen Weg Micki wählt, schau dir in der &#039;&#039;&#039;Variables View&#039;&#039;&#039; die Variable &#039;&#039;&#039;this.currentNode an&#039;&#039;&#039;. Micki sollte auf den Koordinaten (1,1) stehen. Nun könnt ihr mit der Funktion &#039;&#039;&#039;Resume&#039;&#039;&#039; einen Schritt weitergehen. (Es ist normal, dass sich Micki beim ersten Schritt nicht bewegt :-). Probiert auch mal die anderen Debugger-Funktionen &#039;&#039;&#039;Step into&#039;&#039;&#039;, &#039;&#039;&#039;Step over&#039;&#039;&#039; und &#039;&#039;&#039;Step return&#039;&#039;&#039; aus. Am Ende sollte Micki den Käse gefunden haben.&lt;br /&gt;
&lt;br /&gt;
Das Labyrinth sieht folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
    01234567 &lt;br /&gt;
  0 ########&lt;br /&gt;
  1 #M#   ##&lt;br /&gt;
  2 # #K#  #&lt;br /&gt;
  3 # #### #&lt;br /&gt;
  4 # #### #&lt;br /&gt;
  5 #   X  #&lt;br /&gt;
  6 #### ###&lt;br /&gt;
  7 ########&lt;br /&gt;
&lt;br /&gt;
Die Stelle &#039;&#039;&#039;X&#039;&#039;&#039; ist beipielsweise mit den Koordinaten (4,5) beschrieben. Micki befindet sich anfangs bei (1,1) also &#039;&#039;&#039;M&#039;&#039;&#039; und der Käse ist mit einem &#039;&#039;&#039;K&#039;&#039;&#039; markiert also (3,2). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wer macht was ===&lt;br /&gt;
Zur Erinnerung: Der Debugger bietet dir mehrere Möglichkeiten, dein Programm fortzusetzen:&lt;br /&gt;
* Terminate: Beendet das Programm sofort&lt;br /&gt;
* Step Into: Überspringt die Methode nicht (F5)&lt;br /&gt;
* Step Over: Überspringt die Beobachtung einer Methode (F6)&lt;br /&gt;
* Step Return: Führt die Methode bis zum Ende aus (F7)&lt;br /&gt;
* Resume: Setzt das Programm bis zum nächsten Haltepunkt fort (F8)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Zusatzaufgaben =&lt;br /&gt;
&lt;br /&gt;
== Refactoring II ==&lt;br /&gt;
Verwende für diese Aufgabe das Projekt &#039;&#039;&#039;Verkehr&#039;&#039;&#039; von der ersten Refactoring Aufgabe. Im Folgenden sind ein paar Vorschläge von Refactoring Aktionen, die du noch durchführen kannst:&lt;br /&gt;
* In der (ehemaligen) Klasse &#039;&#039;MyHupschrauber&#039;&#039;:&lt;br /&gt;
** Benenne die Instanzvariable &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;, &#039;&#039;z&#039;&#039; und &#039;&#039;blabla&#039;&#039; um, so dass sie aussagekräftige Namen haben. Ihre Bedeutung erfährst du aus den JavaDoc-Kommentaren&lt;br /&gt;
** Kapsle die (ehemaligen) Instanzariablen &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;, &#039;&#039;z&#039;&#039; und &#039;&#039;blabla&#039;&#039; (immer nur eine auf einmal). Was bewirkt dies? Dazu schaue dir in der Vorschau den Unterschied an. Warum könnte das sinnvoll sein?&lt;br /&gt;
** Wende die Refactoring-Funktion &#039;&#039;Extract Interface&#039;&#039; auf &#039;&#039;MyHupschrauber&#039;&#039; an. Was bewirkt sie und was bewirken die einzelnen Einstellungen?&lt;br /&gt;
* In der (ehemaligen) Klasse &#039;&#039;MyFlugzeug&#039;&#039;: Lies dir kurz den Code der Klasse durch (man beachte die Warnungen). Benutze die Refactoring-Funktion &#039;&#039;Infer Generic Type Arguments&#039;&#039; und schau was passiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debugging II ==&lt;br /&gt;
* Lade dir die Datei [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2006/Calc.java Calc.java] runter. Erstelle ein Java-Projekt &#039;&#039;Einstein&#039;&#039; und importiere die Datei in das Projekt und führe es aus.&lt;br /&gt;
* Im Quellcode wurden zwei Stellen markiert, an denen du den aktuellen Wert einer Variable auslesen sollst. Dies lässt sich sehr einfach mit Hilfe von Breakpoints lösen.&lt;br /&gt;
       &lt;br /&gt;
* Setze eine Watch Expression auf die Variable &#039;&#039;b&#039;&#039; und beobachte wie sie sich im Laufe des Programms verändert.&lt;br /&gt;
    &lt;br /&gt;
* Exportiere das Programm als JAR-Datei. Damit die Datei später über die Konsole ausgeführt werden kann, gehst du wie folgt vor:&lt;br /&gt;
** Der komplette Projektordner muss exportiert werden&lt;br /&gt;
** Wähle einen Namen für die Datei und einen Ordner als Exportziel.&lt;br /&gt;
** Klicke zweimal auf &#039;&#039;&#039;Next&#039;&#039;&#039; und wähle die Hauptklasse des Projekts aus.&lt;br /&gt;
** Um zu testen, ob du Alles richtig gemacht hast, öffne eine Konsole, wechsle in den Ordner, in dem die JAR-Datei liegt und führe den Befehl &#039;&#039;java -jar filename.jar&#039;&#039; aus. (filename.jar ist der Name der JAR ...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Aufgabe: Eclipse Plug-Ins==&lt;br /&gt;
&lt;br /&gt;
* Informiere dich über die Massen an PlugIns, die es für eclipse gibt über [http://www.eclipseplugincentral.com/ Eclipse Plugin Central].&lt;br /&gt;
* Findest du ein Plugin, mit dem du Sokoban in Eclipse Spielen kannst?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eigenes Subversion-Repository im Fakultätsnetz ==&lt;br /&gt;
&lt;br /&gt;
Richte in deinem eigenen Verzeichnis im CS-Netz ein SVN-Repository ein und lade deine Gruppenmitglieder aus MPGI3 oder MPGI4 in eine eigene Gruppe ein. Setze für diese Gruppe die entsprechenden Rechte im Respository. Checke dieses Verzeichnis mit Subclipse aus und lade eure fertigen und angefangenen Hausaufgaben darin hoch.&lt;br /&gt;
&lt;br /&gt;
Hinweise zur Einrichtung findet ihr im Artikel [[Subversion im CS-Netz]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Eclipsekurs 2008|Zurück zu Eclipsekurs 2008]]&lt;br /&gt;
&lt;br /&gt;
PS: Wenn du Fehler in den Aufgaben findest, benutze den &amp;quot;Bearbeiten&amp;quot;-Link oben auf der Seite. Oder spreche einfach mit einem der Tutoren ...&lt;/div&gt;</summary>
		<author><name>130.149.17.45</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Kickerturnier_2008&amp;diff=11275</id>
		<title>Kickerturnier 2008</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Kickerturnier_2008&amp;diff=11275"/>
		<updated>2008-11-15T12:08:00Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.45: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Freitagsrunden Kickerturnier 2008 ist schon vorbei. Wir gratulieren den Gewinnern und danken allen für ihre Teilnahme!&lt;br /&gt;
&lt;br /&gt;
= Zeit und Ort =&lt;br /&gt;
 * Wann: 11.11.2008 ab 18h; Anstoß: 19h&lt;br /&gt;
 * Wo: [[Franklingebäude]] FR6010&lt;br /&gt;
&lt;br /&gt;
= Anmeldung =&lt;br /&gt;
&lt;br /&gt;
Bitte tragt eure Namen in die Tabelle unten ein oder schickt uns bis zum 09.11.2008, 23:59 Uhr eine Mail an [mailto:kickerturnier@freitagsrunde.org kickerturnier@freitagsrunde.org], die eure Namen und E-Mail-Adressen sowie einen Teamnamen enthält.&lt;br /&gt;
Wir haben nur eine begrenzte Anzahl an Plätzen, bitte meldet euch deswegen möglichst rechtzeitig an. Wenn alle Plätze vergeben sind, werden wir das auf dieser Seite bekannt geben.&lt;br /&gt;
&lt;br /&gt;
= Regeln =&lt;br /&gt;
&lt;br /&gt;
*Gespielt wird &#039;&#039;best of 3.&#039;&#039;  jeweils bis 6 Tore.&lt;br /&gt;
&lt;br /&gt;
*Die Mannschaft, gegen die das letzte Tor erzielt wurde, erhält das Recht den Ball einzuwerfen.&lt;br /&gt;
&lt;br /&gt;
*Zwischen Einwurf und Tor muss der Ball Figuren aus zwei Reihen berührt haben.&lt;br /&gt;
&lt;br /&gt;
*Es ist nicht erlaubt die Figuren vor dem Schuss und nach dem Schuss um mehr als 360 Grad zu drehen.&lt;br /&gt;
&lt;br /&gt;
*Übermäßige Gewalt (am Tisch rütteln bzw. mit den Figuren anstoßen) ist ebenfalls nicht erlaubt.&lt;br /&gt;
&lt;br /&gt;
*Beim &amp;quot;Schuss&amp;quot; müssen beide Hände immer am Griff bleiben.&lt;br /&gt;
&lt;br /&gt;
*Tore sind von allen Reihen erlaubt, auch vom Mittelfeld.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- *Hat ein Ball die Rückwand des Tores berührt gilt dieses, auch wenn der Ball wieder auf das &lt;br /&gt;
Spielfeld zurück springt. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(angelehnt an [http://de.wikipedia.org/wiki/Tischfußball])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Die Regeln werden vor Turnierbeginn nochmal näher erklärt.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Teilnehmerliste =&lt;br /&gt;
&lt;br /&gt;
Bisher haben sich folgende Teams angemeldet:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! width=20% | Team ID&lt;br /&gt;
 ! width=30% | Teamname&lt;br /&gt;
 ! width=25% | Person 1&lt;br /&gt;
 ! width=25% | Person 2&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;0x00&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | VCP = WOB/2 &amp;lt; WOB&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | bastla&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | E552664958674928&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | VATES&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Moritz K&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Thomas G&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Keine Ahnung&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Andreas H&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Boris M&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Z/pZ&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Dan L&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Jakob L&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Team i-cafe 1&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Elli&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 |   JeZ&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Team i-cafe 2&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Milan&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 |  Toku&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | The Flying Popsicles&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Levin&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 |  Martin&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | The IT Crowd&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Jan B.&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Thorsten F.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Team DreamTeam&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Tomek P.&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Konrad M.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;9&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Die Otakus&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Martin H.&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Robert K.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;10&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Team Skatarkus&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Florian S.&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Jan J.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;11&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Team Müritz&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Sebastian K.&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Alexander K.&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;12&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Team 24&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | blohrmann&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | rbu&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;13&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Die glorreichen 8&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Phillip B&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Roman R&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;i+1&#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Your Team Name Here&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 | Your Name Here&lt;br /&gt;
 | bgcolor=&amp;quot;#eadaee&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; colspan=1 |  Your Name Here&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 % python -c &amp;quot;import sys,random; a = range(1,13); random.shuffle(a); print a;&amp;quot; &lt;br /&gt;
[0, 6, 12, 1, 2, 11, 9, 14, 4, 5, 7, 10, 3, 13]&lt;br /&gt;
&lt;br /&gt;
(Note, 0, 13, and 14 added randomly afterward, 8 did not appear to play&lt;br /&gt;
&lt;br /&gt;
= Ergebnisse = &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! width=20% | Team Ranking&lt;br /&gt;
 ! width=30% | Teamname&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;1st Place &#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Team VATES&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;text-align: center; padding: 1em&amp;quot; | &#039;&#039;&#039;2nd Place &#039;&#039;&#039;&lt;br /&gt;
 | bgcolor=&amp;quot;#eeeaef&amp;quot; style=&amp;quot;text-align: center; padding: 1em&amp;quot; | Die glorreichen 8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Weblinks =&lt;br /&gt;
* http://de.wikipedia.org/wiki/Tischfußball&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Veranstaltungen der Freitagsrunde]]&lt;/div&gt;</summary>
		<author><name>130.149.17.45</name></author>
	</entry>
</feed>