From 5140ed9383e0c8c6cb03a1efce39bd5a5c39f95d Mon Sep 17 00:00:00 2001 From: Romain Jegat <romain.jegat@insa-rennes.fr> Date: Fri, 22 Apr 2016 22:45:17 +0200 Subject: [PATCH] Debut de lecture dans un fichier de cartes - Avancement sur l'arbre de talents --- resources/Maps.txt | 18 ++++++++ src/carte.c | 45 ++++++++++++++++++++ src/carte.h | 4 ++ src/competence.c | 103 +++++++++++++++++++++++++++++++++++++++++++-- src/competence.h | 2 + src/main.c | 11 ++++- 6 files changed, 178 insertions(+), 5 deletions(-) create mode 100644 resources/Maps.txt diff --git a/resources/Maps.txt b/resources/Maps.txt new file mode 100644 index 0000000..027cf65 --- /dev/null +++ b/resources/Maps.txt @@ -0,0 +1,18 @@ +MAP1 10*16 + +PFMMMFFPPF +PFFFFFFPPF +PFPPPFFPPF +PFPPPFFPPF +PFPPFFFPPF +PFMMMFFPPF +PFMFFFFPPF +PFMMPFFPPF +PFPPPFFPPF +PFPPFFPPFP +PFFPPFFPPF +PFFFMFFPPF +PFPMMFFPPF +PFMMMFFPPF +PFFFPFFPPF +PFPPPPFPPF \ No newline at end of file diff --git a/src/carte.c b/src/carte.c index f26fc64..c529481 100644 --- a/src/carte.c +++ b/src/carte.c @@ -1,6 +1,51 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> #include "carte.h" + /*! * \file carte.c * \brief Fichier contenant le code des fonctions liees aux cartes. */ + + +/*! + * \fn Carte* LireCarte(int num) + * \brief La fonction recupere la n-ieme carte dans un fichier et renvoie un pointeur sur la carte cree + * + * \return Un pointeur sur une tableau de lettres. + */ +char* LireCarte(const char *filename, int num) +{ + FILE* file_map = NULL; + + char char_nb_lignes[2]="",char_nb_colonnes[2]=""; + int nb_lignes = 0, nb_colonnes = 0, i=0, j=0; + char map[10][16]; + + file_map = fopen(filename, "r"); + + fseek(file_map, 5, SEEK_SET); + (fgets(char_nb_lignes,3,file_map)); + nb_lignes = atoi(char_nb_lignes); + fseek(file_map, 1, SEEK_CUR); + (fgets(char_nb_colonnes,3,file_map)); + nb_colonnes = atoi(char_nb_colonnes); + + fseek(file_map, 4, SEEK_CUR); + + char * TableauCarte = NULL; + TableauCarte = malloc(nb_colonnes * nb_lignes * sizeof(char)); + + for(i=0;i<nb_colonnes;i++) + { + for(j=0;j<=nb_lignes;j++) + { + TableauCarte[nb_lignes*i+j]=fgetc(file_map); + } + } + + fclose(file_map); + return TableauCarte; +} diff --git a/src/carte.h b/src/carte.h index 8ab25c1..39b3127 100644 --- a/src/carte.h +++ b/src/carte.h @@ -3,10 +3,14 @@ * \brief Fichier contenant les signatures des fonctions liees a la structure carte. */ +char* LireCarte(const char *filename, int num); + #ifndef CARTE_H_INCLUDED #define CARTE_H_INCLUDED +#include "structures.h" + #endif // CARTE_H_INCLUDED diff --git a/src/competence.c b/src/competence.c index 071ecb1..2e180f7 100644 --- a/src/competence.c +++ b/src/competence.c @@ -22,6 +22,65 @@ typedef struct Competence{ */ +/* Arbre manuel */ +Competence comp_1; +Competence comp_11; +Competence comp_12; +Competence comp_111; +Competence comp_112; +Competence comp_121; + +/*! + * \fn int set_Enfant(Competence *parent, Competence *enfant) + * \brief La fonction ajoute un enfant à une competence. + * + * \return Un entier. + */ +int set_Enfant(Competence *parent, Competence *nouvel_enfant) +{ + if(estVide(parent)) + { + parent->enfant = nouvel_enfant; + }else{ + Competence *enfant = parent->enfant; + while(enfant!=NULL) + { + enfant = enfant->frere; // A FINIR + } + enfant->frere = nouvel_enfant; + + } + return 0; +} + + + +/*! + * \fn int init_Competence(Competence *noeud) + * \brief La fonction initialise une competence. + * + * \return Un entier. + */ +int init_Competence(Competence *noeud) +{ + noeud->nomComp[0] = '\0'; + noeud->id[0] = '\0'; + noeud->prix_competence = 0; + noeud->frere = NULL; + noeud->enfant = NULL; + noeud->effet = NULL; + + return 0; +} + + + +/*! + * \fn int taille(Competence *noeud) + * \brief La fonction renvoie le nombre d'enfants totaux d'une competence. + * + * \return Un entier positif. + */ int taille(Competence *noeud) { Competence *enfant; @@ -31,6 +90,13 @@ int taille(Competence *noeud) return compteur; } + +/*! + * \fn unsigned int hauteur(Competence *noeud) + * \brief La fonction indique la hauteur d'une competence dans l'arbre. + * + * \return Un entier positif. + */ unsigned int hauteur(Competence *noeud) { if (!estVide(noeud)) @@ -48,6 +114,12 @@ unsigned int hauteur(Competence *noeud) } } +/*! + * \fn int estVide(Competence *c) + * \brief La fonction indique si une competence n'a pas d'enfants. + * + * \return Un booleen. + */ int estVide(Competence *c) { if (c->enfant == NULL) @@ -56,12 +128,25 @@ int estVide(Competence *c) return 1; } + +/*! + * \fn boolean est_connue(Competence *c) + * \brief La fonction indique si une competence est connue ou non. + * + * \return Un booleen. + */ boolean est_connue(Competence *c) { return (c->connu); } +/*! + * \fn unsigned int * NbEnfants(Competence *noeud) + * \brief La fonction renvoie le nombre d'enfants d'une competence. + * + * \return Un entier positif. + */ unsigned int NbEnfants(Competence *noeud) { unsigned int nb; @@ -93,9 +178,21 @@ int rafraichir_competences(Competence * a){ - -boolean est_complet(Competence *a){ - return 0; +/*! + * \fn boolean * est_complet(Competence *noeud) + * \brief La fonction verifie si l'arbre est complet ou non. + * + * \return Un booleen. + */ +boolean est_complet(Competence *noeud) +{ + Competence *enfant; + for(noeud->enfant; enfant!= NULL; enfant=enfant->frere) + { + if(!est_complet(enfant)) + return 0; + } + return 1; } int chemin_auto_competence(Competence* c){ /* Renvoie la liste des compétences non connues se trouvant sur le chemin d'une compétence sélectionnée */ diff --git a/src/competence.h b/src/competence.h index 54bbe42..0ede77e 100644 --- a/src/competence.h +++ b/src/competence.h @@ -8,6 +8,8 @@ /* Fonctions */ +int init_Competence(Competence *noeud); + int taille(Competence *noeud); unsigned int NbEnfants(Competence *noeud); diff --git a/src/main.c b/src/main.c index 558af27..cd2326c 100644 --- a/src/main.c +++ b/src/main.c @@ -6,6 +6,7 @@ #include "terrain.h" #include "SDL.h" #include "roxml.h" +#include "carte.h" int init_jeu(const char *filename){ /* crée les différents types de terrains, de classes et d'attaques en lisant dans un fichier */ FILE *fichier_init; @@ -62,14 +63,20 @@ int init_jeu(const char *filename){ /* cr + int main() { +init_jeu("../resources/Init_jeu.xml"); + +/* Pour Henri <3 */ +/* +printf("La case choisie est : %c\n",LireCarte("../resources/Maps.txt",0)[50]); +*/ - init_jeu("../resources/Init_jeu.xml"); - main_SDL(); +main_SDL(); -- GitLab