public boolean creaUsuari( String nom, String contrasenya, TipusJugadors tipus_jugador )
			throws IllegalArgumentException, IOException
	{
		if ( tipus_jugador == TipusJugadors.JUGADOR )
		{
			if ( !nom.matches( UsuariHex.getCaractersPermesos() ) )
			{
				throw new IllegalArgumentException( "El nom d'usuari conté caràcters il·legals. Només s'accepten " +
				                                    "caràcters alfanumèrics (sense accents), espais i guions baixos." );
			}

			if ( UsuariHex.getNomsNoPermesos().contains( nom ) )
			{
				throw new IllegalArgumentException( "No es permet utilitzar aquest nom d'usuari. Els noms no " +
				                                    "permesos són " + UsuariHex.getNomsNoPermesos().toString() );
			}

			UsuariHex usuari_hex = new UsuariHex( nom, contrasenya, TipusJugadors.JUGADOR );
			if ( UsuariHexGstr.getInstancia().existeixElement( usuari_hex.getIdentificadorUnic() ) )
			{
				throw new IllegalArgumentException( "El nom d'usuari ja existeix." );
			}
			else
			{
				if ( !UsuariHexGstr.getInstancia().guardaElement( usuari_hex ) )
				{
					throw new IOException( "No s'ha pogut guardar el jugador." );
				}
			}
			Ranquing.getInstancia().actualitzaRanquingUsuari( usuari_hex );
		}
		else
		{
			UsuariHex usuari_ia = new UsuariHex( tipus_jugador.getNomUsuari(), "", tipus_jugador );
			if ( !UsuariHexGstr.getInstancia().guardaElement( usuari_ia ) )
			{
				throw new IOException( "No s'ha pogut guardar el jugador." );
			}
			Ranquing.getInstancia().actualitzaRanquingUsuari( usuari_ia );
		}
		return true;
	}