You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
213 lines
7.0 KiB
213 lines
7.0 KiB
# 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.
|
|
>
|
|
>>---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|