private ArrayList<Position> obtenirPositionsDesCasesDesPionsAInverser(
			Position unePosition) throws AucunPionARetournerExeption
	{
		ArrayList<Position> positionsDesCasesDesPionsAInverser = new ArrayList<Position>();
		Case laCase = this.plateau.obtenirCase(unePosition);
		Couleur laCouleurDuPionPose = this.plateau.obtenirCase(unePosition)
				.obtenirPion().obtenirCouleur();

		for (Direction direction : Direction.values())
		{

			Position laPositionVoisine = unePosition.obtenirVoisine(direction);

			if (!this.plateau.estPositionValide(laPositionVoisine))
				continue;

			Case laCaseVoisine = this.plateau.obtenirCase(laPositionVoisine);

			if (!laCaseVoisine.estOccupee())
				continue;

			if (laCaseVoisine.obtenirPion().obtenirCouleur() == laCouleurDuPionPose)
				continue;

			Position positionSuivante = laPositionVoisine;

			while (true)
			{
				ArrayList<Position> positionsTemporaires = new ArrayList<Position>();
				positionsTemporaires.add(positionSuivante);
				positionSuivante = positionSuivante.obtenirVoisine(direction);

				if (!this.plateau.estPositionValide(positionSuivante))
				{
					positionsTemporaires.clear();
					continue;
				}
				else
				{
					Case caseSuivante = this.plateau
							.obtenirCase(positionSuivante);
					if (!caseSuivante.estOccupee())
					{
						positionsTemporaires.clear();
						continue;
					}
					else
					{
						if (caseSuivante.obtenirPion().obtenirCouleur() == laCouleurDuPionPose)
							positionsDesCasesDesPionsAInverser
									.addAll(positionsTemporaires);
						continue;
					}
				}
			}
		}

		if (positionsDesCasesDesPionsAInverser.isEmpty())
			return positionsDesCasesDesPionsAInverser;
		else
			throw new AucunPionARetournerExeption();
	}