<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.freitagsrunde.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aberlin</id>
	<title>FreitagsrundenWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.freitagsrunde.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aberlin"/>
	<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/Spezial:Beitr%C3%A4ge/Aberlin"/>
	<updated>2026-05-08T19:45:43Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=ISIS&amp;diff=20695</id>
		<title>ISIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=ISIS&amp;diff=20695"/>
		<updated>2013-03-08T17:20:41Z</updated>

		<summary type="html">&lt;p&gt;Aberlin: /* Formeln auf ISIS-Foren nutzen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.isis.tu-berlin.de ISIS] ('''I'''nformation'''S'''ystem for '''I'''nstructors and '''S'''tudents) ist eine Onlineplattform, die  von mehreren Lehrveranstaltungen (v.a. Mathematik, Informatik) genutzt wird, um Informationen zu verteilen und teilweise, um Hausaufgaben oder Übungsumgebungen online bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
== Formeln auf ISIS-Foren nutzen ==&lt;br /&gt;
Wenn man in einem der ISIS-Foren Formeln verwenden will, kann man das mit LaTeX machen.&lt;br /&gt;
Dafür führt man den LateX-Code einfach mit $$ ein und mit nochmal $$ zeigt man an, dass man wieder normal weiter schreibt.&lt;br /&gt;
&lt;br /&gt;
Also zum Beispiel.&lt;br /&gt;
&lt;br /&gt;
    ...bla bla bla $$ 3 \vec x+3 \vec y $$ bla bla bla ...&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Uni-ABC]]&lt;/div&gt;</summary>
		<author><name>Aberlin</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Doom&amp;diff=20694</id>
		<title>Javakurs/Übungsaufgaben/Doom</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Doom&amp;diff=20694"/>
		<updated>2013-03-08T17:02:52Z</updated>

		<summary type="html">&lt;p&gt;Aberlin: /* Das GameField */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''ASCII-DOOM''' &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://de.wikipedia.org/wiki/Liv_Tyler 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 ''GameMain'' - Der Anfang ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''GameMain'' 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 ''main''-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 ''Position'' 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:  ''x'' und ''y'', gekapselt mit ''Gettern'' und ''Settern''.&lt;br /&gt;
	&lt;br /&gt;
* Schreibt diese ''Getter'' und ''Setter''&lt;br /&gt;
* Implementiert eine equals-Methode, die 2 Objekte vom Typ ''Position'' vergleicht.&lt;br /&gt;
* Testet nun eure ''equals''-Methode in der ''main''. (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;
''GameTile'' 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 ''leeres Feld'' geben, eine ''Mauer'', und Alles was euch noch einfällt.&lt;br /&gt;
&lt;br /&gt;
* Es enthält außerdem eine private Variable vom Typ ''Position'', welche die Position des GameTiles auf dem Feld speichert.&lt;br /&gt;
	&lt;br /&gt;
* Implementiert eine ''toString''-Methode, die jedem ''GameTile'' einen ''String'' 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 ''GameTile'' erben&lt;br /&gt;
** Als Namen bietet sich ''WallTile'' und ''EmptyTile''&lt;br /&gt;
** Die ''toString()''-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 ''toString''-Methoden, in dem ihr euch einzelne Tiles erzeugt und diese ausgeben last'''&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
== Das GameField ==&lt;br /&gt;
Euer ''GameField'' ist eine zentrale Klasse in diesem Spiel, sie repräsentiert das Spielfeld als Ganzes und besteht aus mehreren ''GameTiles''.&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 ''GameTile'' (Wand oder leer) erzeugt werden. Diese ''GameTiles'' 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 einen Zeilenumbruch.&lt;br /&gt;
** Es soll also aus dem ''GameField''-Array wieder ein ''String'' generiert werden.&lt;br /&gt;
** Die ''toString''-Methode von ''GameField'' soll die ''toString''-Methode der ''GameTile''s verwenden, um diese Ausgabe zu erzeugen.&lt;br /&gt;
* '''TESTET euer Programm mit verschiedenen Levels'''&lt;br /&gt;
&lt;br /&gt;
== Eine Welt aus Feldern ==&lt;br /&gt;
	&lt;br /&gt;
Die Klasse ''World'' 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 ''GameField'', was wir einbinden können (später den Spieler, etc.).&lt;br /&gt;
** So muss es auch ein Variable vom Typ ''GameField'' geben.	&lt;br /&gt;
* Die ''Main'' Klasse erzeugt ab jetzt nur noch eine Instanz von ''World'' nicht mehr von ''GameField''. Denn ''World'' selbst soll sich das ''GameField'' erzeugen (im Konstruktor).&lt;br /&gt;
	&lt;br /&gt;
* Definiert eine ''canvas'' Variable, die für die grafische Repräsentierung des Spielfelds stehen wird.&lt;br /&gt;
**  ''canvas'' ist dabei ein String der der linear das GameField speichert.&lt;br /&gt;
BSP: Dieses 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, dass 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 ''World'' sollte sich nun selbst zeichnen können. Diese Methode sollte ''draw'' heißen. Sie muss  die ''toString''-Methode des GameFields aufrufen. Diese Methode liefert einen linearisierte Variante des Feldes zurück und diese ''draw''-Methode müsste dann nur die linearisierte Variante in Abhängigkeit von der Breite der ''Welt'', 2D ausgeben.&lt;br /&gt;
&lt;br /&gt;
Dazu ein Beispiel: Angenommen ''GameField.toString()'' liefert folgendes:&lt;br /&gt;
 #### ## ##@####&lt;br /&gt;
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;
* ''' TESTET nun eure Grafik Ausgabe anhand verschiedener Level'''&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, wie viele Zeilen eure Konsole hat. 	&lt;br /&gt;
* Bevor man das Level ausgibt, kann man so viele leere Zeilen ausgeben lassen, dass das alte Level nicht mehr sichtbar ist. ''System.out.println(&amp;quot;&amp;quot;);'' gibt eine leere Zeile aus. &lt;br /&gt;
* '''TESTEN ob das klappt und gut aussieht'''&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 ''GameField'' 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 ''GameField'' repräsentiert.&lt;br /&gt;
* Schreibt eine ''draw''-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 (bzw. Spieler) 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 beliebigen 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;
* '''TESTET ob das funktioniert. Was passiert eigentlich, wenn man den Spieler an der Position  -1 | -1 setzt ? '''&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 ''World''-Klasse überarbeiten.&lt;br /&gt;
&lt;br /&gt;
* Implementiert eine Methode ''public boolean onKeyPressed( String key ){ ... }''. Sie wird dann aufgerufen werden, wenn eine Taste gedrückt wurde und soll ''true'' zurückgeben, wenn der Spieler sich bewegt hat, ansonsten ''false''. 	  &lt;br /&gt;
	  &lt;br /&gt;
* Zunächst müssen wir in ''onKeyPressed'' 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 (''equals'' benutzen!). Falls ja, wurde schon mal eine gültige Taste gedrückt. Falls nein, können wir ''false'' 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 ''GameField''-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 &amp;quot;true&amp;quot; zurück.&lt;br /&gt;
		  &lt;br /&gt;
* '''TESTET unbedingt manuell diese Methode, sie muss korrekt funktionieren! '''&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 ''Terminal''-Klasse.&lt;br /&gt;
&lt;br /&gt;
* Es muss geprüft werden ob es sich um ein gültiges Zeichen handelt und ob es eines der Zeichen ''a,s,w,d'' ist.&lt;br /&gt;
&lt;br /&gt;
* Das eingegebene Zeichen soll dann an die ''World''-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;
==Anonymer Kommentar==&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>Aberlin</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Doom&amp;diff=20692</id>
		<title>Javakurs/Übungsaufgaben/Doom</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Doom&amp;diff=20692"/>
		<updated>2013-03-08T16:53:32Z</updated>

		<summary type="html">&lt;p&gt;Aberlin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''ASCII-DOOM''' &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://de.wikipedia.org/wiki/Liv_Tyler 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 ''GameMain'' - Der Anfang ==&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''GameMain'' 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 ''main''-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 ''Position'' 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:  ''x'' und ''y'', gekapselt mit ''Gettern'' und ''Settern''.&lt;br /&gt;
	&lt;br /&gt;
* Schreibt diese ''Getter'' und ''Setter''&lt;br /&gt;
* Implementiert eine equals-Methode, die 2 Objekte vom Typ ''Position'' vergleicht.&lt;br /&gt;
* Testet nun eure ''equals''-Methode in der ''main''. (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;
''GameTile'' 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 ''leeres Feld'' geben, eine ''Mauer'', und Alles was euch noch einfällt.&lt;br /&gt;
&lt;br /&gt;
* Es enthält außerdem eine private Variable vom Typ ''Position'', welche die Position des GameTiles auf dem Feld speichert.&lt;br /&gt;
	&lt;br /&gt;
* Implementiert eine ''toString''-Methode, die jedem ''GameTile'' einen ''String'' 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 ''GameTile'' erben&lt;br /&gt;
** Als Namen bietet sich ''WallTile'' und ''EmptyTile''&lt;br /&gt;
** Die ''toString()''-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 ''toString''-Methoden, in dem ihr euch einzelne Tiles erzeugt und diese ausgeben last'''&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
== Das GameField ==&lt;br /&gt;
Euer ''GameField'' ist eine zentrale Klasse in diesem Spiel, sie repräsentiert das Spielfeld als Ganzes und besteht aus mehreren ''GameTiles''.&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 ''GameTile'' (Wand oder leer) erzeugt werden. Diese ''GameTiles'' 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 ''GameField''-Array wieder ein ''String'' generiert werden.&lt;br /&gt;
** Die ''toString''-Methode von ''GameField'' soll die ''toString''-Methode der ''GameTile''s verwenden, um diese Ausgabe zu erzeugen.&lt;br /&gt;
* '''TESTET euer Programm mit verschiedenen Levels'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Eine Welt aus Feldern ==&lt;br /&gt;
	&lt;br /&gt;
Die Klasse ''World'' 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 ''GameField'', was wir einbinden können (später den Spieler, etc.).&lt;br /&gt;
** So muss es auch ein Variable vom Typ ''GameField'' geben.	&lt;br /&gt;
* Die ''Main'' Klasse erzeugt ab jetzt nur noch eine Instanz von ''World'' nicht mehr von ''GameField''. Denn ''World'' selbst soll sich das ''GameField'' erzeugen (im Konstruktor).&lt;br /&gt;
	&lt;br /&gt;
* Definiert eine ''canvas'' Variable, die für die grafische Repräsentierung des Spielfelds stehen wird.&lt;br /&gt;
**  ''canvas'' ist dabei ein String der der linear das GameField speichert.&lt;br /&gt;
BSP: Dieses 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, dass 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 ''World'' sollte sich nun selbst zeichnen können. Diese Methode sollte ''draw'' heißen. Sie muss  die ''toString''-Methode des GameFields aufrufen. Diese Methode liefert einen linearisierte Variante des Feldes zurück und diese ''draw''-Methode müsste dann nur die linearisierte Variante in Abhängigkeit von der Breite der ''Welt'', 2D ausgeben.&lt;br /&gt;
&lt;br /&gt;
Dazu ein Beispiel: Angenommen ''GameField.toString()'' liefert folgendes:&lt;br /&gt;
 #### ## ##@####&lt;br /&gt;
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;
* ''' TESTET nun eure Grafik Ausgabe anhand verschiedener Level'''&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, wie viele Zeilen eure Konsole hat. 	&lt;br /&gt;
* Bevor man das Level ausgibt, kann man so viele leere Zeilen ausgeben lassen, dass das alte Level nicht mehr sichtbar ist. ''System.out.println(&amp;quot;&amp;quot;);'' gibt eine leere Zeile aus. &lt;br /&gt;
* '''TESTEN ob das klappt und gut aussieht'''&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 ''GameField'' 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 ''GameField'' repräsentiert.&lt;br /&gt;
* Schreibt eine ''draw''-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 (bzw. Spieler) 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 beliebigen 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;
* '''TESTET ob das funktioniert. Was passiert eigentlich, wenn man den Spieler an der Position  -1 | -1 setzt ? '''&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 ''World''-Klasse überarbeiten.&lt;br /&gt;
&lt;br /&gt;
* Implementiert eine Methode ''public boolean onKeyPressed( String key ){ ... }''. Sie wird dann aufgerufen werden, wenn eine Taste gedrückt wurde und soll ''true'' zurückgeben, wenn der Spieler sich bewegt hat, ansonsten ''false''. 	  &lt;br /&gt;
	  &lt;br /&gt;
* Zunächst müssen wir in ''onKeyPressed'' 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 (''equals'' benutzen!). Falls ja, wurde schon mal eine gültige Taste gedrückt. Falls nein, können wir ''false'' 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 ''GameField''-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 &amp;quot;true&amp;quot; zurück.&lt;br /&gt;
		  &lt;br /&gt;
* '''TESTET unbedingt manuell diese Methode, sie muss korrekt funktionieren! '''&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 ''Terminal''-Klasse.&lt;br /&gt;
&lt;br /&gt;
* Es muss geprüft werden ob es sich um ein gültiges Zeichen handelt und ob es eines der Zeichen ''a,s,w,d'' ist.&lt;br /&gt;
&lt;br /&gt;
* Das eingegebene Zeichen soll dann an die ''World''-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;
==Anonymer Kommentar==&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>Aberlin</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=ISIS&amp;diff=20096</id>
		<title>ISIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=ISIS&amp;diff=20096"/>
		<updated>2013-03-04T11:50:17Z</updated>

		<summary type="html">&lt;p&gt;Aberlin: /* ISIS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[http://www.isis.tu-berlin.de ISIS] ('''I'''nformation'''S'''ystem for '''I'''nstructors and '''S'''tudents) ist eine Onlineplattform, die  von mehreren Lehrveranstaltungen (v.a. Mathematik, Informatik) genutzt wird, um Informationen zu verteilen und teilweise, um Hausaufgaben oder Übungsumgebungen online bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
==Formeln auf ISIS-Foren nutzen==&lt;br /&gt;
Wenn man in einem der ISIS-Foren Formeln verwenden will kann man das mit LateX Befehlen machen.&lt;br /&gt;
Dafür führt man den LateX-Code einfach mit $$ ein und  mit nochmal  $$ zeigt man an, dass man wieder normal weiter schreibt.&lt;br /&gt;
&lt;br /&gt;
Also z.B.:   Normaler Text $$ 3\vec x+3\vec y $$&lt;/div&gt;</summary>
		<author><name>Aberlin</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=ISIS&amp;diff=20095</id>
		<title>ISIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=ISIS&amp;diff=20095"/>
		<updated>2013-03-04T11:49:50Z</updated>

		<summary type="html">&lt;p&gt;Aberlin: /* Formeln auf ISIS-Foren nutzen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==ISIS==&lt;br /&gt;
[http://www.isis.tu-berlin.de ISIS] ('''I'''nformation'''S'''ystem for '''I'''nstructors and '''S'''tudents) ist eine Onlineplattform, die  von mehreren Lehrveranstaltungen (v.a. Mathematik, Informatik) genutzt wird, um Informationen zu verteilen und teilweise, um Hausaufgaben oder Übungsumgebungen online bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
==Formeln auf ISIS-Foren nutzen==&lt;br /&gt;
Wenn man in einem der ISIS-Foren Formeln verwenden will kann man das mit LateX Befehlen machen.&lt;br /&gt;
Dafür führt man den LateX-Code einfach mit $$ ein und  mit nochmal  $$ zeigt man an, dass man wieder normal weiter schreibt.&lt;br /&gt;
&lt;br /&gt;
Also z.B.:   Normaler Text $$ 3\vec x+3\vec y $$&lt;/div&gt;</summary>
		<author><name>Aberlin</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=ISIS&amp;diff=20094</id>
		<title>ISIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=ISIS&amp;diff=20094"/>
		<updated>2013-03-04T11:49:28Z</updated>

		<summary type="html">&lt;p&gt;Aberlin: Latex auf Isis nutzen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==ISIS==&lt;br /&gt;
[http://www.isis.tu-berlin.de ISIS] ('''I'''nformation'''S'''ystem for '''I'''nstructors and '''S'''tudents) ist eine Onlineplattform, die  von mehreren Lehrveranstaltungen (v.a. Mathematik, Informatik) genutzt wird, um Informationen zu verteilen und teilweise, um Hausaufgaben oder Übungsumgebungen online bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
==Formeln auf ISIS-Foren nutzen==&lt;br /&gt;
Wenn man in einem der ISIS-Foren Formeln verwenden will kann man das mit LateX Befehlen machen.&lt;br /&gt;
Dafür führt man den LateX-Code einfach mit $$ ein und  mit $$ zeigt man an, dass man wieder normal weiter schreibt.&lt;br /&gt;
&lt;br /&gt;
Also z.B.:   Normaler Text $$ 3\vec x+3\vec y $$&lt;/div&gt;</summary>
		<author><name>Aberlin</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=Diskussion:Ewoche/seidaktiv&amp;diff=19388</id>
		<title>Diskussion:Ewoche/seidaktiv</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Diskussion:Ewoche/seidaktiv&amp;diff=19388"/>
		<updated>2012-10-18T10:43:36Z</updated>

		<summary type="html">&lt;p&gt;Aberlin: Neuer Abschnitt /* hier ist ein text */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wenn ihr im Uninetz seid oder mit eurem Account am Wiki angemeldet seid, seht ihr unter der Navigationszeile oben ein paar Links. Bitte drückt jetzt dort auf das Plus, damit ihr einen neuen Kommentar hinterlasst.  Damit wir wissen, wer diesen Kommentar geschrieben hat, schreibt bitte den Text eures Kommentars gleich auch auf eure Abgabe. Wenn dort kein unterstrichenes + zu sehen ist, seid ihr nicht angemeldet oder nicht im Uninetz.&lt;br /&gt;
&lt;br /&gt;
== Ewoche Unirallye ==&lt;br /&gt;
&lt;br /&gt;
Pudding&lt;br /&gt;
&lt;br /&gt;
== Unirallye like a pro ==&lt;br /&gt;
&lt;br /&gt;
Wie prangern an, dass die Tastaturen in Unixpool so komisch funktionieren und das die Aufgabe 11 total strange ist!&lt;br /&gt;
&lt;br /&gt;
== Rallye. ==&lt;br /&gt;
&lt;br /&gt;
strich. punkt. komma.&lt;br /&gt;
&lt;br /&gt;
== Guten Tag ==&lt;br /&gt;
&lt;br /&gt;
Wo ist die Kletterausrüstung versteckt, um aufs Dach des Hauptgebäudes zu kommen?&lt;br /&gt;
&lt;br /&gt;
== Campus-Rallye ==&lt;br /&gt;
&lt;br /&gt;
Weil wir so schön sind, so schlau sind, so schlank und rank.&lt;br /&gt;
Gewinnen wir die Campus-Rallye! =)&lt;br /&gt;
&lt;br /&gt;
== Freitagsrunde ==&lt;br /&gt;
&lt;br /&gt;
Liebe Gruesse Freitagsrunde,&lt;br /&gt;
Tilo, Ruben und Dennis.&lt;br /&gt;
&lt;br /&gt;
== Unirallye ==&lt;br /&gt;
&lt;br /&gt;
Hallö&lt;br /&gt;
schöne grüße von Flori, Kamil, Dorothea&lt;br /&gt;
&lt;br /&gt;
== Unixpool unter wasser! ==&lt;br /&gt;
&lt;br /&gt;
Wir wissen jetzt, wieviel Wasser in den Unixpool reinpasst.&lt;br /&gt;
Aber nicht, wie wir es wieder rauskriegen!! sry&lt;br /&gt;
&lt;br /&gt;
== Finde ich richtig gut ==&lt;br /&gt;
&lt;br /&gt;
Ich finde die Idee der Unirallye wirklich gut.&lt;br /&gt;
&lt;br /&gt;
Gruß an die Frunde.&lt;br /&gt;
&lt;br /&gt;
== Unirallye ==&lt;br /&gt;
&lt;br /&gt;
Die Rechner im PC-Pool sind lahm! :P &lt;br /&gt;
&lt;br /&gt;
Grüße Robin,Hannes,Colin&lt;br /&gt;
&lt;br /&gt;
== Runter vom Dach!!! ==&lt;br /&gt;
&lt;br /&gt;
Alles Gute von Jordi, Christian und Stefan!!!&lt;br /&gt;
&lt;br /&gt;
== Uni-Rally vorbei - Sieger festgelegt! [nicht offiziell] ==&lt;br /&gt;
&lt;br /&gt;
1. Platz : Max Oehme, Thomas Havekost, Marian Stenzel&lt;br /&gt;
&lt;br /&gt;
neuer Kommentar&lt;br /&gt;
&lt;br /&gt;
== Betreff ==&lt;br /&gt;
&lt;br /&gt;
gez. Julian, Patrick Vincent&lt;br /&gt;
&lt;br /&gt;
== hier ist ein text ==&lt;br /&gt;
&lt;br /&gt;
kann sein das wir auf unserem blatt nichts hingeschrieben haben&lt;/div&gt;</summary>
		<author><name>Aberlin</name></author>
		
	</entry>
</feed>