Skip to content
Snippets Groups Projects
affichage.c 40.5 KiB
Newer Older
Montjoie Henri's avatar
Montjoie Henri committed
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>

#include "affichage.h"
#include "controleur.h"

/*!
* \file affichage.c
* \brief Fichier contenant le code des fonctions liees  l'affichage par la SDL.
*/

EtatsJeu etat;
char* nom_1;
char* nom_2;


/*!
 * \fn int main_affichage()
 * \brief Fonction principale de la partie affichage, elle appelle les autres en fonction de l'etat du jeu
 *
 */
int main_affichage()
{
    nom_1="Joueur 1";
    nom_2="Joueur 2";
    etat=LANCEMENT;/*lance le jeu direct  l'ecran de lancement, sans rentrer les noms des joueurs*/
    //etat=SAISIE_JOUEURS; /*lance le jeu  l'ecran "entrer nom joueur 1"*/

    if (SDL_Init(SDL_INIT_VIDEO)<0) /*initialisation de la SDL*/
    {
        printf("Unable to init SDL: %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }
    if(TTF_Init()==-1)  /*initialisation de SDL_ttf (affichage de texte)*/
    {
        fprintf(stderr, "Erreur d'initialisation de TTF_Init : %s\n", TTF_GetError());
        exit(EXIT_FAILURE);
    }

    while(etat!=FERMER)
    {
        switch(etat)
        {
        case SAISIE_JOUEURS:
            saisie_noms_joueurs();
            break;
        case LANCEMENT:
            affichage_ecran_accueil();
            break;
        case CONFIGURATION:
            affichage_menu_configuration();
            break;
        case TOUR_J1P1:
            affichage_carte();
            break;
        default:
            break;
/*!
 * \fn int perso_suivant(int numPerso)
 * \brief permet de changer de personnage
 *
 * \param le numro du personnage actuel (1,2, ou 3 pour le 1er joueur, 4,5, ou 6 pour le 2eme)
 * \return le numro du personnage suivant (respectivement 2,3,1 et 5,6,4)
 */
int perso_suivant(int numPerso)
{
Montjoie Henri's avatar
Montjoie Henri committed
    if (numPerso==NB_PERSO) numPerso=1;
    else if (numPerso==NB_PERSO*2) numPerso=NB_PERSO+1;
    else numPerso++;
    return numPerso;
/*!
 * \fn int actualiser_num_perso(int numPerso)
 * \brief permet de changer le personnage actuel lorsqu'on change de joueur
 *
 * \param le numro du personnage actuel (1,2,3 pour le 1er joueur, 4,5,6 pour le 2eme)
 * \return le numro du 1er personnage du joueur suivant (4 ou 1)
 */
int actualiser_num_perso(int numPerso)
{
Montjoie Henri's avatar
Montjoie Henri committed
    if (numPerso<=NB_PERSO) numPerso=NB_PERSO+1;
    else numPerso=1;
    return numPerso;
Montjoie Henri's avatar
Montjoie Henri committed
}
/*!
 * \fn int afficher_cartes_personnalisees()
 * \brief Fonction permettant le choix d'une carte personnalisee (cd qui n'est pas l'une des 4 previsualisees) par le joueur
 *        elle affiche leur nom, et leur description
 *
 * \return le numero de la carte choisie (ou -2 si l'utilisateur ferme la fenetre)
 */
int afficher_cartes_personnalisees()
{
    int i;
    int c=-1;
    int nbChoix=nbCartes()-4;
    SDL_Surface* fenetre=NULL;
    SDL_Surface* textes[nbChoix];
    SDL_Surface* desc[nbChoix];
    SDL_Rect positionsTextes[nbChoix];
    SDL_Rect positionsDesc[nbChoix];
    SDL_Event event;
    SDL_Color couleurNoire = {0, 0, 0};
    SDL_Color couleurBlanche = {255, 255, 255};
    TTF_Font* police=TTF_OpenFont("../resources/fonts/arial.ttf",40);
    TTF_Font* petite_police=TTF_OpenFont("../resources/fonts/arial.ttf",22);

    for(i=0; i<nbChoix; i++)
    {
        textes[i]=TTF_RenderText_Shaded(police, obtenirNomsCartes()[i+4], couleurBlanche,couleurNoire);
        desc[i]=TTF_RenderText_Shaded(petite_police, obtenirDescriptionCarte()[i+4], couleurBlanche,couleurNoire);
        positionsTextes[i].x=0;
        positionsDesc[i].x=0;
        positionsTextes[i].y=i*(textes[0]->h+desc[0]->h+5);
        positionsDesc[i].y=positionsTextes[i].y+textes[i]->h;
    }
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_WM_SetIcon(SDL_LoadBMP("../resources/Skins/icone.bmp"), NULL);
    fenetre = SDL_SetVideoMode(400, nbChoix*(textes[0]->h+desc[0]->h), 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE);
    while(c==-1)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
        case SDL_QUIT:
            c=-2;
            break;
        case SDL_MOUSEBUTTONDOWN:
            for(i=0; i<nbChoix; i++)
            {
                if(event.button.y/(textes[0]->h+desc[0]->h)==i)
                {
                    c=4+i;
                }
            }
            break;
        default:
            break;
        }
        for(i=0; i<nbChoix; i++)
        {
            SDL_BlitSurface(textes[i],NULL,fenetre,&positionsTextes[i]);
            SDL_BlitSurface(desc[i],NULL,fenetre,&positionsDesc[i]);
        }
        SDL_Flip(fenetre);
    }
    SDL_FreeSurface(fenetre);
    for(i=0; i<nbChoix; i++)
    {
        SDL_FreeSurface(textes[i]);
        SDL_FreeSurface(desc[i]);
    }
    TTF_CloseFont(police);
    TTF_CloseFont(petite_police);
    return c;
}


Montjoie Henri's avatar
Montjoie Henri committed
/*!
 * \fn char* afficherListeClasses(char** nomsClasses, char** skinsClasses, int nbChoix)
Montjoie Henri's avatar
Montjoie Henri committed
 * \brief Fonction permettant le choix de la classe d'un personnage par le joueur
 *
 * \param le tableau contenant les noms des classes, le tableau contenant les adresses de leurs images, et le nombre de classes
 * \return le nom de la classe choisie (ou "fermer" si l'utilisateur ferme la fenetre)
Montjoie Henri's avatar
Montjoie Henri committed
 */
char* afficherListeClasses(char** nomsClasses, char** skinsClasses, int nbChoix)
Montjoie Henri's avatar
Montjoie Henri committed
{
    int i, quitter;
    char* classeChoisie;
    SDL_Surface* fenetre=NULL;
    SDL_Event event;
    SDL_Surface* tabTextes[nbChoix];
    SDL_Surface* tabSkins[nbChoix];
    SDL_Rect positionsTextes[nbChoix];
    SDL_Rect positionsSkins[nbChoix];
    SDL_Color couleurNoire = {0, 0, 0};
    SDL_Color couleurTexte = {255,255,255};
    TTF_Font* police = TTF_OpenFont("../resources/fonts/arial.ttf",26);
Montjoie Henri's avatar
Montjoie Henri committed

Montjoie Henri's avatar
Montjoie Henri committed
        tabSkins[i]=SDL_LoadBMP(skinsClasses[i]);
        if (!tabSkins[i])
        {
            printf("Unable to load bitmap: %s\n", skinsClasses[i]);
            return NULL;
        }
        SDL_SetColorKey(tabSkins[i], SDL_SRCCOLORKEY, SDL_MapRGB(tabSkins[i]->format, 0, 0, 255));
    }
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_WM_SetIcon(SDL_LoadBMP("../resources/Skins/icone.bmp"), NULL);
Montjoie Henri's avatar
Montjoie Henri committed
    fenetre = SDL_SetVideoMode(260, nbChoix*tabSkins[0]->h, 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE);
    SDL_FillRect(fenetre,NULL,SDL_MapRGB(fenetre->format,0,0,0));

    quitter=0;
    while(quitter==0)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
Montjoie Henri's avatar
Montjoie Henri committed
            classeChoisie= "fermer";
            quitter=1;
            break;
        case SDL_MOUSEBUTTONDOWN:
            for(i=0; i<nbChoix; i++)
            {
                if(event.button.y/positionsSkins[0].h==i)
                {
                    classeChoisie=nomsClasses[i];
                    quitter=1;
                }
            }
            break;
        default:
            break;
Montjoie Henri's avatar
Montjoie Henri committed
        }
        for(i=0; i<nbChoix; i++)
Montjoie Henri's avatar
Montjoie Henri committed
        {
            tabTextes[i]=TTF_RenderText_Shaded(police, nomsClasses[i], couleurTexte,couleurNoire);
            positionsSkins[i].y=i*tabSkins[0]->h;
            positionsSkins[i].x=0;
            positionsTextes[i].x=tabSkins[i]->w+4;
            positionsTextes[i].y=positionsSkins[i].y+(tabSkins[i]->h/3);
            SDL_BlitSurface(tabTextes[i],NULL,fenetre,&positionsTextes[i]);
            SDL_BlitSurface(tabSkins[i],NULL,fenetre,&positionsSkins[i]);
        }
        SDL_Flip(fenetre);
    }
    for(i=0; i<nbChoix; i++)
    {
        SDL_FreeSurface(tabTextes[i]);
        SDL_FreeSurface(tabSkins[i]);
    }
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_FreeSurface(fenetre);
    TTF_CloseFont(police);
Montjoie Henri's avatar
Montjoie Henri committed
    return classeChoisie;
}

/*!
 * \fn char* choix_attaque(char** noms_attaques, int nb_attaques)
 * \brief Fonction permettant le choix d'une attaque parmi celles que peut lancer le personnage selectionne
 *
 * \param les noms des attaques et leur nombre
 * \return le nom de l'attaque choisie
 */
char* choix_attaque(char** noms_attaques, int nb_attaques)
{
    int i,quitter;
    char* attaque_choisie=NULL;
    SDL_Surface* fenetre=NULL;
    SDL_Event event;
    SDL_Surface* tabTextes[nb_attaques];
    SDL_Rect positionsTextes[nb_attaques];
    SDL_Color couleurNoire = {0, 0, 0};
    SDL_Color couleurTexte = {255,255,255};
    TTF_Font* police = TTF_OpenFont("../resources/fonts/arial.ttf",26);

    for(i=0; i<nb_attaques; i++)
    {
        tabTextes[i]=TTF_RenderText_Shaded(police, noms_attaques[i], couleurTexte,couleurNoire);
        positionsTextes[i].x=5;
        positionsTextes[i].y=i*(3*tabTextes[0]->h)/2;
    }

    SDL_WM_SetIcon(SDL_LoadBMP("../resources/Skins/icone.bmp"), NULL);
    fenetre = SDL_SetVideoMode(260, positionsTextes[nb_attaques-1].y+(3*tabTextes[0]->h)/2, 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE);
    SDL_FillRect(fenetre,NULL,SDL_MapRGB(fenetre->format,0,0,0));

    quitter=0;
    while(quitter==0)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
        case SDL_MOUSEBUTTONDOWN:
            for(i=0; i<nb_attaques; i++)
            {
                if(event.button.y/tabTextes[0]->h==i)
                {
                    attaque_choisie=noms_attaques[i];
                    quitter=1;
                }
            }
            break;
        default:
            break;
        }
        for(i=0; i<nb_attaques; i++)
        {
            SDL_BlitSurface(tabTextes[i],NULL,fenetre,&positionsTextes[i]);
        }
        SDL_Flip(fenetre);
    }
    for(i=0; i<nb_attaques; i++)
    {
        SDL_FreeSurface(tabTextes[i]);
    }
    SDL_FreeSurface(fenetre);
    TTF_CloseFont(police);
    return attaque_choisie;
}

Montjoie Henri's avatar
Montjoie Henri committed

/*!
 * \fn int saisie_noms_joueurs()
 * \brief fonction qui gre l'affichage de l'ecran de saisie des noms des joueurs
 */
int saisie_noms_joueurs()
{
    SDL_Surface* ecran=NULL;
    SDL_Surface* logo = NULL;
    SDL_Surface* texte = NULL;
    SDL_Rect pos_logo;
    SDL_Rect pos_texte;
    TTF_Font *police = NULL;

    SDL_Color couleurNoire = {0, 0, 0};
    SDL_Color couleurBlanche = {255, 255, 255};

    etat=SAISIE_JOUEURS;
    police=TTF_OpenFont("../resources/fonts/arial.ttf",26);

Montjoie Henri's avatar
Montjoie Henri committed
    SDL_WM_SetIcon(SDL_LoadBMP("../resources/Skins/icone.bmp"), NULL);
Montjoie Henri's avatar
Montjoie Henri committed
    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);

    texte = TTF_RenderText_Shaded(police, "Entrez le nom du joueur 1", couleurBlanche,couleurNoire);

    SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0));

    logo = SDL_LoadBMP("../resources/Skins/logo.bmp");
    if (!logo)
    {
        printf("Unable to load bitmap: %s\n", SDL_GetError());
        return 1;
    }
    pos_logo.x=(ecran->w-logo->w)/2;
    pos_logo.y=0;
    pos_texte.x=(ecran->w-texte->w)/2;
    pos_texte.y=ecran->h-200;
    SDL_BlitSurface(texte,NULL,ecran,&pos_texte);
    SDL_BlitSurface(logo,NULL,ecran,&pos_logo);
    SDL_Flip(ecran);

    char nom_joueur1[TAILLE_NOMS] = "";
    fgets(nom_joueur1, sizeof(nom_joueur1), stdin);
    if(strlen(nom_joueur1)>TAILLE_NOMS-2)
    {
Montjoie Henri's avatar
Montjoie Henri committed
        printf("erreur : nom trop long");
        return -1;
    }
    if(strlen(nom_joueur1)>1)
    {
        nom_joueur1[strlen(nom_joueur1)-1]=NULL;
    }
Montjoie Henri's avatar
Montjoie Henri committed

    char nom_joueur2[TAILLE_NOMS] = "";

    texte = TTF_RenderText_Shaded(police, "Entrez le nom du joueur 2", couleurBlanche,couleurNoire);
    SDL_BlitSurface(texte,NULL,ecran,&pos_texte);
    SDL_Flip(ecran);

    fgets(nom_joueur2, sizeof(nom_joueur2), stdin);
    if(strlen(nom_joueur1)>TAILLE_NOMS-2)
    {
Montjoie Henri's avatar
Montjoie Henri committed
        printf("erreur : nom trop long");
        return -1;
    }
    if(strlen(nom_joueur2)>1)
    {
        nom_joueur2[strlen(nom_joueur2)-1]=NULL;
    }
Montjoie Henri's avatar
Montjoie Henri committed

    nom_1=nom_joueur1;
    nom_2=nom_joueur2;

    TTF_CloseFont(police);
    SDL_FreeSurface(ecran);
    SDL_FreeSurface(logo);
    SDL_FreeSurface(texte);
Montjoie Henri's avatar
Montjoie Henri committed
    return 0;
}


/*!
 * \fn int affichage_ecran_accueil()
Montjoie Henri's avatar
Montjoie Henri committed
 * \brief fonction qui gre l'affichage de l'ecran d'accueil (logo + bouton de lancement)
 */
int affichage_ecran_accueil()
{
    ajouterUnJoueur(nom_1,&etat);
    ajouterUnJoueur(nom_2,&etat);
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_WM_SetIcon(SDL_LoadBMP("../resources/Skins/icone.bmp"), NULL);
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Surface* ecran = SDL_SetVideoMode(LARGEUR_CARTE*(LARGEUR_CASE+1), HAUTEUR_CARTE*(HAUTEUR_CASE+2), 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
    SDL_WM_SetCaption("Elder Internal Ignition",NULL);
    SDL_Event event;
    SDL_Surface* logo = NULL;
    SDL_Surface* texte = NULL;
    TTF_Font *police = NULL;
    SDL_Rect pos_logo;
    SDL_Rect pos_texte;
    SDL_Color couleurBleue = {10, 30, 80};
    SDL_Color couleurDoree = {190, 190, 120};

    police=TTF_OpenFont("../resources/fonts/OLDENGL.ttf",40);
    texte = TTF_RenderText_Shaded(police, "Entrez dans le Royaume !", couleurDoree,couleurBleue);
    pos_texte.x=(ecran->w-texte->w)/2;
    pos_texte.y=ecran->h-200;

    logo = SDL_LoadBMP("../resources/Skins/logo.bmp");
    if (!logo)
    {
        printf("Unable to load bitmap: %s\n", SDL_GetError());
        return 1;
    }
    pos_logo.x=(ecran->w-logo->w)/2;
    pos_logo.y=0;
    SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0));
    SDL_BlitSurface(logo,NULL,ecran,&pos_logo);
    SDL_BlitSurface(texte,NULL,ecran,&pos_texte);
    SDL_Flip(ecran);

    while(etat==LANCEMENT)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
        case SDL_QUIT:
            etat=FERMER;
            break;
        case SDL_MOUSEBUTTONDOWN:
            if (event.button.x<pos_texte.x+texte->w&&event.button.x>pos_texte.x&&event.button.y<pos_texte.y+texte->h&&event.button.y>pos_texte.y)
            {
                etat=CONFIGURATION;
            }
            break;
        default:
            break;
Montjoie Henri's avatar
Montjoie Henri committed
        }
        SDL_BlitSurface(logo,NULL,ecran,&pos_logo);
        SDL_BlitSurface(texte,NULL,ecran,&pos_texte);
        SDL_Flip(ecran);
    }
    TTF_CloseFont(police);
    SDL_FreeSurface(ecran);
    SDL_FreeSurface(logo);
    SDL_FreeSurface(texte);
Montjoie Henri's avatar
Montjoie Henri committed
    return 0;
}


/*!
 * \fn int affichage_menu_configuration()
 * \brief fonction qui gre l'affichage de l'ecran de configuration de la partie (choix de la carte et des personnages)
 */
int affichage_menu_configuration()
{
    int nombre_classes=nbClasses();
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_WM_SetIcon(SDL_LoadBMP("../resources/Skins/icone.bmp"), NULL);
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Surface* ecran = SDL_SetVideoMode(LARGEUR_CARTE*(LARGEUR_CASE+1), HAUTEUR_CARTE*(HAUTEUR_CASE+2), 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
    SDL_WM_SetCaption("Elder Internal Ignition",NULL);
    SDL_Event event;
    SDL_Surface* lancer_partie = NULL;
    SDL_Surface* map_choisie = NULL;
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Surface* texte = NULL;
    SDL_Surface* texte2 = NULL;
    SDL_Surface* texte3 = NULL;
    SDL_Surface* previsualisation[5]= {NULL};
    SDL_Surface* textes[NB_JOUEURS*NB_PERSO]= {NULL};
    SDL_Surface* images_classes[nombre_classes];
    SDL_Surface* images_persos[NB_PERSO][NB_JOUEURS]= {{NULL}};
    SDL_Rect positions_images[NB_PERSO][NB_JOUEURS];
    SDL_Rect posTextes[NB_JOUEURS*NB_PERSO];
    SDL_Rect pos_bouton;
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Rect pos_texte;
    SDL_Rect pos_texte2;
    SDL_Rect pos_texte3;
    SDL_Rect pos_texte3_bis;
    SDL_Rect position_carte[5];
    TTF_Font *police = NULL;
    TTF_Font *petite_police = NULL;
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Color couleurNoire = {0, 0, 0};
    SDL_Color couleurBlanche = {255, 255, 255};
    SDL_Color couleurBleue = {10, 30, 80};
    SDL_Color couleurDoree = {190, 190, 120};
Montjoie Henri's avatar
Montjoie Henri committed

    SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0));

    police=TTF_OpenFont("../resources/fonts/OLDENGL.ttf",46);
Montjoie Henri's avatar
Montjoie Henri committed
    petite_police=TTF_OpenFont("../resources/fonts/OLDENGL.ttf",32);

    lancer_partie= TTF_RenderText_Shaded(police, "Lancer la partie", couleurDoree, couleurBleue);
    pos_bouton.y=ecran->h-lancer_partie->h-25;
    pos_bouton.x=(ecran->w-lancer_partie->w)/2;
Montjoie Henri's avatar
Montjoie Henri committed
    texte= TTF_RenderText_Shaded(police, nom_1, couleurBlanche,couleurNoire);
    texte2= TTF_RenderText_Shaded(police, nom_2, couleurBlanche, couleurNoire);
    texte3= TTF_RenderText_Shaded(petite_police, "Choisissez vos personnages", couleurBlanche, couleurNoire);
Montjoie Henri's avatar
Montjoie Henri committed
    pos_texte.x=ecran->w/4-texte->w/2;
    pos_texte.y=10;
    pos_texte2.x=(3*ecran->w)/4-texte2->w/2;
    pos_texte2.y=10;
    pos_texte3.x=pos_texte.x-(texte3->w-texte->w)/2;
    pos_texte3.y=pos_texte.y+(3*texte3->h)/2;
    pos_texte3_bis.x=pos_texte2.x-(texte3->w-texte2->w)/2;
    pos_texte3_bis.y=pos_texte2.y+(3*texte3->h)/2;

    SDL_BlitSurface(texte,NULL,ecran,&pos_texte);
    SDL_BlitSurface(texte2,NULL,ecran,&pos_texte2);
    SDL_BlitSurface(texte3,NULL,ecran,&pos_texte3);
    SDL_BlitSurface(texte3,NULL,ecran,&pos_texte3_bis);

    police=TTF_OpenFont("../resources/fonts/arial.ttf",26);

Montjoie Henri's avatar
Montjoie Henri committed
    char src[2], dest[20];
    for(i=0; i<NB_PERSO; i++)
Montjoie Henri's avatar
Montjoie Henri committed
    {
        strcpy(dest,  "Personnage ");
        textes[i]= TTF_RenderText_Shaded(police, strcat(dest, src), couleurBlanche,couleurNoire);
        posTextes[i].x=ecran->w/4-textes[i]->w/2;
Montjoie Henri's avatar
Montjoie Henri committed
        posTextes[i].y=(i+1)*ecran->h/6;
        SDL_BlitSurface(textes[i],NULL,ecran,&(posTextes[i]));
Montjoie Henri's avatar
Montjoie Henri committed
    }
    for(i=NB_PERSO; i<NB_JOUEURS*NB_PERSO; i++)
Montjoie Henri's avatar
Montjoie Henri committed
    {
        strcpy(dest,  "Personnage ");
        textes[i]= TTF_RenderText_Shaded(police, strcat(dest, src), couleurBlanche,couleurNoire);
        posTextes[i].x=(3*ecran->w)/4-textes[i]->w/2;
        posTextes[i].y=posTextes[i-NB_PERSO].y;
        SDL_BlitSurface(textes[i],NULL,ecran,&posTextes[i]);
Montjoie Henri's avatar
Montjoie Henri committed
    }

    char** path_images=obtenirSkinsClasses();
    int numClassePerso[NB_PERSO][NB_JOUEURS]= {{-1,-1},{-1,-1},{-1,-1}};
    j=0; /*numero du joeuur*/
    p=0; /*numero du personnage*/
Montjoie Henri's avatar
Montjoie Henri committed
    char *classeChoisie;
    for(i=0; i<nombre_classes; i++)
Montjoie Henri's avatar
Montjoie Henri committed
    {
        images_classes[i]=SDL_LoadBMP(path_images[i]);
        if (!images_classes[i])
        {
            printf("Unable to load bitmap: %s\n", SDL_GetError());
            return 1;
        }
        SDL_SetColorKey(images_classes[i], SDL_SRCCOLORKEY, SDL_MapRGB(images_classes[i]->format, 0, 0, 255));
    }

    map_choisie=SDL_LoadBMP("../resources/Skins/Map_select.bmp");
Montjoie Henri's avatar
Montjoie Henri committed
    if (!map_choisie)
    {
        printf("Unable to load bitmap: %s\n", SDL_GetError());
        return 1;
    }
    SDL_SetColorKey(map_choisie, SDL_SRCCOLORKEY, SDL_MapRGB(map_choisie->format, 0, 0, 255));

Montjoie Henri's avatar
Montjoie Henri committed
    char* path[5];
    path[0]="../resources/Skins/Map_1.bmp";        //a revoir : cela peut se trouver dans le XML
Montjoie Henri's avatar
Montjoie Henri committed
    path[1]="../resources/Skins/Map_2.bmp";
    path[2]="../resources/Skins/Map_3.bmp";
    path[3]="../resources/Skins/Map_4.bmp";
    path[4]="../resources/Skins/autre_map.bmp";

Montjoie Henri's avatar
Montjoie Henri committed
    {
        previsualisation[i]=SDL_LoadBMP(path[i]);
        if (!previsualisation[i])
        {
            printf("Unable to load bitmap: %s\n", SDL_GetError());
            return 1;
        }
        position_carte[i].y=(ecran->h)-(previsualisation[i]->h+100);
        position_carte[i].x=(ecran->w-previsualisation[i]->w)/2+(10+previsualisation[i]->w)*(i-2);
    }
Montjoie Henri's avatar
Montjoie Henri committed

    c=-1; /*le numro de la carte choisie*/
Montjoie Henri's avatar
Montjoie Henri committed
    while(etat==CONFIGURATION)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
        case SDL_QUIT:
            etat=FERMER;
            return 0;
            break;
        case SDL_MOUSEBUTTONDOWN:
            if(event.button.x>pos_bouton.x&&event.button.x<pos_bouton.x+lancer_partie->w&&event.button.y>pos_bouton.y&&event.button.y<pos_bouton.y+lancer_partie->h)
            {
                for(i=0; i<NB_PERSO; i++)
                {
                    for(k=0; k<NB_JOUEURS; k++)
                    {
                        if(numClassePerso[i][k]==-1)
                        {
                            p=-1;
                    printf("Choisissez une carte\n");
Montjoie Henri's avatar
Montjoie Henri committed
                }
                    printf("Selectionnez des personnages\n");
Montjoie Henri's avatar
Montjoie Henri committed
                }
            }
            for(i=0; i<5; i++)
            {
                if(event.button.x>position_carte[i].x&&event.button.x<position_carte[i].x+previsualisation[0]->w&&event.button.y>position_carte[i].y&&event.button.y<position_carte[i].y+previsualisation[0]->h)
                {
                    if(i!=4)
                    {
                        c=i;
                        selectionnerCarte(obtenirNomsCartes()[c]);
                    }
                    else
                    {
                        c=afficher_cartes_personnalisees();
                            selectionnerCarte(obtenirNomsCartes()[c]);
                        }
                        ecran = SDL_SetVideoMode(LARGEUR_CARTE*(LARGEUR_CASE+1), HAUTEUR_CARTE*(HAUTEUR_CASE+2), 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
                    }
                }
            }
            if(event.button.x>posTextes[0].x&&event.button.x<posTextes[0].x+textes[0]->w)
                j=1;
            if(event.button.x>posTextes[NB_PERSO].x&&event.button.x<posTextes[NB_PERSO].x+textes[NB_PERSO]->w)
                j=2;
            for(i=0; i<NB_PERSO; i++)
            {
                if(event.button.y>posTextes[i].y&&event.button.y<posTextes[i].y+textes[i]->h)
                    p=i+1;
            }
            if(j!=0&&p!=0)
            {
                classeChoisie=afficherListeClasses(obtenirNomsClasses(), obtenirSkinsClasses(), nombre_classes);
                if(classeChoisie!="fermer")
                {
                    numClassePerso[p-1][j-1]=ajouterPersonnage(classeChoisie, p-1, j);
                }
                ecran = SDL_SetVideoMode(LARGEUR_CARTE*(LARGEUR_CASE+1), HAUTEUR_CARTE*(HAUTEUR_CASE+2), 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
            }
            break;
        default:
            break;
Montjoie Henri's avatar
Montjoie Henri committed
        }
        for(i=0; i<NB_JOUEURS*NB_PERSO; i++)
        {
            SDL_BlitSurface(textes[i],NULL,ecran,&(posTextes[i]));
Montjoie Henri's avatar
Montjoie Henri committed
        }
        for(i=0; i<NB_PERSO; i++)
        {
            for(k=0; k<NB_JOUEURS; k++)
            {
                positions_images[i][k].y=posTextes[i].y+textes[i]->h;
                positions_images[i][k].x=posTextes[NB_PERSO*k].x+(textes[NB_PERSO*k]->w-images_classes[0]->w)/2;
Montjoie Henri's avatar
Montjoie Henri committed
                images_persos[i][k]=images_classes[numClassePerso[i][k]];
                if(numClassePerso[i][k]!=-1)
                {
                    SDL_BlitSurface(images_persos[i][k],NULL,ecran,&positions_images[i][k]);
                }
            }
        }
        SDL_BlitSurface(lancer_partie,NULL,ecran,&pos_bouton);
Montjoie Henri's avatar
Montjoie Henri committed
        SDL_BlitSurface(texte,NULL,ecran,&pos_texte);
        SDL_BlitSurface(texte2,NULL,ecran,&pos_texte2);
        SDL_BlitSurface(texte3,NULL,ecran,&pos_texte3);
        SDL_BlitSurface(texte3,NULL,ecran,&pos_texte3_bis);
Montjoie Henri's avatar
Montjoie Henri committed
        {
            SDL_BlitSurface(previsualisation[i],NULL,ecran,&position_carte[i]);
        }
        if(c>-1&&c<4) SDL_BlitSurface(map_choisie,NULL,ecran,&position_carte[c]);
        if(c>3) SDL_BlitSurface(map_choisie,NULL,ecran,&position_carte[4]);
Montjoie Henri's avatar
Montjoie Henri committed
        SDL_Flip(ecran);
        p=0;
        j=0;
    }
Montjoie Henri's avatar
Montjoie Henri committed
    initPositions();
    TTF_CloseFont(police);
    TTF_CloseFont(petite_police);
    SDL_FreeSurface(ecran);
    SDL_FreeSurface(map_choisie);
    SDL_FreeSurface(texte);
    SDL_FreeSurface(texte2);
    SDL_FreeSurface(texte3);
    SDL_FreeSurface(lancer_partie);
        SDL_FreeSurface(previsualisation[i]);
    }
    for(i=0; i<NB_PERSO*NB_JOUEURS; i++)
    {
        SDL_FreeSurface(textes[i]);
    for(i=0; i<nombre_classes; i++)
    {
        SDL_FreeSurface(images_classes[i]);
    }
Montjoie Henri's avatar
Montjoie Henri committed
    return 0;
}


/*!
 * \fn int affichage_carte()
 * \brief fonction qui gre l'affichage pendant la partie (carte, personnages, PV, etc)
Montjoie Henri's avatar
Montjoie Henri committed
 */

Montjoie Henri's avatar
Montjoie Henri committed
    int i,j,y=0;
    int x=0;
    int perso_actuel=4;
    char* attaque_choisie = NULL;
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Event event;
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_WM_SetIcon(SDL_LoadBMP("../resources/Skins/icone.bmp"), NULL);
    SDL_Surface* ecran=SDL_SetVideoMode(LARGEUR_CARTE*(LARGEUR_CASE)+LARGEUR_BORDURE, HAUTEUR_CARTE*(HAUTEUR_CASE+2), 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
    SDL_Surface* cases[HAUTEUR_CARTE][LARGEUR_CARTE];
    SDL_Surface* persos[NB_PERSO*NB_JOUEURS];
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Surface* Case_brillante=NULL;
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Surface* perso_select=NULL;
    SDL_Rect Position_Case[HAUTEUR_CARTE][LARGEUR_CARTE];
    SDL_Rect Position_Perso[NB_PERSO*NB_JOUEURS];
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Rect Position_Case_brillante;

    SDL_Surface* perso;        //surfaces affichees sur le cote
    SDL_Surface* PV = NULL;
    SDL_Surface* coeur = NULL;
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Surface* mana = NULL;
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Surface* nom_joueur = NULL;
    SDL_Surface* bouton1 = NULL;
    SDL_Surface* bouton2 = NULL;
    SDL_Surface* bouton3 = NULL;
    SDL_Surface* nombre_deplacement = NULL;
    SDL_Surface* camp_1 = NULL;
    SDL_Surface* camp_2 = NULL;
    SDL_Rect pos_perso;
    SDL_Rect pos_PV;
    SDL_Rect pos_coeur;
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Rect pos_mana;
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_Rect pos_nom_joueur;
    SDL_Rect pos_bouton1;
    SDL_Rect pos_bouton2;
    SDL_Rect pos_bouton3;
    TTF_Font *vieille_police = NULL;
    TTF_Font *police_arial = NULL;
    SDL_Color couleurNoire = {0, 0, 0};
    SDL_Color couleurBlanche = {255, 255, 255};
    SDL_Color couleurBleue = {10, 30, 80};
    SDL_Color couleurDoree = {190, 190, 120};

Montjoie Henri's avatar
Montjoie Henri committed
    vieille_police=TTF_OpenFont("../resources/fonts/OLDENGL.ttf",30);
    police_arial=TTF_OpenFont("../resources/fonts/arial.ttf",22);
    texte= TTF_RenderText_Shaded(vieille_police, "Joueur actuel :", couleurBlanche,couleurNoire);
    nom_joueur= TTF_RenderText_Shaded(vieille_police, obtenirNomJoueurCourant(), couleurBlanche, couleurNoire);
Montjoie Henri's avatar
Montjoie Henri committed
    bouton1= TTF_RenderText_Shaded(vieille_police, "Perso suivant", couleurDoree, couleurBleue);
    bouton2= TTF_RenderText_Shaded(vieille_police, "Joueur suivant", couleurDoree, couleurBleue);
    bouton3= TTF_RenderText_Shaded(vieille_police, "Attaquer", couleurDoree, couleurBleue);
    coeur = SDL_LoadBMP("../resources/Skins/coeur.bmp");
Montjoie Henri's avatar
Montjoie Henri committed

    sprintf(buffer_PV, "PV : %d/%d", obtenirPVPersonnage(perso_actuel),obtenirPVMaxPersonnage(perso_actuel));
    PV=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
    sprintf(buffer_PV, "Mana : %d/%d", obtenirManaPersonnage(perso_actuel),obtenirManaMaxPersonnage(perso_actuel));
    mana=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
Montjoie Henri's avatar
Montjoie Henri committed
    sprintf(buffer_PV, "Personnage %d", perso_actuel-NB_PERSO);
    personnage_numero=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
    sprintf(buffer_PV, "Deplacement : %d", obtenirPDPersonnage(perso_actuel));
    nombre_deplacement=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
    for(i=0; i<LARGEUR_CARTE; i++)
    {
        for(j=0; j<HAUTEUR_CARTE; j++)
Montjoie Henri's avatar
Montjoie Henri committed
        {
            cases[j][i]=SDL_LoadBMP(ObtenirRessourceTerrain(i,j));
            if (!cases[j][i])
            {
                printf("Unable to load bitmap: %s\n", SDL_GetError());
                return 1;
            }
            SDL_SetColorKey(cases[j][i], SDL_SRCCOLORKEY, SDL_MapRGB(cases[j][i]->format, 0, 0, 255));
Montjoie Henri's avatar
Montjoie Henri committed
        }
Montjoie Henri's avatar
Montjoie Henri committed
    for(i=0; i<NB_JOUEURS*NB_PERSO; i++)
    {
        persos[i]=SDL_LoadBMP(obtenirRessourcePersonnageNum(i+1));
        if (!persos[i])
        {
            printf("Unable to load bitmap: %s\n", SDL_GetError());
            return 1;
        }
        SDL_SetColorKey( persos[i], SDL_SRCCOLORKEY, SDL_MapRGB( persos[i]->format, 0, 0, 255));
    }
    perso=persos[perso_actuel-1];

Montjoie Henri's avatar
Montjoie Henri committed
    perso_select = SDL_LoadBMP("../resources/Skins/guerrier_select.bmp");
    if (!perso_select)
    {
        printf("Unable to load bitmap: %s\n", SDL_GetError());
        return 1;
    }
Montjoie Henri's avatar
Montjoie Henri committed
    SDL_SetColorKey(perso_select, SDL_SRCCOLORKEY, SDL_MapRGB(perso_select->format, 0, 0, 255));
Montjoie Henri's avatar
Montjoie Henri committed

    Case_brillante = SDL_LoadBMP("../resources/Skins/case_brillante.bmp");
Montjoie Henri's avatar
Montjoie Henri committed
    {
        printf("Unable to load bitmap: %s\n", SDL_GetError());
        return 1;
Montjoie Henri's avatar
Montjoie Henri committed
    }
    SDL_SetColorKey(Case_brillante, SDL_SRCCOLORKEY, SDL_MapRGB(Case_brillante->format, 0, 0, 255));
    camp_1 = SDL_LoadBMP("../resources/Skins/camp_1.bmp");
    if (!camp_1)
    {
        printf("Unable to load bitmap: %s\n", SDL_GetError());
        return 1;
    }
    SDL_SetColorKey(camp_1, SDL_SRCCOLORKEY, SDL_MapRGB(camp_1->format, 0, 0, 255));

    camp_2 = SDL_LoadBMP("../resources/Skins/camp_2.bmp");
    if (!camp_1)
    {
        printf("Unable to load bitmap: %s\n", SDL_GetError());
        return 1;
    }
    SDL_SetColorKey(camp_2, SDL_SRCCOLORKEY, SDL_MapRGB(camp_2->format, 0, 0, 255));

    pos_texte.x=ecran->w-(LARGEUR_BORDURE+texte->w)/2;
    pos_texte.y=20;
    pos_nom_joueur.x=ecran->w-(LARGEUR_BORDURE+nom_joueur->w)/2;
    pos_nom_joueur.y=pos_texte.y+(3*texte->h)/2;
    pos_perso.x=ecran->w-(LARGEUR_BORDURE+perso->w)/2;
    pos_perso.y=ecran->h/4;
    pos_campx.x=ecran->w-(LARGEUR_BORDURE+perso->w)/2;
    pos_campx.y=ecran->h/4;
    pos_personnage_numero.x=ecran->w-(LARGEUR_BORDURE+personnage_numero->w)/2;
    pos_personnage_numero.y=pos_perso.y+perso->h;
    pos_PV.x=ecran->w-(LARGEUR_BORDURE-25);
    pos_PV.y=pos_personnage_numero.y+(5*PV->h)/2;
    pos_mana.x=ecran->w-(LARGEUR_BORDURE-25);
    pos_mana.y=pos_PV.y+(3*PV->h)/2;
    pos_nombre_deplacement.x=ecran->w-(LARGEUR_BORDURE-25);
    pos_nombre_deplacement.y=pos_mana.y+(3*PV->h)/2;
    pos_bouton2.x=ecran->w-(LARGEUR_BORDURE-25);
    pos_bouton2.y=ecran->h-bouton3->h-60;
    pos_bouton1.x=ecran->w-(LARGEUR_BORDURE-25);
    pos_bouton1.y=pos_bouton2.y-(2*bouton2->h);
    pos_bouton3.x=ecran->w-(LARGEUR_BORDURE-25);
    pos_bouton3.y=pos_bouton1.y-(2*bouton1->h);
    for(j=0; j<HAUTEUR_CARTE; j++)
Montjoie Henri's avatar
Montjoie Henri committed
    {
        for(i=0; i<LARGEUR_CARTE; i+=2)
        {
            Position_Case[j][i].x=i*LARGEUR_CASE;
            Position_Case[j][i].y=j*HAUTEUR_CASE;
        }
        for(i=1; i<LARGEUR_CARTE; i+=2)
        {
            Position_Case[j][i].x=i*LARGEUR_CASE;
            Position_Case[j][i].y=j*HAUTEUR_CASE+(HAUTEUR_CASE/2);
        }
Montjoie Henri's avatar
Montjoie Henri committed
    }
Montjoie Henri's avatar
Montjoie Henri committed
    Position_Case_brillante=Position_Case[0][0];
    perso_actuel=perso_suivant(perso_actuel);
    if(perso_actuel <=3)
    {
        camp_x = camp_1;
    }
    else
    {
        camp_x = camp_2;
    }

Montjoie Henri's avatar
Montjoie Henri committed
    while(etat!=FERMER)
Montjoie Henri's avatar
Montjoie Henri committed
    {
        SDL_WaitEvent(&event);
        switch(event.type) /* Test du type d'vnement */
        {
        case SDL_QUIT: /* Si c'est un vnement de type "Quitter" */
            etat=FERMER;
            break;
        case SDL_MOUSEBUTTONDOWN:
            if(event.button.y>pos_bouton3.y&&event.button.y<pos_bouton3.y+bouton3->h&&event.button.x>LARGEUR_CARTE*LARGEUR_CASE)
            {
                //attaque_choisie = choix_attaque(obtenirNomsAttaquesPersonnage(perso_actuel), obtenirNbAttaquesPersonnage(perso_actuel));
                //ecran=SDL_SetVideoMode(LARGEUR_CARTE*(LARGEUR_CASE)+LARGEUR_BORDURE, HAUTEUR_CARTE*(HAUTEUR_CASE+2), 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
                /*
                faire en sorte d'afficher les persos a portee en utilisant APorteeAttaque(perso_actuel, i, attaque_choisie)
                puis lancer l'attaque avec lancerAttaque(perso_actuel, numCible, attaque_choisie)
                */
            }
            if(event.button.y>pos_bouton1.y&&event.button.y<pos_bouton1.y+bouton1->h&&event.button.x>LARGEUR_CARTE*LARGEUR_CASE)
Montjoie Henri's avatar
Montjoie Henri committed
                perso_actuel=perso_suivant(perso_actuel);
                sprintf(buffer_PV, "PV : %d/%d", obtenirPVPersonnage(perso_actuel),obtenirPVMaxPersonnage(perso_actuel));
                PV=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
                sprintf(buffer_PV, "Mana : %d/%d", obtenirManaPersonnage(perso_actuel),obtenirManaMaxPersonnage(perso_actuel));
                mana=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
                    sprintf(buffer_PV, "Personnage %d", perso_actuel);
                    personnage_numero=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
                    sprintf(buffer_PV, "Personnage %d", perso_actuel-NB_PERSO);
                    personnage_numero=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
                perso=persos[perso_actuel-1];
            if(event.button.y>pos_bouton2.y&&event.button.y<pos_bouton2.y+bouton2->h&&event.button.x>LARGEUR_CARTE*LARGEUR_CASE)
Montjoie Henri's avatar
Montjoie Henri committed
                finDuTour();
                debutDuTour();
                nom_joueur= TTF_RenderText_Shaded(vieille_police, obtenirNomJoueurCourant(), couleurBlanche, couleurNoire);
                perso_actuel=actualiser_num_perso(perso_actuel);
                sprintf(buffer_PV, "PV : %d/%d", obtenirPVPersonnage(perso_actuel),obtenirPVMaxPersonnage(perso_actuel));
                PV=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
                sprintf(buffer_PV, "Mana : %d/%d", obtenirManaPersonnage(perso_actuel),obtenirManaMaxPersonnage(perso_actuel));
                mana=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
                    sprintf(buffer_PV, "Personnage %d", perso_actuel);
                    personnage_numero=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
                    sprintf(buffer_PV, "Personnage %d", perso_actuel-NB_PERSO);
                    personnage_numero=TTF_RenderText_Shaded(police_arial, buffer_PV, couleurBlanche, couleurNoire);
                perso=persos[perso_actuel-1];
            if(event.button.x<LARGEUR_CARTE*LARGEUR_CASE)
            {
                deplacement_personnage(perso_actuel,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)
            {
                Position_Case_brillante = Position_Case[y_case_cliquee(event.motion.x,event.motion.y)][x_case_cliquee(event.motion.x,event.motion.y)];
            }
            break;
        case SDL_KEYDOWN:/* Si c'est un vnement de type "touche presse" */
            switch(event.key.keysym.sym)
            {