Vous connaissez certainement les jeux de la trempe des kikoo et autres, dont le but est de faire disparaitre des blocs de couleurs en cliquant sur ceux ci, à condition qu´il existe un ou plusieurs blocs adjacents de la même couleur.
J´aimerais assez me lancer dans la création d´un jeu du même type ( en C++ bien sûr
) , mais je souhaiterais élaborer un algorithme efficace pour réaliser cette tache ( calcul des blocs ) .
Je viens d´en rédiger un en utilisant la récursivité, mais je craint fort que la mémoire sature ou que les performances soient excécrables.
Ca donne ca en pseudocode ( j´ai pas mis les protoypes ) :
. ..
int GetNbBlocks( int couleur ( du bloc cliqué ) )
{
int nombre = 1;
nombre += GetBlocksRight( couleur ) ;
nombre += GetBlocksLeft( couleur ) ;
nombre += GetBlocksUp( couleur ) ;
nombre += GetBlocksDown( couleur ) ;
return nombre;
}
int GetBlocksRight( int couleur )
{
int nb = 0;
Si le bloc courant ( à droite donc ) est ! = couleur
return 0;
sinon // Regarde les blocs adjacents
nb++;
nb += GetBlocksLeft( couleur ) ;
nb += GetBlocksUp( couleur ) ;
nb += GetBlocksDown( couleur ) ;
return nb;
}
int GetBlocksLeft( int couleur )
{
int nb = 0;
Si le bloc courant ( à gauche donc ) est ! = couleur
return 0;
sinon // Regarde les blocs adjacents
nb++;
nb += GetBlocksRight( couleur ) ;
nb += GetBlocksUp( couleur ) ;
nb += GetBlocksDown( couleur ) ;
return nb;
}
[ etc . .. ]
Bon la j´ai rédigé ca en C, mais je l´implémenterais en C++.
Dans le programme, on trouvera les instructions :
int blocs;
if((blocs = GetNbBlocks(couleurBlocClique))> 1 )
// Clacul du score...
Je souhaiterais l´implenter de manière itérative ( j´y ai déjà réfléchit, mais cela s´avère souvent complexe face à la simplicité de la récursivité ) .
Vous avez une idée ? 