@SuppressWarnings("serial")
	World() {
		
		currentScreen = currentMap.getScreens().get(currentScreenIndex);
		previousScreen = currentScreen;
		player = currentScreen.findPlayer();

		// Map Listening

		class Methods {
			Methods() {
			}

			boolean onScreen(Monster m) {
				return (0 <= m.getX()) && (760 >= m.getX()) && (0 <= m.getY())
						&& (560 >= m.getY());
			}
		}

		final Methods methods = new Methods();

		/*
		 * Key Bindings created on initialization
		 */
		// Escape Key
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "quit");

		actionMap.put("quit", new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});

		// Down Key
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "downPressed");

		actionMap.put("downPressed", new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				previousScreen = currentScreen;
				player.setDirection(3);
				player.move();
				final boolean onScreen = methods.onScreen(player);
				if (!onScreen) {
					if (currentScreen.hasDown()) {
						currentScreen = currentScreen.getDown();
						ArrayList<Monster> monsters = currentScreen
								.getMonsters();
						monsters.add(player);
						player.setY(0);
					} else {
						player.moveUp();
					}
				}
				if (player.collideTile(currentScreen.getTiles())) {
					player.moveUp();
				}
				player.setDirection(-1);
			}
		});

		// Up Key
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "upPressed");

		actionMap.put("upPressed", new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				previousScreen = currentScreen;
				player.setDirection(1);
				player.move();
				final boolean onScreen = methods.onScreen(player);
				if (!onScreen) {
					if (currentScreen.hasUp()) {
						currentScreen = currentScreen.getUp();
						ArrayList<Monster> monsters = currentScreen
								.getMonsters();
						monsters.add(player);
						player.setY(560);
					} else {
						player.moveDown();
					}
				}
				if (player.collideTile(currentScreen.getTiles())) {
					player.moveDown();
				}
				player.setDirection(-1);

			}
		});

		// Left Key
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "leftPressed");

		actionMap.put("leftPressed", new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				previousScreen = currentScreen;
				player.setDirection(0);
				player.move();
				final boolean onScreen = methods.onScreen(player);
				if (!onScreen) {
					if (currentScreen.hasLeft()) {
						currentScreen = currentScreen.getLeft();
						ArrayList<Monster> monsters = currentScreen
								.getMonsters();
						monsters.add(player);
						player.setX(760);
					} else {
						player.moveRight();
					}
				}
				if (player.collideTile(currentScreen.getTiles())) {
					player.moveRight();
				}
				player.setDirection(-1);
			}
		});

		// Right Key
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0),
				"rightPressed");

		actionMap.put("rightPressed", new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				previousScreen = currentScreen;
				player.setDirection(2);
				player.move();
				final boolean onScreen = methods.onScreen(player);
				if (!onScreen) {
					if (currentScreen.hasRight()) {
						currentScreen = currentScreen.getRight();
						ArrayList<Monster> monsters = currentScreen
								.getMonsters();
						monsters.add(player);
						player.setX(0);
					} else {
						player.moveLeft();
					}
				}
				if (player.collideTile(currentScreen.getTiles())) {
					player.moveLeft();
				}
				player.setDirection(-1);
			}
		});
/*
		// Space Key
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0),
				"spacePressed");

		actionMap.put("spacePressed", new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				player.throwMask();
			}
		});
		*/
	}