private void play()
	{	
		Player[] pList = new Player[playerNumber];
		ArrayList<Color> factions = Faction.allFactions();
		ArrayList<PlayerInfo> infoList = new ArrayList<PlayerInfo>(infos.length);
		for(PlayerInfo info : infos)
		{
			infoList.add(info);
		}
		
		Random random = new Random();
		int index = 0;
		while(infoList.size() != 0)
		{
			int next = random.nextInt(infoList.size());
			pList[index] = infoList.remove(next)
					.getPlayer(chooseFaction(factions));
			index++;
		}
		
		GameState temp = null;
		try {
			temp = new GameState(pList, new Board(), 
					decks[deckSelect.getSelectedIndex()].newInstance(), 
					bags[bagSelect.getSelectedIndex()].newInstance(),
					counters[counterSelect.getSelectedIndex()].newInstance());
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		
		final GameState state = temp;
		
		Thread gameThread = new Thread() {
	        public void run () {
	        	Game.run(state, getSettings());
	        }
	    };
	    gameThread.start();
	    
		Thread t = new Thread() {
	        public void run () {
					SwingUtilities.invokeLater(new Runnable() {

					    public void run () {
					    	frame.dispose();
					    	settingsFrame.dispose();
					    }
					});
	        }
	    };
	    t.start();	
	}