Untitled
user_9243973
plain_text
2 years ago
7.8 kB
4
Indexable
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> #include <dos.h> #include <dir.h> typedef struct Liste*Pliste; typedef struct Liste{int x;int y;int nature;Pliste Suiv;}Cellule; int n,m,k1,k2; int T[100][100]; Pliste Tete; //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 voisin 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("_"); } } //la fonction pour les couleurs void SetColor(int ForgC) { WORD wColor; HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; //We use csbi for the wAttributes word. if(GetConsoleScreenBufferInfo(hStdOut, &csbi)) { //Mask out all but the background attribute, and add in the forgournd color wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F); SetConsoleTextAttribute(hStdOut, wColor); } return; } /*void ExtraireObjet(int T[][100],int i,int j,int n,int m,int nature) { if (T[i][j]==nature) {T[i][j]=9; printf("(%d %d)\n",i,j); if (j>0){ ExtraireObjet(T,i,j-1,n,m,nature);} //case gauche if (i>0){ ExtraireObjet(T,i-1,j,n,m,nature);}// case haut if (i<n-1){ExtraireObjet(T,i+1,j,n,m,nature);}//bas if (j<m-1){ExtraireObjet(T,i,j+1,n,m,nature);}//droite printf("nb de parcelles\n"); } } typedef struct Liste*Pliste; typedef struct Liste{int val1;int val2;Pliste Suiv;}Cellule; void ExtraireObjet(int T[][100],int i,int j,int n,int m,int nature,Pliste P) { Pliste Q,B,R,Tete; int Pi,Pj,Ti,Tj; if (T[i][j]==nature) { T[i][j]=9; printf("(%d %d)\n",i,j); P=malloc(sizeof(Cellule)); P->val1=i;P->val2=j; if(i<=Ti && j<=Tj){P->Suiv=Tete;Tete=P;Ti=i;Tj=j;Q=Tete->Suiv;B=P;} else {if (i<=Ti) {P->Suiv=Q;B->Suiv=P;B=P;} /*else {if(j<=Ti) {if(i>=Pi) && (j>=Pj) {R=Q;R->Suiv=P;P->Suiv=NULL;P=Q;Pi=i;Pj=j;}} else{if(j<Pj){P->Suiv=Q;R->Suiv=P;P=Q;Pi=i;Pj=j;}}} else {if(i>=Pi && j>=Pj) {R=Q;R->Suiv=P;P->Suiv=NULL;P=Q;Pi=i;Pj=j;} else{if(j<Pj){P->Suiv=Q;R->Suiv=P;P=Q;Pi=i;Pj=j;}}}} if (j>0){ ExtraireObjet(T,i,j-1,n,m,nature,P);} //case gauche if (i>0){ ExtraireObjet(T,i-1,j,n,m,nature,P);}// case haut if (i<n-1){ExtraireObjet(T,i+1,j,n,m,nature,P);}//bas if (j<m-1){ExtraireObjet(T,i,j+1,n,m,nature,P);}//droite //printf("nb de parcelles\n"); } }*/ /*int ExtraireObjet(int T[][100],int i,int j,int n,int m,int nature,Pliste Tete) { Pliste P,Q; int A,B; if (T[i][j]==nature) { T[i][j]=9; if (j>0){ ExtraireObjet(T,i,j-1,n,m,nature,Tete);} //case gauche if (i>0){ ExtraireObjet(T,i-1,j,n,m,nature,Tete);}// case haut if (i<n-1){ExtraireObjet(T,i+1,j,n,m,nature,Tete);}//bas if (j<m-1){ExtraireObjet(T,i,j+1,n,m,nature,Tete);}//droite P=malloc(sizeof(Cellule)); P->x=i; P->y=j; P->Suiv=Tete; Tete=P; afficheliste(Tete); } } */ void afficheliste(Pliste Tete) { Pliste P; P=Tete; while(P!=NULL) { printf("(%d %d)",P->x,P->y);P=P->Suiv; } } void triliste(Pliste *Tete) { Pliste Q,P; int A,B; P=*Tete; while(P->Suiv!=NULL) { Q=P->Suiv; while(Q!=NULL) { if (P->x >= Q->x) { A=P->x; B=P->y; P->x=Q->x; P->y=Q->y; Q->x=A; Q->y=B; }; if (P->x == Q->x && P->y >= Q->y) { A=P->x; B=P->y; P->x=Q->x; P->y=Q->y; Q->x=A; Q->y=B; }; Q=Q->Suiv; } P=P->Suiv; } } Pliste ExtraireObjet(int T[][100],int i,int j,int n,int m,int nature) { Pliste P,Q; int A,B;; if (T[i][j]==nature) { T[i][j]=9; k1=k1+1; if (j>0) { ExtraireObjet(T,i,j-1,n,m,nature);} //case gauche if (i>0) { ExtraireObjet(T,i-1,j,n,m,nature);}// case haut if (i<n-1){ExtraireObjet(T,i+1,j,n,m,nature);}//bas if (j<m-1){ExtraireObjet(T,i,j+1,n,m,nature);}//droite P=malloc(sizeof(Cellule)); P->x=i; P->y=j; P->nature = nature; P->Suiv=Tete; Tete=P; k2=k2+1;k1=k1-1; } if(k1==0 && k2>0){afficheliste(Tete);triliste(&Tete); printf("\n"); afficheliste(Tete);} return (Tete); } void AfficheObjet(int T[][100],int i,int j,int n,int m,int nature) { Pliste P; P= ExtraireObjet(T,i,j,n,m,nature); for(int a=0; a<n;a++) { printf("\n"); for(int b=0;b<m;b++) { if(P!= NULL) { if(P->nature==1){SetColor(1);} if(P->nature==2){SetColor(4);} //pour que chaque nature ait sa propre couleur if(P->nature==3){SetColor(6);} //on appelle la fonction des couleurs if(P->nature==4){SetColor(2);} if(a==P->x && b==P->y) { printf("0"); P=P->Suiv; } else { SetColor(15); printf("."); } } else { SetColor(15); printf("."); } } } } int main() { int i,j,nature; Pliste P; k1=0;k2=0; 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("\nentrez les coordonnees i et j: "); scanf("%d",&i); scanf("%d",&j); printf("entrez la nature de la parcelle: "); scanf("%d",&nature); Tete=NULL; AfficheObjet(T,i,j,n,m,nature); //afficheliste(Tete);printf("\n"); /*printf("%d\n", sizeof(maliste)); printf("%d\n", sizeof(Cellule)); printf("%d\n",sizeof(int)); printf("%d\n",sizeof(Pliste));*/ //afficheliste(maliste); //ok /*triliste(&Tete); printf("\n"); afficheliste(Tete);*/ return 0; }
Editor is loading...