diff --git a/src/Classes_XML_log b/src/Classes_XML_log new file mode 100644 index 0000000000000000000000000000000000000000..e2cc38ae1170346265de3885abb6ceaff3c52f98 --- /dev/null +++ b/src/Classes_XML_log @@ -0,0 +1,52 @@ +Fichier decrivant le deroulement de la procedure d'aquisition des classes + +I) Chargement du fichier XML - Definition des noeuds +Le fichier contient 5 classes +II) Chargement des classes +1) Memoire allouee avec succes +La memoire allouee fait 80 octets + +Chargement de la classe numero 1 +Id : C_MAGE +Nom : Mage +PV : 100 +PM : 150 +MV : 2 +DESC : Le feu, ça brûle +Insertion de la classe 1 dans le tableau + +Chargement de la classe numero 2 +Id : C_WAR +Nom : Guerrier +PV : 200 +PM : 150 +MV : 2 +DESC : Aime beaucoup le street art +Insertion de la classe 2 dans le tableau + +Chargement de la classe numero 3 +Id : C_HEAL +Nom : Guerrisseur +PV : 100 +PM : 150 +MV : 2 +DESC : Heal est des notres +Insertion de la classe 3 dans le tableau + +Chargement de la classe numero 4 +Id : C_ROGUE +Nom : Voleur +PV : 100 +PM : 150 +MV : 2 +DESC : 60 minutes, ça vaut l'heure +Insertion de la classe 4 dans le tableau + +Chargement de la classe numero 5 +Id : C_ARCHER +Nom : Archer +PV : 100 +PM : 150 +MV : 2 +DESC : Gérard, de son prénom +Insertion de la classe 5 dans le tableau diff --git a/src/SDL.c b/src/SDL.c index 0e09f12b9d6b5d81126a78591aee046883b94707..684eb41b0cbe48b0c4edec7c1cb37959bfc97655 100644 --- a/src/SDL.c +++ b/src/SDL.c @@ -1,23 +1,26 @@ #include <stdlib.h> #include <SDL/SDL.h> - -#define LARGEUR_CARTE 16 -#define HAUTEUR_CARTE 10 -#define LARGEUR_CASE 53 -#define HAUTEUR_CASE 71 -#define NB_PERSO 1 +#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. */ + int main_SDL() { - int i; - int j; - SDL_Event event; + int i,j; SDL_Surface* ecran=NULL; + SDL_Event event; SDL_Surface* perso[NB_PERSO]={NULL}; SDL_Surface* Case=NULL; SDL_Rect Position_Case[LARGEUR_CARTE*HAUTEUR_CARTE]; @@ -29,15 +32,15 @@ int main_SDL() 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); - SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0)); + SDL_WM_SetCaption("Elder Internal Ignition",NULL); perso[0] = SDL_LoadBMP("../resources/personnage.bmp"); if (!perso[0]) @@ -58,19 +61,21 @@ int main_SDL() { for(j=0;j<HAUTEUR_CARTE;j++) { - Position_Case[i*HAUTEUR_CARTE+j].x=LARGEUR_CASE*i; - Position_Case[i*HAUTEUR_CARTE+j].y=HAUTEUR_CASE*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[i*HAUTEUR_CARTE+j].x=LARGEUR_CASE*i; - Position_Case[i*HAUTEUR_CARTE+j].y=HAUTEUR_CASE*j+(HAUTEUR_CASE/2); + Position_Case[j*LARGEUR_CARTE+i].x=LARGEUR_CASE*i; + Position_Case[j*LARGEUR_CARTE+i].y=HAUTEUR_CASE*j+(HAUTEUR_CASE/2); } } - Position_Perso[0]=Position_Case[0]; + + init_controleur(Position_Case); + while(quitter==0) { SDL_WaitEvent(&event); @@ -79,36 +84,11 @@ int main_SDL() case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ quitter=1; break; + case SDL_MOUSEBUTTONDOWN: + deplacement_personnage(0,event.button.x,event.button.y); + break; case SDL_KEYDOWN:/* Si c'est un événement de type "touche pressée" */ switch(event.key.keysym.sym){ - case SDLK_KP7: - if(Position_Perso[0].y>0&&Position_Perso[0].x>0) - {Position_Perso[0].y-=HAUTEUR_CASE/2; - Position_Perso[0].x-=LARGEUR_CASE;} - break; - case SDLK_KP8: - if(Position_Perso[0].y>0) - Position_Perso[0].y-=HAUTEUR_CASE; - break; - case SDLK_KP9: - if((Position_Perso[0].y>0)&&(Position_Perso[0].x<LARGEUR_CASE*(LARGEUR_CARTE-1))) - {Position_Perso[0].y-=HAUTEUR_CASE/2; - Position_Perso[0].x+=LARGEUR_CASE;} - break; - case SDLK_KP1: - if(Position_Perso[0].y<HAUTEUR_CASE*(HAUTEUR_CARTE-1)&&Position_Perso[0].x>0) - {Position_Perso[0].y+=HAUTEUR_CASE/2; - Position_Perso[0].x-=LARGEUR_CASE;} - break; - case SDLK_KP2: - if(Position_Perso[0].y<HAUTEUR_CASE*(HAUTEUR_CARTE-1)) - Position_Perso[0].y+=HAUTEUR_CASE; - break; - case SDLK_KP3: - if(Position_Perso[0].y<HAUTEUR_CASE*(HAUTEUR_CARTE-1)&&Position_Perso[0].x<LARGEUR_CASE*(LARGEUR_CARTE-1)) - {Position_Perso[0].y+=HAUTEUR_CASE/2; - Position_Perso[0].x+=LARGEUR_CASE;} - break; case SDLK_ESCAPE: quitter=1; break; @@ -117,6 +97,8 @@ int main_SDL() } break; } + Position_Perso[0].x=get_position_perso_x(0); + Position_Perso[0].y=get_position_perso_y(0); SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0)); for(i=0;i<LARGEUR_CARTE*HAUTEUR_CARTE;i++) { @@ -133,188 +115,3 @@ int main_SDL() } - - - -int main_Open_Classrooms () -{ - int i; - SDL_Event event; - int continuer=0; - SDL_Surface* ecran=NULL; - SDL_Surface* rectangle=NULL; - SDL_Surface* image=NULL; - SDL_Rect position_image; - SDL_Rect position[256]; - - for(i=0;i<256;i++) - { - position[i].x=0; - position[i].y=i; - } - - - SDL_Surface* degrade[256]={NULL}; - - // initialize SDL video - if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) - { - printf( "Unable to init SDL: %s\n", SDL_GetError() ); - return 1; - } - - // create a new window - - ecran = SDL_SetVideoMode(800, 256, 16,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("fenetre de test",NULL); - - - - SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,200,89,3)); - SDL_Flip(ecran); - - while(continuer==0) - { - SDL_WaitEvent(&event); - switch(event.type) /* Test du type d'événement */ - { - case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ - SDL_Quit(); - exit(0); - break; - case SDL_KEYDOWN: - continuer=1; - break; - } - } - - continuer=0; - rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE,400,256,16,0,0,0,0); - SDL_FillRect(rectangle,NULL,SDL_MapRGB(ecran->format,0,127,255)); - SDL_BlitSurface(rectangle,NULL,ecran,&position[0]); - SDL_Flip(ecran); - - while(continuer==0) - { - SDL_WaitEvent(&event); - switch(event.type) /* Test du type d'événement */ - { - case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ - SDL_FreeSurface(rectangle); - SDL_Quit(); - exit(0); - break; - case SDL_KEYDOWN: - continuer=1; - break; - } - } - continuer=0; - for(i=0;i<256;i++) - { - degrade[i]=SDL_CreateRGBSurface(SDL_HWSURFACE,800,1,16,0,0,0,0); - SDL_FillRect(degrade[i],NULL,SDL_MapRGB(ecran->format,i,i,i)); - } - - for(i=0;i<256;i++) - { - SDL_BlitSurface(degrade[i],NULL,ecran,&position[i]); - } - SDL_Flip(ecran); - - while(continuer==0) - { - SDL_WaitEvent(&event); - switch(event.type) /* Test du type d'événement */ - { - case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ - for(i=0;i<256;i++) - { - SDL_FreeSurface(degrade[i]); - } - SDL_FreeSurface(rectangle); - SDL_Quit(); - exit(0); - break; - case SDL_KEYDOWN: - continuer=1; - break; - } - } - continuer=0; - for(i=0;i<256;i++) - { - SDL_FreeSurface(degrade[i]); - } - SDL_FreeSurface(rectangle); - - - - // load an image - image = SDL_LoadBMP("montagnes1.bmp"); - if (!image) - { - printf("Unable to load bitmap: %s\n", SDL_GetError()); - return 1; - } - SDL_BlitSurface(image,NULL,ecran,&position[0]); - SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,120,250,120)); - position_image=position[0]; - SDL_Flip(ecran); - - SDL_EnableKeyRepeat(10, 10); - while(1) - { - SDL_WaitEvent(&event); - switch(event.type) /* Test du type d'événement */ - { - case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ - SDL_FreeSurface(image); - SDL_Quit(); - exit(0); - break; - case SDL_MOUSEBUTTONDOWN: - position_image.x=event.button.x; - position_image.y=event.button.y; - break; - case SDL_KEYDOWN:/* Si c'est un événement de type "touche pressée" */ - switch(event.key.keysym.sym){ - case SDLK_UP: - if(position_image.y>0) - position_image.y--; - break; - case SDLK_DOWN: - if(position_image.y<256) - position_image.y++; - break; - case SDLK_LEFT: - if(position_image.x>0) - position_image.x--; - break; - case SDLK_RIGHT: - if(position_image.x<800) - position_image.x++; - break; - case SDLK_ESCAPE: - SDL_FreeSurface(image); - SDL_Quit(); - exit(0); - break; - default: - ; - } - break; - } - SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,120,250,120)); - SDL_BlitSurface(image,NULL,ecran,&position_image); - SDL_Flip(ecran); - } - - - return 0; -} diff --git a/src/SDL.h b/src/SDL.h index 2724b332a1ba6b71f7debd056e60c1634dcdc5e1..d1d7ade08eba5fb3f482617e11684351255b1a39 100644 --- a/src/SDL.h +++ b/src/SDL.h @@ -1,5 +1,5 @@ /*! -* \file AffichageConsole.h +* \file SDL.h * \brief Fichier contenant les signatures des fonctions liees a l'affichage par SDL. */ @@ -7,7 +7,13 @@ #ifndef SDL_H_INCLUDED #define SDL_H_INCLUDED +#define LARGEUR_CARTE 16 +#define HAUTEUR_CARTE 10 +#define LARGEUR_CASE 53 +#define HAUTEUR_CASE 71 +#define NB_PERSO 1 + int main_SDL(); -int main_Open_Classrooms (); + #endif diff --git a/src/Terrains_XML_log b/src/Terrains_XML_log new file mode 100644 index 0000000000000000000000000000000000000000..716eba775e49a0069fbb10215336ca60de8038ce --- /dev/null +++ b/src/Terrains_XML_log @@ -0,0 +1,43 @@ +Fichier decrivant le deroulement de la procedure d'aquisition des Terrains + +I) Chargement du fichier Terrains XML - Definition des noeuds +Le fichier contient 4 terrains +II) Chargement des terrains +1) Memoire allouee avec succes +La memoire allouee fait 64 octets + +Chargement du terrain numero 1 +Id : G_PLAIN +Nom : Plaine +FR : 1 +FRS : 1 +PDR : 1 +DESC : Plaine de bon sens +Insertion du terrain 1 dans le tableau + +Chargement du terrain numero 2 +Id : G_RIVER +Nom : Riviere +FR : 0 +FRS : 1 +PDR : 1 +DESC : River, arrete de river +Insertion du terrain 2 dans le tableau + +Chargement du terrain numero 3 +Id : G_FOREST +Nom : Foret +FR : 1 +FRS : 1 +PDR : 2 +DESC : Le frère de Fopart +Insertion du terrain 3 dans le tableau + +Chargement du terrain numero 4 +Id : G_MOUNT +Nom : Montagne +FR : 0 +FRS : 0 +PDR : 0 +DESC : Montagne est plus haut que tontagne +Insertion du terrain 4 dans le tableau diff --git a/src/affichage.c b/src/affichage.c deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/affichage.h b/src/affichage.h deleted file mode 100644 index e0db11a17db6432d50896419693dccd67a7d577f..0000000000000000000000000000000000000000 --- a/src/affichage.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef AFFICHAGE_H_INCLUDED -#define AFFICHAGE_H_INCLUDED - - - -#endif // AFFICHAGE_H_INCLUDED diff --git a/src/case.c b/src/case.c index f3f078982bed101bd51eacc573615564e6ba2784..a8622e554d5745cde1d452f23fc58c97a707b12b 100644 --- a/src/case.c +++ b/src/case.c @@ -75,6 +75,7 @@ int init_carte(Carte* c,unsigned short int largeur, unsigned short int hauteur){ * \param Les coordonnees a tester * \return Un pointeur vers la Case qui possede les coordonnees en entree, NULL s'il n'y a pas de Case avec ces coordonnees. */ + /* Case * trouverCase(Carte * c, int x, int y){ if((x<0)||(x>=LARG_MAX_CARTE)){ return NULL; @@ -85,4 +86,4 @@ Case * trouverCase(Carte * c, int x, int y){ else{ return c[(x*LARG_MAX_CARTE)+y]; } -} +} */ diff --git a/src/case.h b/src/case.h index a26b52ef37812a024537a61759d50d72bad61747..50035c9e020141c710d3e3edb53a71db4ab9827f 100644 --- a/src/case.h +++ b/src/case.h @@ -36,7 +36,7 @@ Terrain* get_terrain(Case *c); int init_carte(Carte* c,unsigned short int largeur, unsigned short int hauteur); -Case * trouverCase(Carte * c, int x, int y); +/*Case * trouverCase(Carte * c, int x, int y);*/ #endif diff --git a/src/controleurSDL.c b/src/controleurSDL.c new file mode 100644 index 0000000000000000000000000000000000000000..c92b8807d0e9a128c17e4bb5c83ca9cd9a9d2b4a --- /dev/null +++ b/src/controleurSDL.c @@ -0,0 +1,98 @@ +#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 controleurSDL.c +* \brief Fichier contenant le code des fonctions du controleur pour l'affichage avec SDL +*/ + + +Carte Carte_actuelle; +Personnage ListePersos[NB_PERSO]; + + +void init_controleur(SDL_Rect Position_Case[]) +{ + int i; + for(i=0;i<LARGEUR_CARTE*HAUTEUR_CARTE;i++) + { + init_case(&Carte_actuelle[i],Position_Case[i].x,Position_Case[i].y,NULL); + } + init_personnage(&ListePersos[0],NULL,&Carte_actuelle[0]); +} + +int x_case_cliquee(int x_pixel, int y_pixel) +{ + return x_pixel/LARGEUR_CASE; +} + +int y_case_cliquee(int x_pixel, int y_pixel) +{ + int i, x_case, y_case; + x_case = x_pixel/LARGEUR_CASE; + y_case = y_pixel/HAUTEUR_CASE; + for(i=1;i<LARGEUR_CARTE;i+=2) + { + if(x_case==i) + { + y_case=(y_pixel-HAUTEUR_CASE/2)/HAUTEUR_CASE; + } + } + return y_case; +} + +Case * trouverCase(Carte c, int x, int y) +{ + if((x<0)||(x>=LARGEUR_CARTE)){ + return NULL; + } + else if((y<0)||(y>=HAUTEUR_CARTE)){ + return NULL; + } + else{ + return &c[(y*LARGEUR_CARTE)+x]; + } +} + + +void deplacement_personnage(int num, int x, int y) +{ + if(x<LARGEUR_CARTE*LARGEUR_CASE&&y<HAUTEUR_CARTE*HAUTEUR_CASE) + { + Case* case_cliquee = trouverCase(Carte_actuelle,x_case_cliquee(x,y),y_case_cliquee(x,y)); + Personnage* perso = &ListePersos[num]; + if (case_a_cote(perso,case_cliquee,HAUTEUR_CASE,LARGEUR_CASE)==vrai) + { + deplacer_personnage(perso, case_cliquee); + } + } +} + +Case* get_case_perso(int num) +{ + Personnage* perso = &ListePersos[num]; + return getPosition(perso); +} + +int get_position_perso_x(int num) +{ + Case* case_perso = get_case_perso(num); + return get_x(case_perso); +} + +int get_position_perso_y(int num) +{ + Case* case_perso = get_case_perso(num); + return get_y(case_perso); +} + + diff --git a/src/controleurSDL.h b/src/controleurSDL.h new file mode 100644 index 0000000000000000000000000000000000000000..71d6d9c3db97845480f8d000477a39272c5083ae --- /dev/null +++ b/src/controleurSDL.h @@ -0,0 +1,28 @@ +/*! +* \file controleurSDL.h +* \brief Fichier contenant les signatures des fonctions du controleur pour l'affichage avec SDL. +*/ + + +#ifndef CONTROLEUR_SDL_H_INCLUDED +#define CONTROLEUR_SDL_H_INCLUDED + +int y_case_cliquee(int x_pixel, int y_pixel); + +int x_case_cliquee(int x_pixel, int y_pixel); + +Case * trouverCase(Carte c, int x, int y); + +void deplacement_personnage(int num, int x, int y); + +Case* get_case_perso(int num); + +int get_position_perso_x(int num); + +int get_position_perso_y(int num); + +void init_controleur(); + + +#endif + diff --git a/src/controlleur.c b/src/controlleur.c deleted file mode 100644 index 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000 --- a/src/controlleur.c +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/deplacements.c b/src/deplacements.c index 117b8104592c72cf75bd3b4402bbf5e436ac703d..cbfeeccf33fe4df7498f7a57cc087f6c4142a901 100644 --- a/src/deplacements.c +++ b/src/deplacements.c @@ -10,18 +10,18 @@ * \brief Fichier contenant le code des fonctions liees aux déplacements des personnages. */ -boolean case_a_cote(Personnage * perso, Case * destination){ /* vérifie que la case hexagonale "destination" est contigue à la case du personnage */ +boolean case_a_cote(Personnage * perso, Case * destination,int hauteur_case , int largeur_case){ /* vérifie que la case hexagonale "destination" est contigue à la case du personnage */ Case *depart = getPosition(perso); - if (get_x(depart)>get_x(destination)+1||get_x(depart)<get_x(destination)-1||get_y(depart)>get_y(destination)+1||get_y(depart)>get_y(destination)-1){ + if (get_x(depart)>get_x(destination)+largeur_case||get_x(depart)<get_x(destination)-largeur_case||get_y(depart)>get_y(destination)+hauteur_case||get_y(depart)<get_y(destination)-hauteur_case){ return faux; } - if (get_y(depart)==get_y(destination)+1&&get_x(depart)!=get_x(destination)){ + if (get_y(depart)==get_y(destination)+hauteur_case&&get_x(depart)!=get_x(destination)){ return faux; } return vrai; } -int deplacement_unitaire(Personnage *perso,Case * destination){ /*déplace un personnage sur une case située à côté de la sienne, si cela est possible */ +int deplacement_unitaire(Personnage *perso,Case * destination, int hauteur_case , int largeur_case){ /*déplace un personnage sur une case située à côté de la sienne, si cela est possible */ if (est_occupee(destination)){ printf("déplacement impossible : case déjà occupée par un personnage"); return 1; @@ -30,7 +30,7 @@ int deplacement_unitaire(Personnage *perso,Case * destination){ /*d printf("déplacement impossible : case infranchissable"); return 1; } - if (case_a_cote(perso,destination)==vrai){ + if (case_a_cote(perso,destination, hauteur_case, largeur_case)==vrai){ return deplacer_personnage(perso, destination); } printf("déplacement impossible : case non contigue"); diff --git a/src/deplacements.h b/src/deplacements.h index 0db414b5d140149076731ce42e0433d6b96b95d1..da5923c835ae921899ffd3200dab29bd0bdc07b6 100644 --- a/src/deplacements.h +++ b/src/deplacements.h @@ -6,9 +6,9 @@ #ifndef DEPLACEMENTS_H_INCLUDED #define DEPLACEMENTS_H_INCLUDED -boolean case_a_cote(Personnage *perso,Case *destination); +boolean case_a_cote(Personnage *perso,Case *destination,int hauteur_case, int largeur_case); -int deplacement_unitaire(Personnage *perso,Case *destination); +int deplacement_unitaire(Personnage *perso,Case * destination, int hauteur_case , int largeur_case); #endif diff --git a/src/main.c b/src/main.c index 02143c51fe7ea5921b136c15d81c2ab24f73f239..558af27d8b9e7c01f7b07dbcda0d94a1c50d0af6 100644 --- a/src/main.c +++ b/src/main.c @@ -67,7 +67,7 @@ int main() - init_jeu("../resources/Init_jeu.xml"); + init_jeu("../resources/Init_jeu.xml"); main_SDL(); diff --git a/src/personnage.c b/src/personnage.c index 830a1152d53d672eb81fde7bd13acba66c6af0cd..5022edb390b010fa0819e3867c66bf87766bd7bd 100644 --- a/src/personnage.c +++ b/src/personnage.c @@ -12,9 +12,11 @@ Personnage* init_personnage(Personnage *perso, Classe *c, Case *casedepart){ perso->classe=c; - perso->points_deplacement=c->points_deplacement_max; - perso->PV=c->PV_max; - perso->mana=c->mana_max; + if(c!=NULL){ + perso->points_deplacement=c->points_deplacement_max; + perso->PV=c->PV_max; + perso->mana=c->mana_max; + } perso->position=casedepart; marquer_occupee(casedepart); return perso;