Untitled
unknown
plain_text
3 years ago
6.1 kB
21
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;
Pliste Chainer(Tab T2[], int i2)
{
Pliste P,T;
int i =0;
T=(Pliste)malloc(sizeof(Parcelle));
T->nature=T2[i].nature;
T->x=T2[i].X;
T->y=T2[i].Y;
printf("chainage");
P=T;
for(i=1;i<i2;i++)
{ P=(Pliste)malloc(sizeof(Parcelle));
printf("chainage");
P->nature=T2[i].nature;
P->x=T2[i].X;
printf("chainage");
P->y=T2[i].Y;
P->Suiv=NULL;
P=P->Suiv;
printf("chainage");
}
return T ;
}
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;
}
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;
}
}
}
}
Pliste CreerObjet (int T[][100],int n,int m,int x,int y,int nature,int*i2,Tab T2[100])
{
int i,j;
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){CreerObjet(T,n,m,x,y+1,nature,i2,T2);printf("chainage3");}
if(x>1 && T[x-1][y]==nature && verif(T2,x -1,y,*i2)==0){CreerObjet(T,n,m,x-1,y,nature,i2,T2);printf("chainage4");}
if(x<n && T[x+1][y]==nature && verif(T2,x+1,y,*i2)==0){CreerObjet(T,n,m,x+1,y,nature,i2,T2);printf("chainage5");}
if(y>1 && T[x][y-1]==nature && verif(T2,x,y-1,*i2)==0){CreerObjet(T,n,m,x,y-1,nature,i2,T2);printf("chainage6");}
else
{
printf("chainage3");
trier(T2 ,*i2);
return (Chainer(T2,*i2));
}
}
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("_");
}
}
//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=1;
p=CreerObjet(T,n,m,x,y,nature,&i2,&T2);
for(i=0;i<3;i++)
{
printf("%d",p->nature);
p=p->Suiv;
}
// affichobjet(P,T,n,m,x,y,nature);
return 0;
}Editor is loading...