Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
6.1 kB
14
Indexable
Never
#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;
}