Untitled
user_9243973
plain_text
2 years ago
6.5 kB
4
Indexable
#include <stdlib.h> #include <time.h> #include <windows.h> #include <dos.h> #include <dir.h> #include "LibPileFileInt.c" int x,y,nature,n,m,i2; int T[100][100]; //Declaration typedef struct Objet*Pliste; typedef struct Objet { int nature;int x; int y; Pliste suiv ;} Parcelle ; Pliste P ; typedef struct Tab{int x; int y ;int nature;}Tab; Tab T2; //fonction qui chaine Pliste Chainer(Tab T2[], int i2,int *i3) { Pliste T; if(*i3==i2) { return NULL; } else { T=malloc(sizeof(Parcelle)); T->x=T2[*i3].x; T->y=T2[*i3].y; T->nature=T2[*i3].nature; T->suiv=Chainer(T2,i2,*i3++); } return T; } //fonction qui verifie si une parcelle est deja dans le tableau ou pas pour eviter les occurences int verif(Tab T2[],int x,int y,int i2) { for(int i=0;i<i2;i++) { if(T2[i].x ==x && T2[i].y==y) { return 1; } } return 0; } //fonction qui trie le tableau void trier (Tab (T2[100]),int i2) { int i,j; for(i=0;i<i2;i++) { for(j=i+1;j<i2-1;j++) { if(((T2[i].x) > (T2[j].x)) || ((T2[i].x)== (T2[j].x) && (T2[i].y) > (T2[j].y))) { int a,b; a= (T2[i].x); b= (T2[i].y); (T2[i].x) = (T2[j].x); (T2[i].y) = (T2[j].y); (T2[j].x) = a; (T2[j].y)= b; } } } } //extraireobjet (qst3) Pliste CreerObjet (int T[][100],int n,int m,int x,int y,int nature,int *i2,Tab T2[100]) { int i,j; int i3=0; printf("chainage1"); T2[*i2].x=x; T2[*i2].y=y; T2[*i2].nature=T[x][y]; *i2++; printf("chainage2"); if(y<m && T[x][y+1]==nature && verif(T2,x,y+1,&i2)==0){printf("chainage3");CreerObjet(T,n,m,x,y+1,nature,&i2,T2);} if(x>1 && T[x-1][y]==nature && verif(T2,x -1,y,&i2)==0){printf("chainage4");CreerObjet(T,n,m,x-1,y,nature,&i2,T2);} if(x<n && T[x+1][y]==nature && verif(T2,x+1,y,&i2)==0){printf("chainage5");CreerObjet(T,n,m,x+1,y,nature,&i2,T2);} if(y>1 && T[x][y-1]==nature && verif(T2,x,y-1,&i2)==0){printf("chainage6");CreerObjet(T,n,m,x,y-1,nature,&i2,T2);} else { printf("chainage7"); trier(T2 ,*i2); return (Chainer(T2,*i2,i3)); } } void stat (int T[][100],int n,int m,int *surface,int nature) { int i,j; for (i=0;i<n;i++) { for (j=0;j<m;j++) { if(T[i][j]==nature) { surface=surface+1; } } } } // affichage de la matrice 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(SetColor(1));} if(nature==2){printf(SetColor(4));} if(nature==3){printf(SetColor(6));} if(nature==4){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("_"); } } //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; } int main() { 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",&x); printf("\n y:"); scanf("%d",&y); int i2=0; p=CreerObjet(T,n,m,x,y,nature,&i2,&T2); printf("les elements :"); for(i=0;i<3;i++) { printf("%d",p->nature); p=p->suiv; } // pour essayer creerobjet // affichobjet(P,T,n,m,x,y,nature); printf("veuillez entrer la nature du theme dont vous voulez voir la surface \n"); scanf("%d",&nature); return 0; }
Editor is loading...