private void playGame() {
		// if second player then becomes backup server
		if (gameState.getBackupServerID() == this.id) {
			becomeBackupServer();
		}

		// play
		while (!gameState.isGameOver()) {
			curClock++;
			
			int randSleep = rand.nextInt(PLAYER_MOVE_MAX_DELAY) + 1;
            sleep(randSleep);
           
            Direction dir = getRandomDirection();
            
			try {
				System.err.println("PLAYER: Sending move request no " + curClock + " to Primary Server (" + gameState.getPrimaryServerID() + ")");
				gameState = gameState.getPrimaryServer().move(id, dir, curClock);
			} catch (RemoteException e) {
				System.err.println("PLAYER: Primary Server crashed");
				
				try {
					System.err.println("PLAYER: Redirecting move request no " + curClock + " to Backup Server (" + gameState.getBackupServerID() + ")");
					gameState = gameState.getBackupServer().move(id, dir, curClock);
				} catch (RemoteException ee) {
					System.err.println("PLAYER: Primary and Backup Server not supposed to crash at the same time");
					ee.printStackTrace();
					System.exit(1);
				}
			}


			System.err.println("PLAYER: Request " + curClock + " ACK'd");
			if (PLAYER_PRINTS_STATES) {
				System.err.println("PLAYER: Current game state:\n" + gameState + "\n");
			}
			// Backup server crashed and current player
			// becomes new backup server
			if (gameState.getBackupServerID() == this.id && !isBackupServer) {
				becomeBackupServer();
			}
		}
	}