Skip to content
Snippets Groups Projects
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;
}