public void run() {
		// FIXME: Do not allow other players to be added.
		/*
		 * 			[[ INITIALIZE GAME ]]
		 */
		map = MapImporter.getMap(); // get default map
		setPlayerCredentials();
		map.assignPlayersToBases(players.values(), getInitialShips()); // set bases
		setGameConstants();
		viz = new BCViz(players.values(), map.getStructures(), map.getNumCols(), map.getNumRows());
		
		//record the initial game settings into the transcript file
		recordGameSettings();
		
		/*
		 * 			[[ PLAY GAME ]]
		 */
		Map<Integer, List<ActionResult>> actionResults = new HashMap<Integer, List<ActionResult>>();
		for(ServerPlayer p : players.values())
			actionResults.put(p.getId(), new LinkedList<ActionResult>());
		int livePlayers = 0;
		for (ServerPlayer player: players.values()) {
			if (player.isAlive()) {
				livePlayers++;
			}
		}
		for (int turnCount = 0; turnCount<MAX_NUM_TURNS && livePlayers > 1;turnCount++) {
			doTurn(actionResults, turnCount);
			viz.updateGraphics(turnCount);
			livePlayers = 0;
			for (ServerPlayer player: players.values()) {
				if (player.isAlive()) {
					livePlayers++;
				}
			}
			recordGameChange(turnCount);
		}
		
		/*
		 * 			[[ END GAME ]]
		 */
		

		recordGameEnd();
		endGameGenerateResults();
		manager.removeGame(this);
	}