Untitled

 avatar
unknown
plain_text
2 years ago
4.7 kB
5
Indexable
#include <stdbool.h>
#include<stdio.h>
#include<stdlib.h>

struct Parcelle {
  int x;
  int y;
};

typedef struct Objet*ListeChainee;
typedef struct Objet {
  struct Parcelle parcelle;
  ListeChainee suivant;} Maillon;


void ExtraireObjet(int** matrice, int n, int m, struct Parcelle parcelle, int valeur, ListeChainee** objet)
 {
  // Si l'objet n'a pas encore été créé, on le crée
  if (*objet==NULL) {
    *objet = (ListeChainee)malloc(sizeof(Maillon));
    (*objet)->parcelle = parcelle;
    (*objet)->suivant = NULL;
  } else {
    // On crée un nouvel élément à ajouter à la fin de la liste
    struct ListeChainee* nouvel_element = (ListeChainee)malloc(sizeof(struct ListeChainee));
    nouvel_element->parcelle = parcelle;
    nouvel_element->suivant = NULL;
    // On parcourt la liste pour trouver sa fin
    struct ListeChainee* element_courant = *objet;
    while (element_courant->suivant != NULL) {
      element_courant = element_courant->suivant;
    }
    // On ajoute le nouvel élément à la fin de la liste
    element_courant->suivant = nouvel_element;
  }
  int x = parcelle.x;
  int y = parcelle.y;
  // Si la valeur de la parcelle est différente de valeur, on arrête la récursion
  if (matrice[x][y] != valeur) {
    return;
  }
  // On marque la parcelle comme visitée
  matrice[x][y] = -1;
  // On récupère les coordonnées des parcelles voisines
  struct Parcelle voisins[4] = {{x-1, y}, {x+1, y}, {x, y-1}, {x, y+1}};
  // On appelle récursivement la fonction sur chacun des voisins
  for (int i = 0; i < 4; i++) {
    ExtraireObjet(matrice, n, m, voisins[i], valeur, objet);
  }
}


 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("_");
  }
}
{
 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",&Parcelle.x);
     printf("\n y:");
      scanf("%d",&Parcelle.y);
      
    ExtraireObjet(&T,n,m,Parcelle,nature,&Objet);
    affichobjet(P,T,n,m,x,y,nature);


    return 0;
}
Editor is loading...