diff --git a/ElderInternalIgnition/SDL_lena_pour_henry.c b/ElderInternalIgnition/SDL_lena_pour_henry.c new file mode 100644 index 0000000000000000000000000000000000000000..f089dddf3c1a5bc33eb1c69bb5b8c69ee1b95937 --- /dev/null +++ b/ElderInternalIgnition/SDL_lena_pour_henry.c @@ -0,0 +1,373 @@ +#include <stdlib.h> +#include <SDL/SDL.h> +#include "structures.h" +#include "partie.h" +#include "joueur.h" +#include "joueurList.h" +#include "personnage.h" +#include "case.h" +#include "deplacements.h" +#include "SDL.h" +#include "controleurSDL.h" + + +/*! +* \file SDL.c +* \brief Fichier contenant le code des fonctions liees à l'affichage par la SDL. +*/ + +/*! + * \fn int main_SDL(char* Map) + * \brief fonction qui gère l'affichage + * + * \param la carte au format texte (une lettre = une case) + */ + +int main_SDL(char* Map) +{ + int i,j,affichermenu; + SDL_Surface* ecran=NULL; + SDL_Event event; + SDL_Surface* guerrier=NULL; + SDL_Surface* mage=NULL; + SDL_Surface* voleur=NULL; + SDL_Surface* archer=NULL; + SDL_Surface* guerisseur=NULL; + SDL_Surface* plaine=NULL; + SDL_Surface* eau=NULL; + SDL_Surface* montagne=NULL; + SDL_Surface* foret=NULL; + SDL_Surface* bouton_entrer_royaume=NULL; + SDL_Surface* bouton_continuer=NULL; + SDL_Surface* bouton_quitter=NULL; + SDL_Surface* Case_brillante=NULL; + SDL_Surface* Guerrier_select=NULL; + SDL_Rect Position_Case[LARGEUR_CARTE*HAUTEUR_CARTE]; + SDL_Rect Position_Perso[NB_PERSO]; + SDL_Rect Position_Case_brillante; + SDL_Rect Position_Guerrier_select; + SDL_Rect pos_bouton_entrer_royaume; + SDL_Rect pos_bouton_continuer; + SDL_Rect pos_bouton_quitter; + int x_case_brillante; + int y_case_brillante; + int x_guerrier_select; + int y_guerrier_select; + int quitter=0; + affichermenu=0; + typedef enum{Accueil,Jeu}etat; + int Etat = Accueil; + + if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) + { + printf( "Unable to init SDL: %s\n", SDL_GetError() ); + return 1; + } + + ecran = SDL_SetVideoMode(LARGEUR_CARTE*(LARGEUR_CASE+1), HAUTEUR_CARTE*(HAUTEUR_CASE+2), 32, SDL_HWSURFACE|SDL_DOUBLEBUF); + if (ecran == NULL) // Si l'ouverture a échoué, on le note et on arrête + { + fprintf(stderr, "Impossible de charger le mode vidéo : %s\n", SDL_GetError()); + exit(EXIT_FAILURE); + } + + SDL_WM_SetCaption("Elder Internal Ignition",NULL); + + pos_bouton_entrer_royaume.x=(LARGEUR_CARTE*LARGEUR_CASE-LARGEUR_BOUTON)/2; + pos_bouton_quitter.x=(LARGEUR_CARTE*LARGEUR_CASE-LARGEUR_BOUTON)/2; + pos_bouton_continuer.x=(LARGEUR_CARTE*LARGEUR_CASE-LARGEUR_BOUTON)/2; + pos_bouton_entrer_royaume.y=(HAUTEUR_CARTE*HAUTEUR_CASE-HAUTEUR_BOUTON)/2+HAUTEUR_BOUTON; + pos_bouton_quitter.y=(HAUTEUR_CARTE*HAUTEUR_CASE-HAUTEUR_BOUTON)/2+HAUTEUR_BOUTON; + pos_bouton_continuer.y=(HAUTEUR_CARTE*HAUTEUR_CASE-HAUTEUR_BOUTON)/2-HAUTEUR_BOUTON; + + guerrier = SDL_LoadBMP("../resources/Skins/guerrier.bmp"); + if (!guerrier) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(guerrier, SDL_SRCCOLORKEY, SDL_MapRGB(guerrier->format, 0, 0, 255)); + + bouton_entrer_royaume = SDL_LoadBMP("../resources/Skins/Entrer_Royaume.bmp"); + if (!bouton_entrer_royaume) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + + bouton_continuer = SDL_LoadBMP("../resources/Skins/continuer.bmp"); + if (!bouton_continuer) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + + bouton_quitter = SDL_LoadBMP("../resources/Skins/quitter.bmp"); + if (!bouton_continuer) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + + mage = SDL_LoadBMP("../resources/Skins/mage.bmp"); + if (!mage) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(mage, SDL_SRCCOLORKEY, SDL_MapRGB(mage->format, 0, 0, 255)); + + voleur = SDL_LoadBMP("../resources/Skins/voleur.bmp"); + if (!voleur) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(voleur, SDL_SRCCOLORKEY, SDL_MapRGB(voleur->format, 0, 0, 255)); + + + archer = SDL_LoadBMP("../resources/Skins/archer.bmp"); + if (!archer) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(archer, SDL_SRCCOLORKEY, SDL_MapRGB(archer->format, 0, 0, 255)); + + guerisseur = SDL_LoadBMP("../resources/Skins/guerisseur.bmp"); + if (!guerisseur) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(guerisseur, SDL_SRCCOLORKEY, SDL_MapRGB(guerisseur->format, 0, 0, 255)); + + plaine = SDL_LoadBMP("../resources/Skins/plaine.bmp"); + if (!plaine) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(plaine, SDL_SRCCOLORKEY, SDL_MapRGB(plaine->format, 0, 0, 255)); + + eau = SDL_LoadBMP("../resources/Skins/eau.bmp"); + if (!eau) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(eau, SDL_SRCCOLORKEY, SDL_MapRGB(eau->format, 0, 0, 255)); + + montagne = SDL_LoadBMP("../resources/Skins/montagne.bmp"); + if (!montagne) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(montagne, SDL_SRCCOLORKEY, SDL_MapRGB(montagne->format, 0, 0, 255)); + + foret = SDL_LoadBMP("../resources/Skins/foret.bmp"); + if (!foret) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(foret, SDL_SRCCOLORKEY, SDL_MapRGB(foret->format, 0, 0, 255)); + + Case_brillante = SDL_LoadBMP("../resources/Skins/case_brillante.bmp"); + if (!Case_brillante) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(Case_brillante, SDL_SRCCOLORKEY, SDL_MapRGB(Case_brillante->format, 0, 0, 255)); + + Guerrier_select = SDL_LoadBMP("../resources/Skins/guerrier_select.bmp"); + if (!Guerrier_select) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + SDL_SetColorKey(Guerrier_select, SDL_SRCCOLORKEY, SDL_MapRGB(Guerrier_select->format, 0, 0, 255)); + + for(i=0;i<LARGEUR_CARTE;i+=2) + { + for(j=0;j<HAUTEUR_CARTE;j++) + { + Position_Case[j*LARGEUR_CARTE+i].x=LARGEUR_CASE*i; + Position_Case[j*LARGEUR_CARTE+i].y=HAUTEUR_CASE*j; + } + } + for(i=1;i<LARGEUR_CARTE;i+=2) + { + for(j=0;j<HAUTEUR_CARTE;j++) + { + Position_Case[j*LARGEUR_CARTE+i].x=LARGEUR_CASE*i; + Position_Case[j*LARGEUR_CARTE+i].y=HAUTEUR_CASE*j+(HAUTEUR_CASE/2); + } + } + + init_controleur(Position_Case); + + while(quitter==0) + { + switch(Etat){ + case Accueil: + SDL_WaitEvent(&event); + switch(event.type) /* Test du type d'événement */ + { + case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ + quitter=1; + break; + case SDL_MOUSEBUTTONDOWN: + if(pos_bouton_entrer_royaume.y<event.button.y&&event.button.y<pos_bouton_entrer_royaume.y+LARGEUR_BOUTON){ + Etat = 1;; + } + break; + case SDL_KEYDOWN:/* Si c'est un événement de type "touche pressée" */ + switch(event.key.keysym.sym){ + case SDLK_ESCAPE: + affichermenu=0; + break; + default: + quitter=0; + } + break; + } + SDL_BlitSurface(bouton_entrer_royaume,NULL,ecran,&pos_bouton_entrer_royaume); + SDL_Flip(ecran); + + break; + case Jeu: + SDL_WaitEvent(&event); + if(affichermenu==1){ + switch(event.type) /* Test du type d'événement */ + { + case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ + quitter=1; + break; + case SDL_MOUSEBUTTONDOWN: + if(pos_bouton_continuer.x<event.button.x&&event.button.x<pos_bouton_continuer.x+LARGEUR_BOUTON){ + if(pos_bouton_continuer.y<event.button.y&&event.button.y<pos_bouton_continuer.x+HAUTEUR_BOUTON){ + affichermenu=0; + } + if(pos_bouton_quitter.y<event.button.y&&event.button.y<pos_bouton_quitter.x+HAUTEUR_BOUTON){ + quitter=1; + } + } + break; + case SDL_KEYDOWN:/* Si c'est un événement de type "touche pressée" */ + switch(event.key.keysym.sym){ + case SDLK_ESCAPE: + affichermenu=0; + break; + default: + quitter=0; + } + break; + } + } + else{ + switch(event.type) /* Test du type d'événement */ + { + case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ + quitter=1; + break; + case SDL_MOUSEBUTTONDOWN: + deplacement_personnage(event.button.x,event.button.y); + break; + case SDL_MOUSEMOTION: + if(event.motion.x<LARGEUR_CARTE*LARGEUR_CASE&&event.motion.y<HAUTEUR_CARTE*HAUTEUR_CASE) + { + x_case_brillante = get_position_case_x(deplacement_brillance(event.motion.x,event.motion.y)); + y_case_brillante = get_position_case_y(deplacement_brillance(event.motion.x,event.motion.y)); + } + break; + case SDL_KEYDOWN:/* Si c'est un événement de type "touche pressée" */ + switch(event.key.keysym.sym){ + case SDLK_n: + persosuivant(); + break; + case SDLK_ESCAPE: + affichermenu=1; + break; + default: + quitter=0; + } + break; + } + } + + for(i=0;i<NB_PERSO;i++){ + Position_Perso[i].x=get_position_perso_x(i); + Position_Perso[i].y=get_position_perso_y(i); + } + + Position_Case_brillante.x=x_case_brillante; + Position_Case_brillante.y=y_case_brillante; + x_guerrier_select = get_position_case_x(&Position_Perso[persoactuel()]); + y_guerrier_select = get_position_case_y(&Position_Perso[persoactuel()]); + Position_Guerrier_select.x=x_guerrier_select; + Position_Guerrier_select.y=y_guerrier_select; + SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0)); + if(affichermenu==0) + { + for(i=0;i<LARGEUR_CARTE*HAUTEUR_CARTE;i++) + { + switch(Map[i]) + { + case 80: //"P" en ASCII + SDL_BlitSurface(plaine,NULL,ecran,&Position_Case[i]); + break; + case 70: //"F" en ASCII + SDL_BlitSurface(foret,NULL,ecran,&Position_Case[i]); + break; + case 69: //"E" en ASCII + SDL_BlitSurface(eau,NULL,ecran,&Position_Case[i]); + break; + case 77: //"M" en ASCII + SDL_BlitSurface(montagne,NULL,ecran,&Position_Case[i]); + break; + default: + quitter=0; + } + + } + for(i=0;i<NB_PERSO;i++) + { + SDL_BlitSurface(guerrier,NULL,ecran,&Position_Perso[0]); + SDL_BlitSurface(mage,NULL,ecran,&Position_Perso[1]); + SDL_BlitSurface(archer,NULL,ecran,&Position_Perso[2]); + } + SDL_BlitSurface(Guerrier_select,NULL,ecran,&Position_Guerrier_select); + SDL_BlitSurface(Case_brillante,NULL,ecran,&Position_Case_brillante); + }else{ + SDL_BlitSurface(bouton_continuer,NULL,ecran,&pos_bouton_continuer); + SDL_BlitSurface(bouton_quitter,NULL,ecran,&pos_bouton_quitter); + } + + SDL_Flip(ecran); + + break; + + default: + break; + } + } + quitter=0; + SDL_FreeSurface(guerrier); + SDL_FreeSurface(Case_brillante); + SDL_FreeSurface(Guerrier_select); + SDL_FreeSurface(plaine); + SDL_FreeSurface(mage); + SDL_FreeSurface(voleur); + SDL_FreeSurface(archer); + SDL_FreeSurface(guerisseur); + SDL_FreeSurface(eau); + SDL_FreeSurface(montagne); + SDL_FreeSurface(foret); + SDL_Quit(); + return 0; +} + + diff --git a/resources/Maps.xml b/resources/Maps.xml new file mode 100644 index 0000000000000000000000000000000000000000..43b9e6ca855e1510141ef0784a92e2f7c01e408a --- /dev/null +++ b/resources/Maps.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Maps> + +<Map id="MAP_1" name="Comté de la sieste" desc="Cette map est so-mmeil" taille_lignes="10"> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +<Line>MFPPRRPPFM</Line> +</Map> + +<Map id="MAP_2" name="Chasse au trésor" desc="Une map pour 2 joueurs qui rend fou !! " taille_lignes="10"> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> +</Map> + +<Map id="MAP_3" name="Chasse au trésor" desc="Une map pour 2 joueurs qui rend fou !! " taille_lignes="10"> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> + <Line>MFPPRRPPFM</Line> +</Map> + +</Maps> diff --git a/resources/Skins/Entrer_Royaume.bmp b/resources/Skins/Entrer_Royaume.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e4c614dc2d7584e1edc4b7381bfddeaa12f1e5f9 Binary files /dev/null and b/resources/Skins/Entrer_Royaume.bmp differ diff --git a/src/carte.c b/src/carte.c index b1d683dbff21cbac10aef173f053ec4852b4d192..de2807d1cd131f3a95209420b21f102049661f63 100644 --- a/src/carte.c +++ b/src/carte.c @@ -2,6 +2,8 @@ #include <stdlib.h> #include <string.h> #include "carte.h" +#include "structures.h" +#include <roxml.h> /*! @@ -20,7 +22,7 @@ char* ExtraireCarte(int numero) * \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. + * \return Un pointeur sur une tableau de cartes. */ char* LireCarte(const char *filename, int num) { @@ -64,17 +66,85 @@ char* LireCarte(const char *filename, int num) fgetc(file_map); } -/* Test Tableau + /* Test Tableau - for(j=0; j<nb_lignes*nb_colonnes; j++) - { - printf("La valeur %d du tableau vaut : %c\n",j,TableauCarte[j]); - } + for(j=0; j<nb_lignes*nb_colonnes; j++) + { + printf("La valeur %d du tableau vaut : %c\n",j,TableauCarte[j]); + } - fclose(file_map); -*/ + fclose(file_map); + */ return TableauCarte; } +Carte_A* ExtraireCartesXML(const char *filename) +{ + node_t *rootXML, *Maps; + int nb_Maps=0, i=0; + rootXML = roxml_load_doc(filename); + Maps = roxml_get_chld(rootXML, NULL, 0); + + nb_Maps = roxml_get_chld_nb(Maps); + //printf("Il y a %d maps\n", nb_Maps); + + Carte_A* Tableau_Cartes = malloc(nb_Maps * sizeof(Carte_A)); + + /*-------------------------------------------------------------------------------------------------------------------*/ + /* Aquisition des cartes */ + /*-------------------------------------------------------------------------------------------------------------------*/ + + for(i=0; i<nb_Maps; i++) + { + int j=0, nb_lignes=0, taille_lignes=0; + char *id_text, *name_text, *desc_text, *lignes_text; + node_t *Map_Actuelle; + Map_Actuelle = roxml_get_chld(Maps,NULL,i); + + id_text = roxml_get_content(roxml_get_attr(Map_Actuelle, "id", 0), NULL, 0, NULL); + name_text = roxml_get_content(roxml_get_attr(Map_Actuelle, "name", 0), NULL, 0, NULL); + desc_text = roxml_get_content(roxml_get_attr(Map_Actuelle, "desc", 0), NULL, 0, NULL); + + //taille_lignes = atoi(roxml_get_content(roxml_get_attr(Map_Actuelle, "taille_lignes", 0), NULL, 0, NULL)); + //printf("Les lignes font %d de long\n", taille_lignes); + + //nb_lignes = roxml_get_chld_nb(Map_Actuelle); + //printf("La carte contient %d lignes\n", nb_lignes); + + Carte_A Carte_Actuelle; + + strcpy(Carte_Actuelle.id, id_text); + strcpy(Carte_Actuelle.nom, name_text); + strcpy(Carte_Actuelle.desc, desc_text); +/* + printf("L'ID est :%s\n\n", Carte_Actuelle.id); + printf("Le nom est :%s\n\n", Carte_Actuelle.nom); + printf("La desc est :%s\n\n", Carte_Actuelle.desc); +*/ + /*--------------------------------------------------------------------------------------------------------------*/ + /* Aquisition des lignes de la carte */ + /*--------------------------------------------------------------------------------------------------------------*/ + + for(j=0; j<16 /*nb_lignes*/ ; j++) + { + node_t* Ligne_Actuelle; + Ligne_Actuelle = roxml_get_chld(Map_Actuelle, NULL, j); + + char sequence_ligne[9]; + roxml_get_content(Ligne_Actuelle, sequence_ligne, 50, NULL); + + //printf("Sequence_Ligne vaut : %s\n", sequence_ligne); + + strcpy(Carte_Actuelle.lignes[j], sequence_ligne); + + //printf("La ligne %d vaut : %s\n",j+1, Carte_Actuelle.lignes[j]); + } + + Tableau_Cartes[i] = Carte_Actuelle; + } + + return Tableau_Cartes; +} + diff --git a/src/carte.h b/src/carte.h index abbe315a3df089a09fe7660b8c072a768175785d..46b24768fb8138f71ef3e539d04afe58e0357dcb 100644 --- a/src/carte.h +++ b/src/carte.h @@ -3,15 +3,17 @@ * \brief Fichier contenant les signatures des fonctions liees a la structure carte. */ -char* ExtraireCarte(int numero); - -char* LireCarte(const char *filename, int num); - #ifndef CARTE_H_INCLUDED #define CARTE_H_INCLUDED #include "structures.h" +char* ExtraireCarte(int numero); + +Carte_A* ExtraireCartesXML(const char *filename); + +char* LireCarte(const char *filename, int num); + #endif // CARTE_H_INCLUDED diff --git a/src/case.c b/src/case.c index 19c89fbf60381e974526d835ce07e3dbfe5e92ad..018494f4379d8b96cd89d1c023ba711fe90261cc 100644 --- a/src/case.c +++ b/src/case.c @@ -10,13 +10,12 @@ * \brief Fichier contenant le code des fonctions liees aux cases */ - -Case * init_case(Case * c,int x, int y, Terrain *t){ +void init_case(Case * c,int x,int y, Terrain *t){ c->coord_x=x; c->coord_y=y; c->terrain=t; c->occupee=faux; - return c; + printf("size of Case : %d\nadresse x : %d\nadresse y : %d\nadresse terrain : %d \nadresse occupee : %d\n",sizeof(*c),&c->coord_x, &c->coord_y,&c->terrain,&c->occupee); } int get_x(Case *c){ @@ -36,34 +35,58 @@ boolean case_franchissable(Case *c){ } void marquer_occupee(Case *c){ - if (c->occupee==vrai) printf("case déjà occupée"); c->occupee=vrai; } void marquer_libre(Case *c){ - if (c->occupee==faux) printf("case déjà libre"); c->occupee=faux; } Terrain* get_terrain(Case *c){ if (c->terrain==NULL){ - fprintf(stderr,"pas de terrain"); + return NULL; } return c->terrain; } -int init_carte(Carte* c,unsigned short int largeur, unsigned short int hauteur){ + /*! + * \fn Carte * nouvelleCarte() + * \brief La fonction alloue l'espace en memoire pour une structure Carte et renvoye un pointeur vers la structure creee + * + * \return Le pointeur vers la Carte creee. + */ +Carte * nouvelleCarte(){ + Carte * c = malloc(sizeof(Carte)); + return c; +} + + /*! + * \fn void deleteCarte(Carte * c) + * \brief libere l'espace memoire alloue a une Carte + * + * \param le pointeur vers la Carte a supprimer. + */ +void deleteCarte(Carte * c){ + free(c); +} + + /*! + * \fn init_carte(Carte* c,unsigned short int largeur, unsigned short int hauteur) + * \brief La fonction initialise la position des Case contenues dans la Carte et les definit comme libres. + * l'attribut Terrain de la Carte est initialisé a NULL, il doit etre change a partir d'une autre fonction. + * + * \param Un pointeur vers la Carte a initialiser, des entiers representant la largeur et la hauteur de la carte. + * \return 0 si la Carte n'a pas ete correctement initialisee (si la taille maximum de la carte est depassee), 1 sinon. + */ +int init_carte(Carte * c){ int i,j,n; - n=0; - if (largeur*hauteur>TAILLE_MAX_CARTE){ - printf("erreur : taille maximum de la carte dépassée"); - return 1; - } - for (i=0;i<(largeur);i++){ - for (j=0;j<(hauteur);j++){ - init_case(c[n],i,j,NULL); - n++; + n=c; + for (i=0;i<LARG_MAX_CARTE;i++){ + for (j=0;j<HAUT_MAX_CARTE;j++){ + init_case(n,i,j,NULL); + printf("Adresse Case : %d, x=%d, y=%d\n\n",n,get_x(n),get_y(n)); + n=n+sizeof(Case); } } - return 0; + return 1; } diff --git a/src/case.h b/src/case.h index 50035c9e020141c710d3e3edb53a71db4ab9827f..009684164b50155add042f5e9bdcf892f5343f68 100644 --- a/src/case.h +++ b/src/case.h @@ -14,7 +14,7 @@ Case* Librairie_Cases(const char *filename); Case* Remplir_Cases_log(const char *filename); -Case* init_case(Case *c,int x, int y, Terrain *t); +void init_case(Case *c,int x, int y, Terrain *t); int get_x(Case *c); @@ -34,7 +34,11 @@ void marquer_libre(Case *c); Terrain* get_terrain(Case *c); -int init_carte(Carte* c,unsigned short int largeur, unsigned short int hauteur); +Carte * nouvelleCarte(); + +void deleteCarte(Carte * c); + +int init_carte(Carte* c); /*Case * trouverCase(Carte * c, int x, int y);*/ diff --git a/src/main.c b/src/main.c index 59bbbdfcc4e57644d69a27fde6f12701f52cab2e..ede47ba483eaf2ac6ae489a577eb64af461abc59 100644 --- a/src/main.c +++ b/src/main.c @@ -9,9 +9,18 @@ #include "carte.h" #include "Interface.h" -int init_jeu(char *filename){ /* crée les différents types de terrains, de classes et d'attaques en lisant dans un fichier */ - FILE *fichier_init; - fichier_init=fopen(filename,"r"); + +/*! + * \fn int init_jeu(char *filename) + * \brief Fonction d'initialisation du jeu + * + * \param Le fichier d'initialisation + * \return un entier + */ +int init_jeu(char *filename) +{ + FILE *fichier_init; + fichier_init=fopen(filename,"r"); if (fichier_init!=NULL) { node_t *rootXML, *ConfigXML, *Classes, *Terrains; @@ -63,7 +72,9 @@ int init_jeu(char *filename){ /* cr fclose(fichier_init); - }else{ + } + else + { fprintf(stderr,"Erreur dans l'ouverture du fichier"); return 1; } @@ -71,6 +82,28 @@ int init_jeu(char *filename){ /* cr } +/*! + * \fn Game_Package Construire_Package() + * \brief Fonction de construction d'un package contenant l'univers du jeu + * + * \return un Game_Package + */ +Game_Package Construire_Package() +{ + Game_Package Pack; + + Classe* Classes_Pack = Librairie_Classes("../resources/Classes.xml"); + Terrain* Terrains_Pack = Librairie_Terrains("../resources/Terrains.xml"); + Skins_GUI* GUI_Pack = Get_Skins_GUI("../resources/GUI.xml"); + Carte_A* Map_Pack = ExtraireCartesXML("../resources/Maps.xml"); + + Pack.Classes_Package = Classes_Pack; + Pack.Terrains_Package = Terrains_Pack; + Pack.GUI_Package = GUI_Pack; + Pack.Cartes_Package = Map_Pack; + + return Pack; +} int main() @@ -78,16 +111,17 @@ int main() //init_jeu("../resources/Init_jeu.xml"); -char *Map_A = ExtraireCarte(4); -printf("Map en version texte : %s\n", Map_A); + char *Map_ANCIENNE_VERSION = ExtraireCarte(4); + //printf("Map en version texte : %s\n", Map_A); -/* -------------------------------------*/ -/* Creation d'un package de jeu */ -/* -------------------------------------*/ + /* -------------------------------------*/ + /* Creation du package : */ + /* -------------------------------------*/ -Game_Package Pack_A; + Game_Package Pack_A = Construire_Package(); +<<<<<<< HEAD Classe* Classes_Pack = Librairie_Classes("../resources/Classes.xml"); Terrain* Terrains_Pack = Librairie_Terrains("../resources/Terrains.xml"); Skins_GUI* GUI_Pack = Get_Skins_GUI("../resources/GUI.xml"); @@ -96,8 +130,25 @@ Skins_GUI* GUI_Pack = Get_Skins_GUI("../resources/GUI.xml"); Pack_A.Classes_Package = Classes_Pack; Pack_A.Terrains_Package = Terrains_Pack; Pack_A.GUI_Package = GUI_Pack; +======= + /* -------------------------------------*/ + /* Comment utiliser le package : */ + /* -------------------------------------*/ + + + printf("L'attaque 1 du mage est : %s\n",Pack_A.Classes_Package[0].attaques[2].nom); + + printf("Le nom du terrain 1 est : %s\n",Pack_A.Terrains_Package[0].nomTerrain); + printf("L'adresse de la texture GUI 1 est : %s\n",Pack_A.GUI_Package[0].GUI_default); + printf("La ligne 3 de la map 1 est : %s\n",Pack_A.Cartes_Package[0].lignes[2]); + /* -------------------------------------*/ + /* -------------------------------------*/ +>>>>>>> 57f279bead6985e78bdd728e0a2cef1f16b293f6 + main_SDL(Map_ANCIENNE_VERSION); + +<<<<<<< HEAD /* -------------------------------------*/ /* Comment utiliser le package : */ /* -------------------------------------*/ @@ -105,9 +156,19 @@ Pack_A.GUI_Package = GUI_Pack; printf("L'attaque 1 du mage est : %s\n",Pack_A.Classes_Package[0].attaques[0].nom); printf("Le nom du terrain 1 est : %s\n",Pack_A.Terrains_Package[0].nomTerrain); printf("L'adresse de la texture GUI 1 est : %s\n",Pack_A.GUI_Package[0].GUI_default); +======= + int n,i; + + Carte * carteTest = nouvelleCarte(); + init_carte(carteTest); +>>>>>>> 57f279bead6985e78bdd728e0a2cef1f16b293f6 -main_SDL(Map_A); + n=carteTest; + for(i=0;i<TAILLE_MAX_CARTE;i++){ + printf("x=%d, y=%d\n",n,get_x(n),get_y(n)); + n=n+sizeof(Case); + } -return 0; + return 0; } diff --git a/src/structures.h b/src/structures.h index 17e4dbd303e48fedd990158fea8e7fc83ed5a4b1..4531763360b9c9be66a9a40dbe13d18540d0e146 100644 --- a/src/structures.h +++ b/src/structures.h @@ -19,7 +19,9 @@ #define STRUCTURES_H_INCLUDED /*! \def TAILLE_MAX_CARTE */ -#define TAILLE_MAX_CARTE 256 +#define TAILLE_MAX_CARTE 160 +/*! \def TAILLE_MAX_LIGNE */ +#define TAILLE_MAX_LIGNE 25 /*! \def TAILLE_ID */ #define TAILLE_ID 8 /*! \def TAILLE_NOMS */ @@ -29,7 +31,7 @@ /*! \def LARG_MAX_CARTE */ #define LARG_MAX_CARTE 16 /*! \def LONG_MAX_CARTE */ -#define HAUT_MAX_CARTE 16 +#define HAUT_MAX_CARTE 10 /*! \enum boolean * \brief Definition du type Boolean. @@ -73,8 +75,8 @@ typedef struct Terrain{ * sizeof(Case) = 12 octets */ typedef struct Case{ - unsigned short int coord_x; /*!< Abscisse de la case*/ - unsigned short int coord_y; /*!< Ordonnee de la case*/ + int coord_x; /*!< Abscisse de la case*/ + int coord_y; /*!< Ordonnee de la case*/ Terrain * terrain; /*!< Le type de terrain de la case*/ boolean occupee; /*!< La case est occupee ou non par un personnage*/ } Case; @@ -110,7 +112,7 @@ typedef struct Attaque{ char nom[TAILLE_NOMS]; /*!< Nom de l'attaque de taille TAILLE_NOMS*/ unsigned short int mana; unsigned short int portee; /*!< Portee en nombre de cases de l'attaque*/ - Effet effets[5]; /*!< Tableau des effets appliques par l'attaque, cela comprend les dégâts de duree*/ + Effet effets[5]; /*!< Tableau des effets appliques par l'attaque, cela comprend les dégâts de duree*/ } Attaque; /*! \struct Classe structures.h @@ -120,9 +122,9 @@ typedef struct Attaque{ typedef struct Classe{ char nom[25]; /*!< Nom de la classe de taille TAILLE_NOMS*/ Attaque attaques[5]; /*!< Les attaques disponibles pour la classe*/ - unsigned short int points_deplacement_max; /*!< Les PD maximums accordés a la classe*/ - unsigned short int PV_max; /*!< Les PV maximums accordés a la classe*/ - unsigned short int mana_max; /*!< Le mana maximum accordé a la classe*/ + unsigned short int points_deplacement_max; /*!< Les PD maximums accordés a la classe*/ + unsigned short int PV_max; /*!< Les PV maximums accordés a la classe*/ + unsigned short int mana_max; /*!< Le mana maximum accordé a la classe*/ Skins_Charac skins; }Classe; @@ -166,6 +168,14 @@ typedef struct Effet_Competence{ } Effet_Competence; +typedef struct Carte_A{ + char id[TAILLE_ID]; + char nom[50]; + char desc[100]; + char lignes[17][11]; +} Carte_A; + + /*! \struct Classe structures.h * \brief Definition de la structure Game_Package * sizeof(Classe) = @@ -174,6 +184,10 @@ typedef struct Game_Package{ Classe* Classes_Package; Terrain* Terrains_Package; Skins_GUI* GUI_Package; +<<<<<<< HEAD +======= + Carte_A* Cartes_Package; +>>>>>>> 57f279bead6985e78bdd728e0a2cef1f16b293f6 }Game_Package; @@ -187,7 +201,7 @@ typedef struct Game_Package{ */ typedef struct Joueur{ char nomJoueur[TAILLE_NOMS]; /*!< Le nom identifiant le Joueur*/ - Personnage * groupe[TAILLE_MAX_GROUPE];/*!< Les personnages du joueur qui prennent part à la partie.*/ + Personnage * groupe[TAILLE_MAX_GROUPE];/*!< Les personnages du joueur qui prennent part à la partie.*/ } Joueur; /*! \struct NodeJoueur structures.h @@ -219,12 +233,13 @@ typedef struct Game_Package{ * \brief Definition de la structure Partie * * Contient les informations concernant la partie telles que la liste des joueurs participants - * le nombre de tours. Cette structure permet de gérer les tours + * le nombre de tours. Cette structure permet de gérer les tours * Peut eventuellement contenir l'information Carte si c'est utile. * sizeof(Partie) = 12 octets */ - typedef struct Partie{ - ListJoueur * participants; /*!< La liste de joueurs prennant parts à la partie*/ + +typedef struct Partie{ + ListJoueur * participants; /*!< La liste de joueurs prennant parts à la partie*/ int nbTours; /*!<Le nombre de tours actuel*/ Carte * c; /*!<La Carte associee a la Partie*/ }Partie;