Untitled
user_9243973
plain_text
3 years ago
5.3 kB
10
Indexable
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#pragma region Definition
#define TRUE 1
#define FALSE 0
typedef int BOOL;
#define AGRICOLE 1
#define HABITATION 2
#define FORETS 3
#define INDUSTRIELLE 4
#define MAX_TYPES 4
struct pixel
{
int x;
int y;
int nature;
};
typedef pixel parcelle;
struct objet
{
parcelle val;
objet* suiv;
};
#pragma endregion
#pragma region File
//déclaration de la File
typedef parcelle Telm;
typedef struct Element* EFile;
typedef struct Element { Telm Val; EFile Suiv; } CelluleF;
typedef struct { EFile Tete, Queue; } File;
////primitives des Files
//procedure Initfile
void Initfile(File* F)
{
(*F).Tete = NULL; (*F).Queue = NULL;
}
//procedure Enfiler
void Enfiler(File* F, Telm x)
{
EFile V;
V = (EFile)malloc(sizeof(CelluleF));
V->Val = x;
V->Suiv = NULL;
if ((*F).Tete == NULL) (*F).Tete = V; //la file est vide
else (*F).Queue->Suiv = V;
(*F).Queue = V;
}
//procedure Defiler
void Defiler(File* F, Telm* x)
{
EFile V;
V = (*F).Tete;
*x = V->Val; //ou *x=(*F).Tete->Val;
if ((*F).Tete == (*F).Queue) { (*F).Tete = NULL; (*F).Queue = NULL; }
else (*F).Tete = (*F).Tete->Suiv; // ou (*F).Tete=V->Suiv;
free(V);
}
//Fonction Filevide
int Filevide(File F)
{
if (F.Tete == NULL) return 1;
else return 0;
}
//Fonction Tetefile
Telm Tetefile(File F)
{
return F.Tete->Val;
}
#pragma endregion
struct themeParcelle
{
File f;
int nature;
};
typedef parcelle** carte;
void creationCarte(carte c, int n, int m)
{
BOOL doubleY = FALSE;
for (int i = 0; i < n; i++)
{
BOOL doubleX = FALSE;
if (!doubleY)
{
for (int j = 0; j < m; j++)
{
if (!doubleX)
{
int random = (rand() % 4) + 1;
c[i][j].nature = random;
doubleX = TRUE;
}
else
{
c[i][j].nature = c[i][j - 1].nature;
doubleX = FALSE;
}
c[i][j].x = i;
c[i][j].y = j;
}
doubleY = TRUE;
}
else
{
for (int j = 0; j < m; j++)
{
c[i][j].x = i;
c[i][j].y = j;
c[i][j].nature = c[i - 1][j].nature;
}
doubleY = FALSE;
}
}
}
void afficheCarte(carte c, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("%d ", c[i][j].nature);
}
printf("\n");
}
}
objet* extraireObjet(parcelle** c, parcelle p, int n, int m, int nature)
{
if (p.x > n || p.y > m || p.nature != nature)
{
return NULL;
}
objet* result = (objet*)malloc(sizeof(objet));
result->val = p;
if (p.x + 1 < n)
{
parcelle pDroit;
pDroit.nature = c[p.x + 1][p.y].nature;
pDroit.x = p.x + 1;
pDroit.y = p.y;
result->suiv = extraireObjet(c, pDroit, n, m, nature);
}
objet* temp = result;
while (temp->suiv)
{
temp = temp->suiv;
}
if (p.y + 1 < m)
{
parcelle pBas;
pBas.nature = c[p.x][p.y + 1].nature;
pBas.x = p.x;
pBas.y = p.y + 1;
temp->suiv = extraireObjet(c, pBas, n, m, nature);
}
return result;
}
carte creationCarteObjet(objet* o, int n, int m)
{
parcelle** c = (parcelle**)malloc(sizeof(parcelle*) * m);
for (int i = 0; i < m; i++)
{
c[i] = (parcelle*)malloc(sizeof(parcelle) * n);
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
c[i][j].nature = 0;
c[i][j].x = i;
c[i][j].y = j;
}
}
objet* temp = o;
while (temp->suiv)
{
c[temp->val.x][temp->val.y].nature = temp->val.nature;
temp = temp->suiv;
}
return c;
}
void afficheObjet(objet o, int n, int m)
{
carte c = creationCarteObjet(&o, n, m);
afficheCarte(c, n, m);
}
carte creationCarteTheme(themeParcelle a, int n , int m)
{
parcelle** c = (parcelle**)malloc(sizeof(parcelle*) * m);
for (int i = 0; i < m; i++)
{
c[i] = (parcelle*)malloc(sizeof(parcelle) * n);
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
c[i][j].nature = 0;
c[i][j].x = i;
c[i][j].y = j;
}
}
File* f = &(a.f);
while (!Filevide(*f))
{
parcelle* x = (parcelle*)malloc(sizeof(parcelle));
Defiler(f, x);
c[x->x][x->y].nature = x->nature;
}
return c;
}
void afficheTheme(themeParcelle t, int n, int m)
{
carte c = creationCarteTheme(t, n, m);
afficheCarte(c, n, m);
}
void extraireTheme(carte c, themeParcelle* t, int n, int m, int nature)
{
Initfile(&(t->f));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (c[i][j].nature == nature)
{
Enfiler(&(t->f), c[i][j]);
}
}
}
}
int main()
{
srand(time(0));
int n = 11;
int m = 11;
parcelle** c = (parcelle**)malloc(sizeof(parcelle*) * m);
for (int i = 0; i < m; i++)
{
c[i] = (parcelle*)malloc(sizeof(parcelle) * n);
}
//creationTEST(c1, n, m);
creationCarte(c, n, m);
afficheCarte(c, n, m);
printf("\n");
/*themeParcelle* t1 = (themeParcelle*)malloc(sizeof(themeParcelle));
extraireTheme(c, t1, n, m, 2);
afficheTheme(*t1, n, m);*/
parcelle p;
p.nature = 1;
p.x = 0;
p.y = 0;
objet* o = (objet*)malloc(sizeof(objet));
o = extraireObjet(c, p, n, m, 1);
afficheObjet(*o, n, m);
return 0;
}Editor is loading...