Untitled
user_9243973
plain_text
2 years ago
5.3 kB
4
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...