-
Romain Jegat authored
Avancement sur les fonctions de récupération et de construction des arbres - Ca ne marche pas - Comportements étranges de CodeBlocks...
Romain Jegat authoredAvancement sur les fonctions de récupération et de construction des arbres - Ca ne marche pas - Comportements étranges de CodeBlocks...
competence.c 7.20 KiB
#include <stdio.h>
#include <stdlib.h>
#include <roxml.h>
#include "structures.h"
#include "competence.h"
/*!
* \file competence.c
* \brief Fichier contenant le code des fonctions liees aux arbres de compétences.
*/
/*! Copie de la struct Competence pour travailler
typedef struct Competence{
char nomComp[TAILLE_NOMS];
char id[TAILLE_ID];
unsigned int prix_competence;
struct Competence *frere;
struct Competence *enfant;
struct Effet_Competence *effet;
boolean connu;
}Competence;
*/
/*!
* \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;
}
enfant->frere = nouvel_enfant;
}*/
return 0;
}
int set_comp_name(Competence *comp, char *nom_donne)
{
strcpy(comp->nomComp, nom_donne);
}
int set_comp_id(Competence *comp, char *nom_donne)
{
strcpy(comp->id, nom_donne);
}
/*!
* \fn int init_Competence(Competence *noeud)
* \brief La fonction initialise une competence.
*
* \return Un entier.
*/
int init_Competence(Competence *noeud)
{
memset(noeud->nomComp, 0, sizeof(noeud->nomComp));
memset(noeud->id, 0, sizeof(noeud->id));
noeud->prix_competence = 0;
noeud->frere = NULL;
noeud->enfant = NULL;
noeud->effet = NULL;
noeud->connu = 0;
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;
int compteur = 1;
for (enfant = noeud->enfant; enfant != NULL; enfant = enfant->frere)
compteur += taille(enfant);
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))
{
int compteur = 1;
Competence *enfant;
for (enfant = noeud->enfant; enfant != NULL; enfant = enfant->frere)
{
if (hauteur(enfant) > compteur)
compteur = 1 + hauteur(enfant);
}
return compteur;
}
else
{
return 0;
}
}
/*!
* \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)
return 0;
else
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;
if (estVide(noeud))
{
nb = 0;
}
else
{
Competence *enfant;
for(noeud->enfant; enfant!= NULL; enfant=enfant->frere);
nb++;
}
return nb;
}
int rafraichir_competences(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 */
{
return 0;
}
Effet_Competence * get_effet(Competence *c) /* Renvoie l'effet d'une competence */
{
return c->effet;
}
Competence* Extraire_Arbres(char *filename)
{
node_t *rootXML, *Arbres;
char *id_text, *name_text;
int nb_Arbres=0, i_0=0;
rootXML = roxml_load_doc(filename);
Arbres = roxml_get_chld(rootXML,"Arbres",0);
nb_Arbres = roxml_get_chld_nb(Arbres);
printf("On a %d arbres de competences \n", nb_Arbres);
/* ---------------------------------------------------------------------------------------------- */
/* Extraction des arbres */
/* ---------------------------------------------------------------------------------------------- */
for(i_0=0; i_0<nb_Arbres; i_0++)
{
node_t *ArbreXML_Actuel = roxml_get_chld(Arbres, NULL, i_0);
Competence *Arbre_Actuel;
int nb_Comp1=0, i_1=0;
init_Competence(Arbre_Actuel);
nb_Comp1 = roxml_get_chld_nb(ArbreXML_Actuel);
printf("L'arbre %d contient %d competences de niveau 1\n",i_0, nb_Comp1);
set_comp_name(Arbre_Actuel,roxml_get_content(roxml_get_attr(ArbreXML_Actuel,"id",0),NULL,0,NULL));
printf("L'arbre actuel a pour nom : %s\n", Arbre_Actuel->nomComp);
/* ---------------------------------------------------------------------------------------------- */
/* Extraction des competences 1 */
/* ---------------------------------------------------------------------------------------------- */
for(i_1=0; i_1<nb_Comp1; i_1++)
{
node_t *CompetenceXML_1;
Competence *Competence_1;
int nb_Comp2=0, i_2=0;
init_Competence(Competence_1);
CompetenceXML_1 = roxml_get_chld(ArbreXML_Actuel, NULL, i_1);
nb_Comp2 = roxml_get_chld_nb(CompetenceXML_1);
printf("La competence numero %d de niveau 1 contient %d competences de niveau 2\n",i_1+1,nb_Comp2);
set_comp_name(Competence_1,roxml_get_content(roxml_get_attr(CompetenceXML_1,"nom",0),NULL,0,NULL));
for(i_2=0; i_2<nb_Comp1; i_2++)
{
}
/* La competence j devient un enfant de la competence i */
set_Enfant(Arbre_Actuel, Competence_1);
printf("L'enfant est : %s\n", Arbre_Actuel->enfant->nomComp);
}
}
return 0;
}
int Test_Competences()
{
char* nomTest = "LeNom";
printf("Debut Test Competences\n");
Competence *Comp_Test_Parent, *Comp_Test_Enfant;
/*
set_comp_name(Comp_Test_Parent, "Papa");
set_comp_id(Comp_Test_Parent, "ID_PA");
set_comp_name(Comp_Test_Enfant, "Bebe");
set_comp_id(Comp_Test_Enfant, "ID_BE");
init_Competence(Comp_Test_Parent);
init_Competence(Comp_Test_Enfant);
*/
/*Verif */
/* printf("Le nom est : %s\n", Comp_Test_Parent->nomComp);
printf("L'ID est : %s\n", Comp_Test_Parent->id);
printf("Le nom est : %s\n", Comp_Test_Enfant->nomComp);
printf("L'ID est : %s\n", Comp_Test_Enfant->id);
printf("Lol");
*/
//printf("On a : %d\n", Comp_Test_Parent->connu);
// set_Enfant(&Comp_Test_Parent, &Comp_Test_Enfant);
// printf("L'enfant de %s est : %s\n",Comp_Test_Parent.nomComp,Comp_Test_Enfant.nomComp);
// printf("L'id de l'enfant de %s est : %s\n",Comp_Test_Parent.nomComp,Comp_Test_Parent.enfant.nomComp);
return 0;
}