4.7 KiB
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