List<Casella> pendents = new LinkedList<Casella>();
pendents.add( inici );
while ( !pendents.isEmpty() ) //mentres hi hagi caselles a la llista, seguir iterant.
{
Casella casella = pendents.get( 0 ); //obtenim el vei
pendents.remove( casella ); //el treiem de pendents
grup.add( casella ); //l'afegim al grup.
//Comprovem si esta a la cantonada, primer pel jugador A i despres pel B i si ho està mirem totes les cantonades.
if ( jo == EstatCasella.JUGADOR_A &&
( casella.getColumna() == 0 || casella.getColumna() == tauler.getMida() - 1 ) )
{
for ( int i = 0; i < tauler.getMida(); i++ )
{
Casella casellaLateral = new Casella( i, casella.getColumna() );
if ( esPotAfegir( casellaLateral, pendents, jo ) )
{
pendents.add( casellaLateral );
}
}
}
else if ( jo == EstatCasella.JUGADOR_B &&
( casella.getFila() == 0 || casella.getFila() == tauler.getMida() - 1 ) )
{
for ( int i = 0; i < tauler.getMida(); i++ )
{
Casella casellaLateral = new Casella( casella.getFila(), i );
if ( esPotAfegir( casellaLateral, pendents, jo ) )
{
pendents.add( casellaLateral );
}
}
}
List<Casella> veins = tauler.getVeins( casella ); //obtenim els veins.
for ( int i = 0; i < veins.size(); i++ )
{
Casella vei = veins.get( i );
if ( esPotAfegir( vei, pendents, jo ) )
{
//si te el mateix estat i no està afegida al grup, la fiquem a pendents.
pendents.add( vei );
}