#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; 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++) init_personnage(&ListePersos[i],NULL,&Carte_actuelle[i]); } 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]; } } persosuivant(){ if(perso_actuel<NB_PERSO-1) perso_actuel++; else perso_actuel=0; } 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]; 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); } 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; } int get_position_case_y(Case * Case){ return get_y(Case); } int get_position_case_x(Case * Case) { return get_x(Case); }