Untitled
user_9243973
plain_text
3 years ago
7.8 kB
7
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);
printf("\n\n");
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("%c",219);
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...