Commit a0a507c3 authored by vautrin33u's avatar vautrin33u
Browse files

Tous les sprites s'affichent sauf plats, reste animation, règle de jeu et plats

parent 1500d051
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
......@@ -91,7 +91,7 @@
* @brief Nombre de comptoire dans le niveau 1
*
*/
#define NB_COMPT_1 10
#define NB_COMPT_1 9
/**
* \brief Largeur de la zone d'envoi
......
......@@ -56,32 +56,37 @@ void init_textures (SDL_Renderer *renderer, textures_t *textures, TTF_Font *font
//... = charger_texte ("Score : ", renderer, font, color);
}
void apply_background (SDL_Renderer *renderer, textures_t *textures){
void apply_graphics (SDL_Renderer *renderer, textures_t *textures, world_t *world){
//maj les texture selon la position des éléments différents
if(textures->fond != NULL){
SDL_RenderCopy(renderer, textures->fond, NULL, NULL);
}
}
void apply_graphics (SDL_Renderer *renderer, textures_t *textures, world_t *world){
//maj les texture selon la position des éléments différents
if (textures->joueur !=NULL){
if (textures->joueur !=NULL && est_visible(&world->joueur)){
SDL_RenderCopy(renderer, textures->joueur, NULL, &world->joueur.rect);
}
if (textures->poubelle !=NULL){
if (textures->poubelle !=NULL && est_visible(&world->poubelle)){
SDL_RenderCopy(renderer, textures->poubelle, NULL, &world->poubelle.rect);
}
if (textures->lavabo[0] !=NULL){
if (textures->lavabo[0] !=NULL && est_visible(&world->lavabo)){
SDL_RenderCopy(renderer, textures->lavabo[0], NULL, &world->lavabo.rect);
}
if (textures->frigo[0] !=NULL){
if (textures->frigo[0] !=NULL&& est_visible(&world->frigo)){
SDL_RenderCopy(renderer, textures->frigo[0], NULL, &world->frigo.rect);
}
if (textures->four[0] !=NULL){
if (textures->four[0] !=NULL && est_visible(&world->four)){
SDL_RenderCopy(renderer, textures->four[0], NULL, &world->four.rect);
}
if (textures->envoi[0] !=NULL){
if (textures->envoi[0] !=NULL && est_visible(&world->envoi)){
SDL_RenderCopy(renderer, textures->envoi[0], NULL, &world->envoi.rect);
}
if (textures->comptoire != NULL){
for (int i=0; i<NB_COMPT_1; i++){
if (est_visible(&world->comptoire[i])){
SDL_RenderCopy(renderer, textures->comptoire, NULL, &world->comptoire[i].rect);
}
}
}
}
......@@ -116,7 +121,6 @@ SDL_Rect create_SDL_rect (int x, int y, int w, int h){
void update_graphics (SDL_Renderer *renderer, world_t *world, textures_t *textures){
SDL_RenderClear(renderer); // permet de vider le Renderer (ecran) de toutes les textures
apply_background (renderer, textures);
apply_graphics(renderer, textures, world);
SDL_RenderPresent(renderer); // Récupère les infos actualisés de render et les affiches
......
......@@ -62,13 +62,6 @@ void nettoyage_graphisme (SDL_Renderer *renderer, textures_t *textures, SDL_Wind
*/
void init_textures (SDL_Renderer *renderer, textures_t *textures, TTF_Font *font);
/**
* \brief La fonction initialise les texures
* \param renderer la surface correspondant à l'écran de jeu
* \param textures les textures du jeu
*/
void apply_background (SDL_Renderer *renderer, textures_t *textures);
/**
* @brief Applique une texture sur un sprite
*
......
......@@ -27,7 +27,14 @@ void init_data(world_t * world){ //faux
build_sprite_unique(&world->lavabo, 'L', LAVABO_LARGEUR, LAVABO_HAUTEUR, world->map);
build_sprite_unique(&world->poubelle, 't', POUBELLE_LARGEUR, POUBELLE_HAUTEUR, world->map);
build_sprite_unique(&world->envoi, 'e', ZONE_ENVOI_LARGEUR, ZONE_ENVOI_HAUTEUR, world->map);
//build_sprites_tab(&world, 'X', BLOC_COMPT_SIZE, BLOC_COMPT_SIZE);
int n_sprite = 1;
for (int k=0; k<NB_COMPT_1; k++){
init_sprite(&world->comptoire[k], '0', 1, 1, 1, 1,0,0);
set_invisible(&world->comptoire[k]);
build_sprites_tab(&world->comptoire[k], 'P', BLOC_COMPT_SIZE, BLOC_COMPT_SIZE, &n_sprite, world->map);
print_sprite(&world->comptoire[k]);
}
//build_sprites_tab(&world->comptoire, 'P', BLOC_COMPT_SIZE, BLOC_COMPT_SIZE, NB_COMPT_1, world->map);
/*
......@@ -80,15 +87,27 @@ void build_sprite_unique (sprite_t *sprite, char nom, int largeur, int hauteur,
//print_sprite(sprite);
}
//TODO: nécessaire pour trouver tous les blocs de comptoires, trouver une solution.
/*
void build_sprites_tab (world_t* world, char nomSprite, int largeur, int hauteur){
void build_sprites_tab (sprite_t *sprite, char nomSprite, int largeur, int hauteur, int* compt, char** map){
// On recherche les instances existantes et on y met les bonnes valeurs
int nb_sprite = 0;
char copy = nomSprite;
for (int i=0; i<SCREEN_HEIGHT; i++){
for (int j=0; j<SCREEN_WIDTH; j++){
//Parcours du tableau pour repérer le premier caractère d'un
//Parcours du tableau pour repérer le premier caractère
if (map[i][j] == nomSprite){
nb_sprite++;
}
//Créer un sprite
if (nb_sprite == *compt && map[i][j] == nomSprite){
init_sprite(sprite, nomSprite, j, i, largeur, hauteur, 0, 0);
map[i][j] = tolower(copy); //On efface les marqueurs de sprites, plus nécessaires
break; // On quitte
}
}
}
}*/
}
int has_collided (sprite_t* spr1, sprite_t* spr2){
return SDL_HasIntersection(&spr1->rect, &spr2->rect);
......@@ -132,11 +151,10 @@ void limites_interne (world_t* world){
handle_collision(&world->joueur, &world->frigo);
handle_collision(&world->joueur, &world->lavabo);
handle_collision(&world->joueur, &world->poubelle);
/*
for (int i=0; i<NB_COMPT_1; i++){
handle_collision(world->joueur, world->comptoire[i]);
handle_collision(&world->joueur, &world->comptoire[i]);
}
*/
}
void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v, int state){
......@@ -188,12 +206,12 @@ int return_state (sprite_t *sprite){
void set_visible (sprite_t *sprite){
// Permet de rendre visible un sprite
sprite->is_visible=0;
sprite->is_visible=1;
}
void set_invisible (sprite_t *sprite){
// Permet de rendre invisible un sprite
sprite->is_visible=1;
sprite->is_visible=0;
}
int est_visible (sprite_t *sprite){
......@@ -262,34 +280,25 @@ void gestion_events(SDL_Event *event, world_t *world){
world->gameover = 1; break;
//Déplacement du joueur
case SDLK_UP:
set_haut(&world->joueur);
world->joueur.rect.y -= world->joueur.v;
//deplace_haut(&world->joueur, world);
set_haut(&world->joueur);
world->joueur.rect.y -= world->joueur.v;
break;
case SDLK_DOWN:
set_bas(&world->joueur);
world->joueur.rect.y += world->joueur.v;
//deplace_bas(&world->joueur, world);
set_bas(&world->joueur);
world->joueur.rect.y += world->joueur.v;
break;
case SDLK_RIGHT:
set_droite(&world->joueur);
world->joueur.rect.x += world->joueur.v;
//deplace_droite(&world->joueur, world);
set_droite(&world->joueur);
world->joueur.rect.x += world->joueur.v;
break;
case SDLK_LEFT:
set_gauche(&world->joueur);
world->joueur.rect.x -= world->joueur.v;
//deplace_gauche(&world->joueur, world);
set_gauche(&world->joueur);
world->joueur.rect.x -= world->joueur.v;
break;
//case SDLK_SPACE:
}
}
}
......@@ -311,6 +320,10 @@ char** init_map (){
// Zone de déplacement interdit au joueurs; zones de travail:
if((j>= SIZE_MUR && j<BLOC_COMPT_SIZE+SIZE_MUR && i>=SIZE_MUR && i<SIZE_MUR+ (3*BLOC_COMPT_SIZE)) || (j>=SIZE_MUR+BLOC_COMPT_SIZE && j<SIZE_MUR + (4*BLOC_COMPT_SIZE) && i>=SIZE_MUR && i<SIZE_MUR + BLOC_COMPT_SIZE) || (j>= SIZE_MUR + (4*BLOC_COMPT_SIZE) && j< SIZE_MUR + (5*BLOC_COMPT_SIZE) && i>= SIZE_MUR && i<SIZE_MUR + BLOC_COMPT_SIZE*3)){
tab[i][j] = 'p';
}
// Marqueurs pour délimité tous les éléments de travail:
if((i==SIZE_MUR && j==SIZE_MUR) || (i==SIZE_MUR && j==SIZE_MUR+BLOC_COMPT_SIZE) || (i==SIZE_MUR && j==SIZE_MUR+BLOC_COMPT_SIZE*2) || (i==SIZE_MUR && j==SIZE_MUR+BLOC_COMPT_SIZE*3) || (j== SIZE_MUR && i==SIZE_MUR+BLOC_COMPT_SIZE) || (j== SIZE_MUR &&i==SIZE_MUR+BLOC_COMPT_SIZE*2) || (j== SIZE_MUR + BLOC_COMPT_SIZE*4 && i==SIZE_MUR) || (j== SIZE_MUR + BLOC_COMPT_SIZE*4 && i == SIZE_MUR + BLOC_COMPT_SIZE) || (j== SIZE_MUR + BLOC_COMPT_SIZE*4 && i == SIZE_MUR + BLOC_COMPT_SIZE*2)){
tab[i][j] = 'P';
}
......
......@@ -90,15 +90,16 @@ void print_sprite (sprite_t *sprite);
void build_sprite_unique (sprite_t *sprite, char nom, int largeur, int hauteur, char** map);
/**
* @brief Fonction initialisant un tableau de sprites
* @brief Initialise plusieurs sprites du même type
*
* @param world données du monde - contenant la map et les sprites concernés
* @param nomSprite Caractère du Sprite sur la carte
* @param largeur Largeur du sprite
* @param hauteur Hauteur du sprite
* @param nb_sprites nombre d'éléments max dans le tableau de sprite
* @param sprite Sprite à initialiser
* @param nomSprite Caractère permettant d'identifier les instances du sprite sur la carte
* @param largeur
* @param hauteur
* @param compt nombre de sprite dans le tableau
* @param map Carte du jeu sous forme de tableau de caractères
*/
void build_sprites_tab (world_t* world, char nomSprite, int largeur, int hauteur, int nb_sprites);
void build_sprites_tab (sprite_t *sprite, char nomSprite, int largeur, int hauteur, int* compt, char** map);
/**
......@@ -112,8 +113,8 @@ int has_collided (sprite_t* spr1, sprite_t* spr2);
/**
* \brief Vérifie si deux sprites sont en collisions
* \param spr_move Sprite
* \param spr_fixed Sprite
* \param spr_move Sprite capable de se déplacer
* \param spr_fixed Sprite immobile
*/
void handle_collision (sprite_t* spr_move, sprite_t* spr_fixed);
......
......@@ -45,7 +45,6 @@ init_textures(ecran, &textures, font);
//boucle de jeu
while (estFini(&world)==0){
SDL_RenderClear(ecran); // permet de vider le Renderer (ecran) de toutes les textures
apply_background(ecran, &textures);
//Gestion des évenements (entrées joueurs)
gestion_events(&evenements, &world);
......
......@@ -91,7 +91,7 @@ void test_limite(){
gestion_events(&event, &world);
update_data(&world);
i++;
printf(" x = %d | y = %d | etat = %d \n", world.joueur.x, world.joueur.y, world.joueur.etat);
print_sprite(&world.joueur);
place_sprite_on_map(&world.joueur, &world);
SDL_Delay(100);
//afficher_tab_2D(world.map, SCREEN_HEIGHT, SCREEN_WIDTH);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment