Skip to content
Snippets Groups Projects
Commit c085baf0 authored by Romain Jegat's avatar Romain Jegat
Browse files

Ajout d'une structure Carte_Jeu

parents c83a90b0 57f279be
No related branches found
No related tags found
No related merge requests found
Pipeline #
#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 gre 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 arrte
{
fprintf(stderr, "Impossible de charger le mode vido : %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'vnement */
{
case SDL_QUIT: /* Si c'est un vnement 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 vnement de type "touche presse" */
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'vnement */
{
case SDL_QUIT: /* Si c'est un vnement 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 vnement de type "touche presse" */
switch(event.key.keysym.sym){
case SDLK_ESCAPE:
affichermenu=0;
break;
default:
quitter=0;
}
break;
}
}
else{
switch(event.type) /* Test du type d'vnement */
{
case SDL_QUIT: /* Si c'est un vnement 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 vnement de type "touche presse" */
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;
}
<?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>
resources/Skins/Entrer_Royaume.bmp

6.85 KiB

......@@ -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;
}
......@@ -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
......@@ -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 dj occupe");
c->occupee=vrai;
}
void marquer_libre(Case *c){
if (c->occupee==faux) printf("case dj 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 dpasse");
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;
}
......@@ -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);*/
......
......@@ -9,9 +9,18 @@
#include "carte.h"
#include "Interface.h"
int init_jeu(char *filename){ /* cre les diffrents 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;
}
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment