Untitled
unknown
plain_text
2 years ago
4.7 kB
5
Indexable
#include <stdbool.h> #include<stdio.h> #include<stdlib.h> struct Parcelle { int x; int y; }; typedef struct Objet*ListeChainee; typedef struct Objet { struct Parcelle parcelle; ListeChainee suivant;} Maillon; void ExtraireObjet(int** matrice, int n, int m, struct Parcelle parcelle, int valeur, ListeChainee** objet) { // Si l'objet n'a pas encore été créé, on le crée if (*objet==NULL) { *objet = (ListeChainee)malloc(sizeof(Maillon)); (*objet)->parcelle = parcelle; (*objet)->suivant = NULL; } else { // On crée un nouvel élément à ajouter à la fin de la liste struct ListeChainee* nouvel_element = (ListeChainee)malloc(sizeof(struct ListeChainee)); nouvel_element->parcelle = parcelle; nouvel_element->suivant = NULL; // On parcourt la liste pour trouver sa fin struct ListeChainee* element_courant = *objet; while (element_courant->suivant != NULL) { element_courant = element_courant->suivant; } // On ajoute le nouvel élément à la fin de la liste element_courant->suivant = nouvel_element; } int x = parcelle.x; int y = parcelle.y; // Si la valeur de la parcelle est différente de valeur, on arrête la récursion if (matrice[x][y] != valeur) { return; } // On marque la parcelle comme visitée matrice[x][y] = -1; // On récupère les coordonnées des parcelles voisines struct Parcelle voisins[4] = {{x-1, y}, {x+1, y}, {x, y-1}, {x, y+1}}; // On appelle récursivement la fonction sur chacun des voisins for (int i = 0; i < 4; i++) { ExtraireObjet(matrice, n, m, voisins[i], valeur, objet); } } void affichobjet( Pliste P , int T[][100],int n,int m,int x,int y,int nature) { for (int i=0;i<n+2;i++) //pour delimiter la carte : la premiere ligne de_ { printf("_"); } for(int i=0;i<n;i++) { printf("\n"); printf("|"); for (int j=0;j<m;j++) { if (P->x==x && P->y==y && P->nature==T[x][y]) { if(nature==1){printf("color1");} // printf(SetColor(1);} if(nature==2){printf("color2");} // printf(SetColor(4));} if(nature==3){printf("color3");} //printf(SetColor(6));} if(nature==4){printf("color4");} //printf(SetColor(2));} } else { printf(" "); } } printf("|"); } printf("\n"); for (int i=0;i<n+2;i++) // la derniere ligne de _ { printf("_"); } } //Creation void creercarte(int T[][100],int n,int m) { int i,j,r; srand(time(NULL)); for(i=0;i<n;i=i+2) //on avance de deux pas pour travailler que par paire { for (j=0;j<m;j=j+2) { r=(rand()%4)+1; // rand%4 veut dire qu'on remplie avec des 0 1 2 3 on rajoute T[i][j]=r; //+1 pour remplir avec 1 2 3 4 seulement T[i][j+1]=r; T[i+1][j]=r; //on remplie aleatoirement 4 pixels voisins en meme temps et vu que cest T[i+1][j+1]=r; //aleatoire on a au minimum des objets de 4 sinon plus que 4 } } } //Affichage void affichecarte(int T[][100]) { int i,j; for (i=0;i<n+2;i++) //pour delimiter la carte : la premiere ligne de_ { printf("_"); } for(i=0;i<n;i++) { printf("\n"); printf("|"); for (j=0;j<m;j++) { //if(T[i][j]==1){SetColor(1);} //if(T[i][j]==2){SetColor(4);} //pour que chaque nature ait sa propre couleur //if(T[i][j]==3){SetColor(6);} //on appelle la fonction des couleurs //if(T[i][j]==4){SetColor(2);} printf("%d",T[i][j]); } // SetColor(15); //(le 15 la couleur du blanc) pour quil n'y ait que les chiffres en couleurs et non les | printf("|"); } printf("\n"); for (i=0;i<n+2;i++) // la derniere ligne de _ { printf("_"); } } { Pliste p;int i; printf("veuillez entrer les dimensions de votre carte \n"); printf("la longueur:"); scanf("%d",&n); printf("la largeur:"); scanf("%d",&m); printf("la carte : \n"); creercarte(T,n,m); affichecarte(T); printf("\n veuillez entrer la nature de la zone dont vous voulez voir lobjet "); scanf("%d",&nature); printf("les coordonnées : \n x:"); scanf("%d",&Parcelle.x); printf("\n y:"); scanf("%d",&Parcelle.y); ExtraireObjet(&T,n,m,Parcelle,nature,&Objet); affichobjet(P,T,n,m,x,y,nature); return 0; }
Editor is loading...