private void initializeGame() {
		players = new Player[numPlayers];
		firstPlayerIndex = (int) (numPlayers * Math.random());
		index = firstPlayerIndex;
		playerPnlHash.clear();
		
		initGUI();
		pushScreen(gameScreen);
		
		map = new Map(this, useEpicMap);
		
		int half = (int) Math.ceil(numPlayers / 2.0);
		for (int i = 0; i < numPlayers; i++) {
			if (!playerType[i].isSelected()) {
				players[i] = new Player(i + 1, playerNames[i].getText(), PLAYER_COLOURS[i]);
			} else {
				players[i] = new AIPlayer(i + 1, PLAYER_COLOURS[i], this);
			}
			
			PlayerPanel playerPnl = new PlayerPanel(players[i]);
			if (i < half) {
				sidePnl1.add(playerPnl);
			} else {
				sidePnl2.add(playerPnl);
			}
		}
		
		activePlayer = players[index];
		playerPnlHash.get(activePlayer).setActive(true);
		message(activePlayer.name + ", you have " + placeNum + " armies left to place.");
		
		ArrayList<Territory> territories = map.getTerritories();
		int terrCount = territories.size();
		deck.removeAll(deck);
		for (int i = 0; i < terrCount; i++) {
			Territory territ = territories.remove((int) (Math.random() * territories.size()));
			territ.setOwner(players[i % numPlayers]);
			deck.add(new Card(territ, i % 3));
			gamePnl.add(territ.getButton());
		}
		
		for (Player player : players) {
			playerPnlHash.get(player).update();
		}
		log("Game Initialized.");
		
		ImageIcon img = (useEpicMap) ? new ImageIcon(getClass().getResource("Epic.jpg")) : new ImageIcon(getClass().getResource("Regular.jpg"));
		JLabel imgLbl = new JLabel(img);
		gamePnl.add(imgLbl);
		imgLbl.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
		
		saveGame();
		beginPlacement();
	}