# ANALYSE DE CARTE# ## COMPARAISON DE CARTE## **ComparaisonDeCarte(CarteMere:Matrice(4,3), Carte:Matrice(4,3))** : entier **Entrées** : **CarteMere** et **Carte** :Matrice(4,3) **Sortie** : entier **Objectif** : Determine si les Cartes possèdent une liaison ( point <=> cercle ) ### DEBUT### > ###Variables locales : > **Cox1,Cox2,Coy1,Coy2** des entiers > > --- > > **Si** **CarteMere** est NULL alors > >// L'assemblage est parfait car il n'y a pas de contrainte > >> retourne 2 > >**Fin Si** > >//Recherche des coordonnées du point et du cercle sur la variable **Carte** > > **Cox1,Coy1,Cox2,Coy2** = rechercheCo(**Carte**) > > > // **CAS N°1 :** Il existe déjà un ensemble ( point <=> cercle) sur **CarteMere** là où **Carte** posséde un point ou un rond > > **Si** **CarteMere**(Coy1,Cox1) == 3 ou **CarteMere**(Coy2,Cox2) == 3 alors > >>// Impossible d'empiler > >>retourne 0 > >**Fin si** > >// **CAS N°2 :** L'empilement est parfait ! Les coordonnées du point et du cercle de **Carte** peuvent créer deux liaisons ( point <=> cercle ) avec **CarteMere** > >**Si** **CarteMere**(Coy1,Cox1) == 1 **et** **CarteMere**(Coy2,Cox2) == 2 alors > >>// Les coordonnées sont bonnes > >>retourne 2 > >Fin Si > >// **CAS N°3 :** Il est possible de créer une liaison ( point <=> cercle ) entre **CarteMere** et **Carte** > >**Si** **CarteMere**(Coy1,Cox1) == 1 **ou** **CarteMere**(Coy2,Cox2) == 2 alors > >>//Liaison Possible > >>retourne 1 > >**Fin si** > >// **CAS N°4 :** On ne peut rien faire avec ces cartes > >retourne 0 ###FIN ##COMPARAISON TOTAL DE LA CARTE **ComparaisonTotal(CarteMere:Matrice(4,3) d'entiers,CarteFille:Matrice(4,3), index entier)**:entier,Tableau(4,3) d'entiers **Entrees** : **CarteMere,CarteFille** :Matrice(4,3), **index** entier **Sortie** : entier,Matrice(4,3) **Objectif** : Determine si les Cartes possèdent une liaison ( point <=> cercle ) MAIS avec toutes les possibilitées de rotation de **Carte** ###DEBUT >###Variables locales > > **Code,Code1** des entiers > >--- > >**Si** **CarteMere** est NULL alors > > >> // Il n'y a rien à faire > >>retour **1,CarteFille** > >**Fin si** > >// **Note** : Cette fonction sait combien de fois elle a été appelée grâce à la variable **index**. En effet pour une carte donnée il existe 4 variantes d'elle-même. La fonction va donc appeler au fur et à mesure toutes ses variantes et les tester. > >//On obtient ces opérations suivantes > > **Si** index == 1 alors > >> // On effectue une rotation verticale pour obtenir **la 2eme variante** > >>CarteFille <- rotationVerticale(CarteFille) > >**Fin Si** > >**Si** index == 2 alors > >>// On effectue une rotation Horizontale pour obtenir **la 3eme variante** > >>CarteFille <- rotationHorizontale(CarteFille) > >**Fin Si** > >**Si** index == 3 alors > >>// On effectue une rotation Vertivale pour obtenir **la 4eme variante** > >>CarteFille <- rotationVerticale(CarteFille) > >**Fin Si** > >**Si** index == 4 alors > >>// aucune variante ne colle avec **CarteMere** > >>retourne **-1,CarteMere** > >**Fin Si** > >//Après avoir modifié **CarteFille** on peut tester la variante avec **CarteMere** > >**Code** <- ComparaisonDeCarte(**CarteMere**,**CarteFille**) > >**Si** **Code** == 2 alors > >>// L'empilement est parfait donc on empile les cartes > >>**CarteMere** = **CarteMere** + **CarteFille** > >>retourne **Code,CarteMere** > >**Fin si** > >**Si** **Code** == 1 alors* > >> // **NOTE :** il est important de vérifier ce cas présent. En effet si une seule liaison est possible, certaines cartes offrent plusieurs possibilités d'assemblage impliquant deux variantes. Comment savoir laquelle est la bonne pour le tas final ? La fonction va le faire remarquer. > >>**Code1** <- ComparaisonDeCarte(**TasDeCarte,rotationHorizontale(CarteFille)**) > >>**Si** **Code1** == 1 alors > >>>// Les variantes horizontalement symétriques possèdent toutes les deux une liaison avec **CarteMere** on ne peut pas savoir laquelle est la bonne pour faire le tas final. > >>> retour **4, CarteMere** > >>**Fin Si** > >**Si** **Code1** == 2 alors > >>>// La variante horizontalement symétrique s'assemble parfaitement, on l'assemble donc. > >>> **CarteMere** = **CarteMere + rotationVerticale(CarteFille)** > >>>retourne **2, CarteMere** > >>**Fin Si** > >>// On teste maintenant avec la variante verticalement symétrique > >>**Code1** <- ComparaisonDeCarte(**CarteMere**,**rotationVerticale(CarteFille)**) > >>**Si** **Code1** == 2 alors > >>>Code <- 2; > >>> TasDeCarte <- TasDeCarte + rotationVerticale(CarteFille) > >>>retour Code, TasDeCarte > >>**Fin Si** > >> **Si** Code1 == 1 alors > >>> Code <- 3 > >>> retour Code,TasDeCarte > >>**Fin Si** > >**Fin si** > >**Si** Code == 0 alors > >> retour ComparaisonTotal(TasDeCarte,CarteFille,index + 1) > >**Fin si** > ### FIN