Untitled
unknown
plain_text
3 years ago
4.7 kB
6
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...