#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]; int perso_actuel=0; /*! * \fn void init_controleur(SDL_Rect Position_Case[]) * \brief fonction du controleur appell�e par l'affichage et qui initialise le moteur du jeu (cr�ation de la carte et des personnages) * * \param les coordonn�es de toutes les cases */ 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); } for(i=0;i<NB_PERSO;i++) set_personnage(&ListePersos[i],NULL,&Carte_actuelle[i]); } /*! * \fn int x_case_cliquee(int x_pixel, int y_pixel) * \brief La fonction retourne la colonne d'une case � partir de sa position en pixels * * \param les coordonn�es x et y de la case en pixels * \return la colonne de la case */ int x_case_cliquee(int x_pixel, int y_pixel) { return x_pixel/LARGEUR_CASE; } /*! * \fn int y_case_cliquee(int x_pixel, int y_pixel) * \brief La fonction retourne la ligne d'une case � partir de sa position en pixels * * \param les coordonn�es x et y de la case en pixels * \return la ligne de la 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; } /*! * \fn void persosuivant() * \brief La fonction permet de selectionner le personnage suivant */ void persosuivant(){ if(perso_actuel<NB_PERSO-1) perso_actuel++; else perso_actuel=0; } /*! * \fn int persoactuel() * \brief La fonction retourne le num�ro du personnage actuellement control� */ int persoactuel(){ return perso_actuel; } /*! * \fn void deplacement_personnage(int x, int y)) * \brief Cette fonction du controleur appelle la fonction du moteur permettant de d�placer le personnage selectionn� * * \param les coordonn�es (en pixels) de l'endroit ou l'utilisateur a cliqu� */ void deplacement_personnage(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[perso_actuel]; deplacement_unitaire(perso, case_cliquee,HAUTEUR_CASE,LARGEUR_CASE); } } /*! * \fn Case* get_case_perso(int num) * \brief donne la case sur laquelle est situ�e un personnage * * \param le num�ro d'un personnage * \return un pointeur vers la case du personnage */ Case* get_case_perso(int num) { Personnage* perso = &ListePersos[num]; return getPosition(perso); } /*! * \fn int get_position_perso_x(int num) * \brief donne la coordonn�e x en pixels d'un personnage * * \param le num�ro d'un personnage * \return la coordonn�e x en pixels du personnage */ int get_position_perso_x(int num) { Case* case_perso = get_case_perso(num); return get_x(case_perso); } /*! * \fn int get_position_perso_y(int num) * \brief donne la coordonn�e y en pixels d'un personnage * * \param le num�ro d'un personnage * \return la coordonn�e y en pixels du personnage */ int get_position_perso_y(int num) { Case* case_perso = get_case_perso(num); return get_y(case_perso); } /*! * \fn Case* deplacement_brillance(int x,int y) * \brief La fonction retourne un pointeur vers la case de coordonn�es x,y * * \param les coordonn�es x et y d'une case (pas en pixels mais bien en colonne et ligne), ainsi que la carte utilis�e * \return un pointeur vers cette case */ Case* deplacement_brillance(int x,int y) { if(x<LARGEUR_CARTE*LARGEUR_CASE&&y<HAUTEUR_CARTE*HAUTEUR_CASE) { return trouverCase(Carte_actuelle,x_case_cliquee(x,y),y_case_cliquee(x,y)); } return NULL; } /*! * \fn int get_position_case_y(Case * Case) * \brief retourne la coordonn�e y d'une case * * \param un pointeur vers une case * \return la coordonn�e y de la case */ int get_position_case_y(Case * Case){ return get_y(Case); } /*! * \fn int get_position_case_x(Case * Case) * \brief retourne la coordonn�e x d'une case * * \param un pointeur vers une case * \return la coordonn�e x de la case */ int get_position_case_x(Case * Case) { return get_x(Case); }