From 337dba8dfef01c2277be860d98572015d176800f Mon Sep 17 00:00:00 2001
From: Dennis Eisold <de@itstall.de>
Date: Tue, 19 Nov 2019 21:37:11 +0100
Subject: [PATCH] Game is working

---
 src/de/itstall/GameField.java |   8 +
 src/de/itstall/GameMain.java  |   9 +
 src/de/itstall/Player.java    |  13 -
 src/de/itstall/Terminal.java  | 786 ++++++++++++++++++++++++++++++++++
 src/de/itstall/World.java     |  55 ++-
 5 files changed, 857 insertions(+), 14 deletions(-)
 create mode 100644 src/de/itstall/Terminal.java

diff --git a/src/de/itstall/GameField.java b/src/de/itstall/GameField.java
index 7baa297..4dfc429 100644
--- a/src/de/itstall/GameField.java
+++ b/src/de/itstall/GameField.java
@@ -26,6 +26,14 @@ public class GameField {
 		}
 	}
 
+	public boolean checkField(int x, int y) {
+		if(this.field[x][y].getClass().getSimpleName().equals("EmptyTile")) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
 	@Override
 	public String toString() {
 
diff --git a/src/de/itstall/GameMain.java b/src/de/itstall/GameMain.java
index 8684a41..491dd73 100644
--- a/src/de/itstall/GameMain.java
+++ b/src/de/itstall/GameMain.java
@@ -1,10 +1,19 @@
 package de.itstall;
 
+import java.io.*;
+
 public class GameMain {
 	public static void main(String[] args) {
 
+		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
 		World w = new World();
+		w.setLineBreaks(7);
+		char key;
 
 		System.out.println(w.draw());
+		while(true) {
+			key = Terminal.askChar("Do: ");
+			w.keyPressed(String.valueOf(key));
+		}
 	}
 }
diff --git a/src/de/itstall/Player.java b/src/de/itstall/Player.java
index 1800255..4dbac69 100644
--- a/src/de/itstall/Player.java
+++ b/src/de/itstall/Player.java
@@ -13,19 +13,6 @@ public class Player extends GameTile {
 		return new String(chars);
 	}
 
-	public void moveLeft() {
-		pos.setPosition(pos.getX() - 1, pos.getY());
-	}
-	public void moveRight() {
-		pos.setPosition(pos.getX() + 1, pos.getY());
-	}
-	public void moveUp() {
-		pos.setPosition(pos.getX(), pos.getY() - 1);
-	}
-	public void moveDown() {
-		pos.setPosition(pos.getX(), pos.getY() + 1);
-	}
-
 	@Override
 	public String toString() {
 		return "@";
diff --git a/src/de/itstall/Terminal.java b/src/de/itstall/Terminal.java
new file mode 100644
index 0000000..6d8c327
--- /dev/null
+++ b/src/de/itstall/Terminal.java
@@ -0,0 +1,786 @@
+package de.itstall;
+
+
+import java.io.*;
+import java.util.*;
+
+/***********************************************************************
+ * Diese Klasse stellt einige einfache Methoden zur Ein- und
+ * Ausgabe auf einem Terminal zur Verf&uuml;gung.
+ *	@author  P. Pepper und Gruppe
+ *	@version 1.1
+ ************************************************************************/
+
+public class Terminal {
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus.
+	 * @param text  die auszugebende Zeichenkette.
+	 ****************************************************************/
+	public static void print (String text) {
+		System.out.print(text);
+		System.out.flush();
+	}
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette gefolgt von einem Zeilenumbruch aus.
+	 * @param text  die auszugebende Zeichenkette.
+	 ****************************************************************/
+	public static void println (String text) {
+		System.out.println(text);
+		System.out.flush();
+	}
+
+	/****************************************************************
+	 * Gibt einen booleschen Wert aus.
+	 * @param val  der auszugebende boolesche Wert.
+	 ****************************************************************/
+	public static void print (boolean val) { print(norm(val)); }
+
+	/****************************************************************
+	 * Gibt eine booleschen Wert gefolgt von einem Zeilenumbruch aus.
+	 * @param val  der auszugebende boolesche Wert.
+	 ****************************************************************/
+	public static void println (boolean val) { println(norm(val)); }
+
+	/****************************************************************
+	 * Gibt ein Zeichen aus.
+	 * @param val  das auszugebende Zeichen.
+	 ****************************************************************/
+	public static void print (char val) { print(norm(val)); }
+
+	/****************************************************************
+	 * Gibt ein Zeichen gefolgt von einem Zeilenumbruch aus.
+	 * @param val  das auszugebende Zeichen.
+	 ****************************************************************/
+	public static void println (char val) { println(norm(val)); }
+
+	/****************************************************************
+	 * Gibt eine ganze Zahl aus.
+	 * (Kann auch mit byte und short aufgerufen werden.)
+	 * @param number  die auszugebende ganze Zahl.
+	 ****************************************************************/
+	public static void print (long number) { print(norm(number)); }
+
+	/****************************************************************
+	 * Gibt eine ganze Zahl gefolgt von einem Zeilenumbruch aus.
+	 * (Kann auch mit byte und short aufgerufen werden.)
+	 * @param number  die auszugebende ganze Zahl.
+	 ****************************************************************/
+	public static void println (long number) { println(norm(number)); }
+
+	/***************************************************************
+	 * Gibt eine Gleitpunktzahl(32 Bit) aus.
+	 * @param number  die auszugebende Gleitpunktzahl.
+	 ****************************************************************/
+	public static void print (float number) { print(norm(number)); }
+
+	/***************************************************************
+	 * Gibt eine Gleitpunktzahl(32 Bit) gefolgt von einem
+	 * Zeilenumbruch aus.
+	 * @param number  die auszugebende Gleitpunktzahl.
+	 ****************************************************************/
+	public static void println (float number) { println(norm(number)); }
+
+	/***************************************************************
+	 * Gibt eine Gleitpunktzahl(64 Bit) aus.
+	 * @param number  die auszugebende Gleitpunktzahl.
+	 ****************************************************************/
+	public static void print (double number) { print(norm(number)); }
+
+	/***************************************************************
+	 * Gibt eine Gleitpunktzahl(64 Bit) gefolgt von einem
+	 * Zeilenumbruch aus.
+	 * @param number  die auszugebende Gleitpunktzahl.
+	 ****************************************************************/
+	public static void println (double number) { println(norm(number)); }
+
+
+
+//***************************************************************
+//***************************************************************
+// Array-Ausgabe
+//***************************************************************
+//***************************************************************
+//
+
+	/****************************************************************
+	 * Gibt einen Array von ganzen Zahlen (32 Bit) aus.
+	 * @param array der auszugebende Array.
+	 ****************************************************************/
+	public static void print (int[] array) {
+		System.out.print("{ ");
+		for (int i = 0; i < array.length; i++) {
+			System.out.print(norm(array[i]));
+			if (i != array.length - 1) { System.out.print(", "); }
+		}//for
+		System.out.print(" }");
+	}
+
+	/****************************************************************
+	 * Gibt einen Array von ganzen Zahlen (32 Bit) gefolgt
+	 * von einem Zeilenumbruch aus.
+	 * @param array  der auszugebende Array.
+	 ****************************************************************/
+	public static void println (int[] array) {
+		print(array);
+		System.out.println();
+		System.out.flush();
+	}
+
+	/****************************************************************
+	 * Gibt einen Array von ganzen Zahlen (64 Bit) aus.
+	 * @param array der auszugebende Array.
+	 ****************************************************************/
+	public static void print (long[] array) {
+		System.out.print("{ ");
+		for (int i = 0; i < array.length; i++) {
+			System.out.print(norm(array[i]));
+			if (i != array.length - 1) { System.out.print(", "); }
+		}//for
+		System.out.print(" }");
+	}
+
+	/****************************************************************
+	 * Gibt einen Array von ganzen Zahlen (64 Bit) gefolgt
+	 * von einem Zeilenumbruch aus.
+	 * @param array  der auszugebende Array.
+	 ****************************************************************/
+	public static void println (long[] array) {
+		print(array);
+		System.out.println();
+		System.out.flush();
+	}
+
+	/****************************************************************
+	 * Gibt einen Array von Gleitpunktzahlen (32 Bit) aus.
+	 * @param array der auszugebende Array.
+	 ****************************************************************/
+	public static void print (float[] array) {
+		System.out.print("{ ");
+		for (int i = 0; i < array.length; i++) {
+			System.out.print(norm(array[i]));
+			if (i != array.length - 1) { System.out.print(", "); }
+		}//for
+		System.out.print(" }");
+	}
+
+	/****************************************************************
+	 * Gibt einen Array von Gleitpunktzahlen (32 Bit) gefolgt
+	 * von einem Zeilenumbruch aus.
+	 * @param array  der auszugebende Array.
+	 ****************************************************************/
+	public static void println (float[] array) {
+		print(array);
+		System.out.println();
+		System.out.flush();
+	}
+
+	/****************************************************************
+	 * Gibt einen Array von Gleitpunktzahlen (64 Bit) aus.
+	 * @param array der auszugebende Array.
+	 ****************************************************************/
+	public static void print (double[] array) {
+		System.out.print("{ ");
+		for (int i = 0; i < array.length; i++) {
+			System.out.print(norm(array[i]));
+			if (i != array.length - 1) { System.out.print(", "); }
+		}//for
+		System.out.print(" }");
+	}
+
+	/****************************************************************
+	 * Gibt einen Array von Gleitpunktzahlen (64 Bit) gefolgt
+	 * von einem Zeilenumbruch aus.
+	 * @param array  der auszugebende Array.
+	 ****************************************************************/
+	public static void println (double[] array) {
+		print(array);
+		System.out.println();
+		System.out.flush();
+	}
+
+	/****************************************************************
+	 * Gibt eine Matrix von ganzen Zahlen (32 Bit) aus.
+	 * @param matrix  die auszugebende Matrix..
+	 ****************************************************************/
+	public static void print (int[][] matrix) {
+		System.out.print("{ ");
+		for (int i = 0; i < matrix.length; i++) {
+			for (int j = 0; j < matrix[i].length; j++) {
+				System.out.print(norm(matrix[i][j]));
+				if (j != matrix[i].length - 1) {
+					System.out.print(", ");
+				} else {
+					if (i != matrix.length - 1) {
+						System.out.print(" / ");
+					}
+				}
+			}
+		}
+		System.out.print(" }");
+	}
+
+	/****************************************************************
+	 * Gibt eine Matrix von ganzen Zahlen (64 Bit) aus.
+	 * @param matrix  die auszugebende Matrix..
+	 ****************************************************************/
+	public static void print (long[][] matrix) {
+		System.out.print("{ ");
+		for (int i = 0; i < matrix.length; i++) {
+			for (int j = 0; j < matrix[i].length; j++) {
+				System.out.print(norm(matrix[i][j]));
+				if (j != matrix[i].length - 1) {
+					System.out.print(", ");
+				} else {
+					if (i != matrix.length - 1) {
+						System.out.print(" / ");
+					}
+				}
+			}
+		}
+		System.out.print(" }");
+	}
+
+	/****************************************************************
+	 * Gibt eine Matrix von Gleitpunktzahlen (32 Bit) aus.
+	 * @param matrix  die auszugebende Matrix..
+	 ****************************************************************/
+	public static void print (float[][] matrix) {
+		System.out.print("{ ");
+		for (int i = 0; i < matrix.length; i++) {
+			for (int j = 0; j < matrix[i].length; j++) {
+				System.out.print(norm(matrix[i][j]));
+				if (j != matrix[i].length - 1) {
+					System.out.print(", ");
+				} else {
+					if (i != matrix.length - 1) {
+						System.out.print(" / ");
+					}
+				}
+			}
+		}
+		System.out.print(" }");
+	}
+
+	/****************************************************************
+	 * Gibt eine Matrix von Gleitpunktzahlen (64 Bit) aus
+	 * @param matrix  die auszugebende Matrix..
+	 ****************************************************************/
+	public static void print (double[][] matrix) {
+		System.out.print("{ ");
+		for (int i = 0; i < matrix.length; i++) {
+			for (int j = 0; j < matrix[i].length; j++) {
+				System.out.print(norm(matrix[i][j]));
+				if (j != matrix[i].length - 1) {
+					System.out.print(", ");
+				} else {
+					if (i != matrix.length - 1) {
+						System.out.print(" / ");
+					}
+				}
+			}
+		}
+		System.out.print(" }");
+	}
+
+	/****************************************************************
+	 * Gibt eine Matrix von ganzen Zahlen (32 Bit) aus.
+	 * gefolgt von einem Zeilenumbruch
+	 * @param matrix  die auszugebende Matrix..
+	 ****************************************************************/
+	public static void println (int[][] matrix) {
+		print(matrix);
+		System.out.println();
+		System.out.flush();
+	}
+
+	/****************************************************************
+	 * Gibt eine Matrix von ganzen Zahlen (64 Bit) aus.
+	 * gefolgt von einem Zeilenumbruch
+	 * @param matrix  die auszugebende Matrix..
+	 ****************************************************************/
+	public static void println (long[][] matrix) {
+		print(matrix);
+		System.out.println();
+		System.out.flush();
+	}
+
+	/***************************************************************
+	 * Gibt eine Matrix von Gleitpunktzahlen (32 Bit) aus
+	 * gefolgt von einem Zeilenumbruch
+	 * @param matrix  die auszugebende Matrix..
+	 ****************************************************************/
+	public static void println (float[][] matrix) {
+		print(matrix);
+		System.out.println();
+		System.out.flush();
+	}
+
+	/***************************************************************
+	 * Gibt eine Matrix von Gleitpunktzahlen (64 Bit) aus
+	 * gefolgt von einem Zeilenumbruch
+	 * @param matrix  die auszugebende Matrix..
+	 ****************************************************************/
+	public static void println (double[][] matrix) {
+		print(matrix);
+		System.out.println();
+		System.out.flush();
+	}
+
+//***************************************************************
+//
+//  R E A D I N G
+//
+//***************************************************************
+
+	/***************************************************************
+	 * Liest eine Zeichenkette vom Terminal.
+	 * @return das gelesene Zeichen.
+	 ****************************************************************/
+	public static String readString () {
+		String line = "";
+		BufferedReader R = new BufferedReader(
+				new InputStreamReader(System.in));
+		try {
+			line = R.readLine();
+		}
+		catch (IOException e) { error1(); }
+		return line;
+	}
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe einer
+	 * Zeichenkette.
+	 * @param prompt  die auszugebende Zeichenkette.
+	 * @return die eingegebene Zeichenkette.
+	 ****************************************************************/
+	public static String askString (String prompt) {
+		print(prompt);
+		return readString();
+	}
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe einer
+	 * Zeichenkette.
+	 * @param prompt  die auszugebende Zeichenkette.
+	 * @return die eingegebene Zeichenkette.
+	 ****************************************************************/
+	public static String ask (String prompt) {
+		return askString(prompt);
+	}
+
+	/****************************************************************
+	 * Liest einen Wahrheitswert vom Terminal.
+	 * Die Zeichenkette "true" (unabh&auml;ngig von Gro&szlig;-/Kleinschreibung)
+	 * liefert true, alles andere false.
+	 * @return der eingegebene Wert.
+	 ****************************************************************/
+	public static boolean readBoolean () {
+		StringTokenizer tokenizer = getTokenizer();
+		while (true) {
+			try {
+				String token = tokenizer.nextToken();
+				return Boolean.valueOf(token).booleanValue();
+			}
+			catch (NoSuchElementException e1) { tokenizer = getTokenizer(); }
+			catch (NumberFormatException e2)  { error2("Boolean"); }
+		}//while
+	}
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe eines
+	 * Wahrheitswerts.
+	 * Die Zeichenkette "true" (unabh&auml;ngig von Gro&szlig;-/Kleinschreibung)
+	 * liefert true, alles andere false.
+	 * @param prompt  die auszugebende Zeichenkette.
+	 * @return der eingegebene Wert.
+	 ****************************************************************/
+	public static boolean askBoolean (String prompt) {
+		print(prompt);
+		return readBoolean();
+	}
+
+	/****************************************************************
+	 * Liest ein Zeichen vom Terminal.
+	 * @return das gelesene Zeichen.
+	 ****************************************************************/
+	public static char readChar () {
+		int x = 0;
+		InputStreamReader R = new InputStreamReader(System.in);
+		try {
+			x = R.read();
+		}
+		catch (IOException e1) { error1(); }
+		return (char) x;
+	}
+
+	/***************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe eines
+	 * Zeichens.
+	 * @param prompt  die auszugebende Zeichenkette.
+	 * @return das eingegebene Zeichen.
+	 ****************************************************************/
+	public static char askChar (String prompt) {
+		print(prompt);
+		return readChar();
+	}
+
+	/****************************************************************
+	 * Liest eine ganze Zahl (8 Bit) vom Terminal.
+	 * @return die gelesene Zahl.
+	 ****************************************************************/
+	public static byte readByte () {
+		StringTokenizer tokenizer = getTokenizer();
+		while (true) {
+			try {
+				String token = tokenizer.nextToken();
+				return Byte.valueOf(token).byteValue();
+			}
+			catch (NoSuchElementException e1) { tokenizer = getTokenizer(); }
+			catch (NumberFormatException e2)  { error2("Byte"); }
+		}//while
+	}
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe einer
+	 * ganzen Zahl (8 Bit).
+	 * @param prompt  die auszugebende Zeichenkette.
+	 * @return die eingegebene Zahl.
+	 ****************************************************************/
+	public static byte askByte (String prompt) {
+		print(prompt);
+		return readByte();
+	}
+
+	/****************************************************************
+	 * Liest eine ganze Zahl (16 Bit) vom Terminal.
+	 * @return die gelesene Zahl.
+	 ****************************************************************/
+	public static short readShort () {
+		StringTokenizer tokenizer = getTokenizer();
+		while (true) {
+			try {
+				String token = tokenizer.nextToken();
+				return Short.valueOf(token).shortValue();
+			}
+			catch (NoSuchElementException e1) { tokenizer = getTokenizer(); }
+			catch (NumberFormatException e2)  { error2("Short"); }
+		}//while
+	}
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe einer
+	 * ganzen Zahl (16 Bit).
+	 * @param prompt  die auszugebende Zeichenkette.
+	 * @return die eingegebene Zahl.
+	 ****************************************************************/
+	public static short askShort (String prompt) {
+		print(prompt);
+		return readShort();
+	}
+
+	/****************************************************************
+	 * Liest eine ganze Zahl (32 Bit) vom Terminal.
+	 * @return die gelesene Zahl.
+	 ****************************************************************/
+	public static int readInt () {
+		StringTokenizer tokenizer = getTokenizer();
+		while (true) {
+			try {
+				String token = tokenizer.nextToken();
+				return Integer.valueOf(token).intValue();
+			}
+			catch (NoSuchElementException e1) { tokenizer = getTokenizer(); }
+			catch (NumberFormatException e2)  { error2("Integer"); }
+		}//while
+	}
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe einer
+	 * ganzen Zahl (32 Bit).
+	 * @param prompt  die auszugebende Zeichenkette.
+	 * @return die eingegebene Zahl.
+	 ****************************************************************/
+	public static int askInt (String prompt) {
+		print(prompt);
+		return readInt();
+	}
+
+	/****************************************************************
+	 * Liest eine ganze Zahl (64 Bit) vom Terminal.
+	 * @return die gelesene Zahl.
+	 ****************************************************************/
+	public static long readLong () {
+		StringTokenizer tokenizer = getTokenizer();
+		while (true) {
+			try {
+				String token = tokenizer.nextToken();
+				return Long.valueOf(token).longValue();
+			}
+			catch (NoSuchElementException e1) { tokenizer = getTokenizer(); }
+			catch (NumberFormatException e2)  { error2("Long"); }
+		}//while
+	}
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe einer
+	 * ganzen Zahl (64 Bit).
+	 * @param prompt  die auszugebende Zeichenkette.
+	 * @return die eingegebene Zahl.
+	 ****************************************************************/
+	public static long askLong (String prompt) {
+		print(prompt);
+		return readLong();
+	}
+
+	/****************************************************************
+	 * Liest eine Gleitpunktzahl(32 Bit) vom Terminal.
+	 * @return die gelesene Zahl.
+	 ****************************************************************/
+	public static float readFloat () {
+		StringTokenizer tokenizer = getTokenizer();
+		while (true) {
+			try {
+				String token = tokenizer.nextToken();
+				return Float.valueOf(token).floatValue();
+			}
+			catch (NoSuchElementException e1) { tokenizer = getTokenizer(); }
+			catch (NumberFormatException e2)  { error2("Float"); }
+		}
+	}
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe einer
+	 * Gleitpunktzahl einfacher Genauigkeit (32 Bit).
+	 * @param prompt  die auszugebende Zeichenkette.
+	 * @return die eingegebene Gleitpunktzahl.
+	 ****************************************************************/
+	public static float askFloat (String prompt) {
+		print(prompt);
+		return readFloat();
+	}
+
+	/****************************************************************
+	 * Liest eine Gleitpunktzahl(64 Bit) vom Terminal.
+	 * @return die gelesene Zahl.
+	 ****************************************************************/
+	public static double readDouble () {
+		StringTokenizer tokenizer = getTokenizer();
+		while (true) {
+			try {
+				String token = tokenizer.nextToken();
+				return Double.valueOf(token).doubleValue();
+			}
+			catch (NoSuchElementException e1) { tokenizer = getTokenizer(); }
+			catch (NumberFormatException e2)  { error2("Double"); }
+		}
+	}
+
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe einer
+	 * Gleitpunktzahl doppelter Genauigkeit (64 Bit).
+	 * @param prompt  die auszugebende Zeichenkette.
+	 * @return die eingegebene Gleitpunktzahl.
+	 ****************************************************************/
+	public static double askDouble (String prompt) {
+		print(prompt);
+		return readDouble();
+	}
+
+
+
+
+
+
+	/****************************************************************
+	 * Liest ein Integer-Array vom Terminal.
+	 * @return array  das gelesene Array.
+	 * @throws NoSuchElementException bei unerwarteter Eingabe.
+	 * @throws NumberFormatException  bei falschem Zahlenformat.
+	 ****************************************************************/
+	public static int[] readIntArray () {
+		StringTokenizer     tokenizer;
+		String		    token;
+		int                 anzahl, i;
+
+		while (true) {
+			tokenizer = new StringTokenizer(readString(), ",");
+			anzahl = tokenizer.countTokens();
+
+			if (anzahl > 0) {
+				int[]   array = new int[anzahl];
+
+				try {
+					for (i = 0; i < anzahl; i++) {
+						token = tokenizer.nextToken();
+						array[i] = Integer.valueOf(token).intValue();
+					}
+					return array;
+				}
+				catch (NoSuchElementException e1) { }
+				catch (NumberFormatException e2)  { error2("Integer"); }
+			} else {
+				error3();
+			}
+		}
+	}
+
+	/****************************************************************
+	 * Liest eine Integer-Matrix vom Terminal.
+	 * @return matrix  die gelesene Matrix..
+	 * @throws NoSuchElementException bei unerwarteter Eingabe.
+	 * @throws NumberFormatException  bei falschem Zahlenformat.
+	 ****************************************************************/
+	public static int[][] readIntMatrix () {
+		StringTokenizer     tokenizer;
+		String		    token;
+		int                 zeilen, spalten, i, j, anzahl;
+
+		while (true) {
+			tokenizer = new StringTokenizer(readString(), "/");
+			zeilen = tokenizer.countTokens();
+
+			if (zeilen > 1) {
+				StringTokenizer[]  eingabe = new StringTokenizer[zeilen];
+
+				spalten = 0;
+				try {
+					for (i = 0; i < zeilen; i++) {
+						eingabe[i] = new StringTokenizer(tokenizer.nextToken(), ",");
+						if (eingabe[i].countTokens() > spalten) spalten = eingabe[i].countTokens();
+					}
+				}
+				catch (NoSuchElementException e1) { }
+
+				if (spalten > 0) {
+					int[][]     matrix = new int[zeilen][spalten];
+
+					// Matrix mit 0 initialisieren
+					for (i = 0; i < zeilen; i++) {
+						for (j = 0; j < spalten; j++) {
+							matrix[i][j] = 0;
+						}
+					}
+
+					try {
+						for (i = 0; i < zeilen; i++) {
+							anzahl = eingabe[i].countTokens();
+							for (j = 0; j < anzahl; j++) {
+								token = eingabe[i].nextToken();
+								matrix[i][j] = Integer.valueOf(token).intValue();
+							}
+						}
+
+						return matrix;
+					}
+					catch (NoSuchElementException e1) { }
+					catch (NumberFormatException e2)  { error2("Integer"); }
+				} else {
+					error4();
+				}
+			} else {
+				error5();
+			}
+		}
+	}
+
+	// asking ...
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe eines
+	 * Integer Arrays.
+	 * @return  das gelesene Array.
+	 ****************************************************************/
+
+	public static int[] askIntArray (String prompt) {
+		print(prompt);
+		return readIntArray();
+	}
+
+	/****************************************************************
+	 * Gibt eine Zeichenkette aus und erwartet die Eingabe einer
+	 * Integer Matrix.
+	 * @return  die gelesene Matrix.
+	 ****************************************************************/
+
+	public static int[][] askIntMatrix (String prompt) {
+		print(prompt);
+		return readIntMatrix();
+	}
+
+
+
+//****************************************************************/
+//****************************************************************/
+//
+// auxiliary stuff for writing ...
+//
+//****************************************************************/
+//****************************************************************/
+
+	private static String norm (boolean val) {
+		return Boolean.toString(val);
+	}
+
+	private static String norm (char val) {
+		return Character.toString(val);
+	}
+
+	private static String norm (long number) {
+		return Long.toString(number);
+	}
+
+	private static String norm (float number) {
+		if ( Math.abs(number) < 1e-8F ) { number = 0.0F;}
+		return Float.toString(number);
+	}
+
+	private static String norm (double number) {
+		if ( Math.abs(number) < 1e-8F ) { number = 0.0;}
+		return Double.toString(number);
+	}
+
+//****************************************************************/
+// auxiliary stuff for reading ...
+//****************************************************************/
+// the auxiliary (but central) method
+
+	private static StringTokenizer getTokenizer () {
+		String line;
+		StringTokenizer tok = null;
+		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+		try {
+			line = reader.readLine();
+			if (line == null) { throw new IOException(); }
+			tok = new StringTokenizer(line);
+		}
+		catch  (IOException e) { error1(); }
+		return tok;
+	}
+
+//****************************************************************/
+// error handling ...
+//****************************************************************/
+
+	private static void error1 () {
+		print("***ERROR*** ");
+	}
+
+	private static void error2 ( String kind) {
+		print("Ungueltige " + kind + "-Zahl! (Nochmal eingeben) ");
+	}
+
+	private static void error3 () {
+		print("Ein leeres Array ist nicht erlaubt! (Nochmal eingeben) ");
+	}
+
+	private static void error4 () {
+		print("Eine leere Zeile ist nicht erlaubt! (Nochmal eingeben) ");
+	}
+
+	private static void error5 () {
+		print("Eine Matrix muss mindestens zwei Zeilen besitzen! (Nochmal eingeben) ");
+	}
+}  // end of class Terminal
diff --git a/src/de/itstall/World.java b/src/de/itstall/World.java
index 57f2ba3..458c72d 100644
--- a/src/de/itstall/World.java
+++ b/src/de/itstall/World.java
@@ -3,6 +3,8 @@ package de.itstall;
 public class World {
 	GameField field;
 	Player player;
+	private int lineBreaks = 0;
+	private boolean tempLineBreaks = false;
 
 	public World() {
 		String canvas = "#########      ##      ####    ##      #########";
@@ -14,7 +16,16 @@ public class World {
 		StringBuilder sb = new StringBuilder();
 		String s = this.player.draw(this.field.toString(), this.field.width);
 
-		sb.append("\n\n\n\n\n\n\n");
+		int breaks = this.lineBreaks;
+
+		if(tempLineBreaks) {
+			breaks--;
+		}
+
+		for(int i = 0; i < breaks; i++) {
+			sb.append("\n");
+		}
+
 		for (int y = 0; y < this.field.height; y++) {
 			sb.append(s.substring(y * this.field.width, (y + 1) * this.field.width));
 			sb.append("\n");
@@ -22,4 +33,46 @@ public class World {
 
 		return sb.toString();
 	}
+
+	public void keyPressed(String s) {
+		if( s.isEmpty() ) {
+			return;
+		}
+
+		int x = this.player.pos.getX();
+		int y = this.player.pos.getY();
+
+		switch(s.charAt(0)) {
+			case 'a':
+				x--;
+				break;
+			case 'd':
+				x++;
+				break;
+			case 'w':
+				y--;
+				break;
+			case 's':
+				y++;
+				break;
+			case 'q':
+				System.exit(0);
+			default:
+				System.out.println("Key not found");
+				break;
+
+		}
+		if(this.field.checkField(x, y)) {
+			this.player.pos.setPosition(x, y);
+			System.out.println(this.draw());
+		} else {
+			this.tempLineBreaks = true;
+			System.out.println(this.draw());
+			System.out.println("Feld versperrt");
+		}
+	}
+
+	public void setLineBreaks(int lineBreaks) {
+		this.lineBreaks = lineBreaks;
+	}
 }
-- 
GitLab