# ANALYSE DE CARTE # ## DEFINITION DES STRUCTURES ## ### ENUMERATION FORMEFIGURE ### - **Rond** :rond - **Carre** :carre - **Triangle** : triangle - **Pentagone** : pentagone - **Losange** : losange --- ### ENUMERATION TYPEFIGURE ### - **Pleine** : pleine - **Creuse** : creuse --- ### STRUCTURE FIGURE ### ### Attributs ### - **Figure.type** : TypeFigure - **Figure.forme** : FormeFigure - **Figure.X** : entier - **Figure.Y** : entier - **Figure.HTML** : code HTML ### Méthodes ### - **Figure.get...**: Retourne l'attributs voulus --- ###STRUCTURE CARTE ### ### Attributs ### - **Carte.indentifiant** : entier - **Carte.row** : eniter - **Carte.column** : entier - **Carte.HTML**: code HTML - **Carte.Matrice**: entier[n][k]; - **Carte.FigurePleine** : Figure - **Carte.FigureCreuse** : Figure ### Méthodes ### - **Carte.carteVerticale** : obtient sa carte verticalement symétrique. - **Carte.carteHorizontale** : obtient sa carte horizontalement symétrique. - **Carte.get...** : Retourne l'attributs voulus --- ## COMPARAISON DE CARTE ## **ComparaisonDeCarte(CarteMere: Carte, CarteFille: Carte)** : entier **Entrées** : - **CarteMere** : Carte témoin, "support" de l'assemblage, il est inutile de modifier sa structure. - **CarteFille** : Carte sujet, "pièce" à tester sur le support. **Objectif** : Determine si les Cartes possèdent une liaison ( FigurePleine <=> FigureCreuse ) **Sortie** : entier **Sortie Possible :** - **2** : L'assemblage est parfait ou sans contrainte (Carte NULL). **Deux liaisons** possible. - **1** : L'assemblage n'est pas parfait. Cependant, **Une liaison** possible. - **0** : L'assemblage est impossible. **Aucune liaison** possible. ### COMMENT FAIRE ### - Recherhcer les coordonnées des **Figures** de **CarteMere** - Comparer ces coordonnées sur l'attribut **Carte.Matrice** de **CarteFille** > Si les coordonnées de **CarteMere.FigurePleine** sont égales aux coordonnées de **CarteFille.FigureCreuse** et inversement on considère ce cas comme **une liason**. > > Faire de même pour les autres **Figures**. - **Retourner l'entier correspondant à la situation** --- ## COMPARAISON TOTALE DE LA CARTE **ComparaisonTotal(CarteMere:Carte d'entiers,CarteFille:Carte, index entier)**:entier,Carte **Entrees** : - **CarteMere** : Carte témoin, "support" de l'assemblage, il est inutile de modifier sa structure. - **CarteFille** : Carte sujet, "pièce" à tester sur le support. - **index** : entier déterminant le nombre d'itération de la fonction **Objectif** : Determine si les Cartes possèdent une liaison MAIS avec toutes les possibilitées de rotation de **CarteFille** **Sortie** : entier, Carte **Sortie Possible :** - **2,CarteMere** : L'assemblage est parfait ou sans contrainte (Carte NULL). **Deux liaisons** possible. - **1,CarteFille** : **CarteMere** est NULL, L'assemblage est possible. - **1,CarteMere** : L'assemblage n'est pas parfait. Cependant, **Une liaison** possible. - **3,CarteFille** : Il existe deux possibilitées verticalement symétrique d'assemblage. On retourne la **CarteFille** qui peut s'assembler de deux façons. - **4,CarteFille** : Il existe deux possibilitées horizontalement symétrique d'assemblage. On retourne la **CarteFille** qui peut s'assembler de deux façons. - **-1,CarteMere** : Il est impossible d'assembler **CarteFille** avec **CarteMere** ### COMMENT FAIRE ### - On regarde si **CarteMere** n'est pas NULL pour savoir si une comparaison d'assemblage est possible. >Si **CarteMere** est NULL on retourne la sortie associée à ce cas (**1,CarteFille**) - On regarde **index** pour savoir quelle variante de **CarteFille** (carteverticale,cartehorizontale) tester sur **CarteMere**. Si toutes les variantes ont été testées, alors on retourne **-1,CarteMere**. - On teste la variante avec la fonction **COMPARAISON DE CARTE** et on traite la sortie de cette comparaison en retournant des informations selon les cas. ### TRAITEMENT DE COMPARAISON DE CARTE ### > **Si Sortie = 2** > > L'assemblage est parfait **CarteFille** est assemblée avec **CarteMere** et on retourne **2,CarteMere** > >--- >**Si Sortie = 1** > > On reagarde si un assemblage symétrique (Verticalement ou Horizontalement) est possible. > S'il en existe un on retourne **la sortie associée** au différent cas. > > **Sinon**,**CarteFille** est assemblée avec **CarteMere** et on retourne **1,CarteMere** > >--- >**Si Sortie = 0** > > L'assemblage de la variante de **CarteFille** et **CarteMere** est impossible, on continue en testant **COMPARAISON_TOTAL_DE_LA_CARTE**(CarteMere,CarteFille,**index+1**) > --- # ASSEMBLAGE # **Assemblage(TasDeCarte: Carte[], CarteMere:Carte** :entier, Carte **Entree** : - **TasDeCarte** : Liste de **Carte** selectioonnées afin de tester si un assemblage valide est possible. - **CarteMere** : Carte témoin, "support" de l'assemblage, il est inutile de modifier sa structure. **Objectif** : Savoir si un tas de carte envoyé en paramètre peut être empiler ou non **Sortie** : entier, Carte **Sortie Possible** - **2,CarteMere** : L'assemblage final est correcte. - **0,CarteMere** : L'assemblage final n'est pas correcte. ### COMMENT FAIRE ### - On regarde si la liste **TasDeCarte** n'est pas vide pour savoir si des **Cartes** doivent être encore testées. > Si **TasDeCarte** est vide on retourne **0,CarteMere** - On teste avec la fonction **COMPARAISON TOTALE DE CARTE** , **CarteMere** et la tête de liste de **TasDeCarte** et on traite les différentes sorties. ### TRAITEMENT DE COMPARAISON TOTALE DE LA CARTE ### > **TRAITEMENT** Si **TasDeCarte** est maintenant **vide** > >>--- > >> **Si Sortie = 2** > >> L'assemblage est valide on retourne **2,CarteMere** > >>--- >>**Si Sortie != 2** > >> Il n'y plus de carte à tester et l'assemblage n'est pas parfait. L'assemblage n'est donc pas valide on retourne **0,CarteMere** > >>--- > > **TRAITEMENT** Si **TasDeCarte** n'est toujours **pas vide** > >>>--- > >> **Si Sortie = 2 ou -1** > >> L'assemblage est parfait ou impossible. Cependant il y a encore des cartes à tester. On ajoute donc la **Carte** contenue dans la **Sortie** de la fonction **COMPARAISON TOTALE** à la fin de la liste **TasDeCarte** et on retourne une nouvelle itération de la fonction **Assemblage** avec les variables remises à jour. > >>--- >>**Si Sortie = 3** > >> Il y a plusieurs possibilités verticalement symétrique d'assemblage, on va donc tester les deux cas avec **Assemblage** et les nouvelles variables. Si la sélection est correcte, il y a au moins une possibilité de bonne. > >> Sinon on retourne **0,CarteMere** > >>--- >>**Si Sortie = 4** > >> Il y a plusieurs possibilités horizontalement symétrique d'assemblage, on va donc tester les deux cas avec **Assemblage** et les nouvelles variables. Si la sélection est correcte, il y a au moins une possibilité de bonne. > >> Sinon on retourne **0,CarteMere** > >>--- > >>**Si Sortie = 1** > >> Il y a une seule possibilité d'assemblage. On continu de tester avec **Assemblage** et les nouvelles variables. > >>---