Skip to content
Snippets Groups Projects
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
Branches
No related tags found
No related merge requests found
Source diff could not be displayed: it is too large. Options to address this: view the blob.
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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment