Commit 894a13d9 authored by vautrin33u's avatar vautrin33u
Browse files

Aucun déplacement effectué

parent 53f64f78
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -12,12 +12,12 @@ ...@@ -12,12 +12,12 @@
/** /**
* \brief Largeur de l'écran * \brief Largeur de l'écran
*/ */
#define SCREEN_WIDTH 80 #define SCREEN_WIDTH 800
/** /**
* \brief Hauteur de l'écran * \brief Hauteur de l'écran
*/ */
#define SCREEN_HEIGHT 60 #define SCREEN_HEIGHT 600
/** /**
* \brief Titre * \brief Titre
......
...@@ -17,10 +17,11 @@ void init_data(world_t * world){ //faux ...@@ -17,10 +17,11 @@ void init_data(world_t * world){ //faux
world->attente = 0; world->attente = 0;
//Initialise le sprite du joueur en haut à gauche de l'écran, en état 0 //Initialise le sprite du joueur en haut à gauche de l'écran, en état 0
init_sprite(&world->joueur, 'J', SCREEN_WIDTH*0.1, SCREEN_HEIGHT*0.1, SIZE_JOUEUR, SIZE_JOUEUR, SIZE_JOUEUR/2, 0); init_sprite(&world->joueur, 'J', 200, 200, SIZE_JOUEUR, SIZE_JOUEUR, SIZE_JOUEUR/2, 0);
//Charge la carte //Charge la carte
world->map = init_map(); world->map = init_map();
/* /*
...@@ -116,8 +117,8 @@ void limites_externes (sprite_t *sprite, world_t *world){ ...@@ -116,8 +117,8 @@ void limites_externes (sprite_t *sprite, world_t *world){
void reset_sprite_on_map (sprite_t *sprite, world_t *world){ void reset_sprite_on_map (sprite_t *sprite, world_t *world){
//On efface la position du joueur sur map //On efface la position du joueur sur map
for (int i=0; i<SCREEN_HEIGHT; i++){ for (int i=sprite->y; i < sprite->y + sprite->h ; i++){
for (int j=0; j<SCREEN_WIDTH; j++){ for (int j = sprite->x ; j < sprite->x + sprite->w ; j++){
if (world->map[i][j]== sprite->nom){ if (world->map[i][j]== sprite->nom){
world->map[i][j] = ' '; world->map[i][j] = ' ';
} }
...@@ -134,98 +135,114 @@ void place_sprite_on_map (sprite_t *sprite, world_t *world){ ...@@ -134,98 +135,114 @@ void place_sprite_on_map (sprite_t *sprite, world_t *world){
} }
} }
void deplace_sprite (sprite_t *sprite, world_t *world){ void deplace_bas (sprite_t *sprite, world_t *world){
//permet de déplacer le sprite et de corriger les données de map de manière cohérente int compteur =0;
set_bas(&world->joueur);
world->joueur.y += world->joueur.v;
reset_sprite_on_map(sprite, world); reset_sprite_on_map(sprite, world);
int compteur;
if (world->map[sprite->y + SIZE_JOUEUR][sprite->x] != ' ' || world->map[sprite->y + SIZE_JOUEUR][sprite->x + SIZE_JOUEUR] != ' '){
switch (return_state(sprite)){ //Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
case 0: for (int y= sprite->y; y<SIZE_JOUEUR; y++){
//déplace vers le bas if (world->map[y][sprite->x] == ' '){
if (world->map[sprite->y + SIZE_JOUEUR][sprite->x] != ' ' || world->map[sprite->y + SIZE_JOUEUR][sprite->x + SIZE_JOUEUR] != ' '){ compteur++;
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for (int y= sprite->y; y<SIZE_JOUEUR; y++){
if (world->map[y][sprite->x] == ' '){
compteur++;
}
}
sprite->x -= compteur;
}
break;
case 1:
//déplace vers le haut
if (world->map[sprite->y][sprite->x] != ' ' || world->map[sprite->y][sprite->x + SIZE_JOUEUR] != ' '){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for (int y= sprite->y; y<SIZE_JOUEUR; y++){
if (world->map[y][sprite->x] != ' '){
compteur++;
}
}
sprite->x += compteur;
} }
break; }
case 2: sprite->x -= compteur;
//déplace vers la droite }
if (world->map[sprite->y][sprite->x + SIZE_JOUEUR] != ' ' || world->map[sprite->y + SIZE_JOUEUR][sprite->x + SIZE_JOUEUR] != ' '){ }
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for (int x= sprite->x; x<SIZE_JOUEUR; x++){ void deplace_haut (sprite_t *sprite, world_t *world){
if (world->map[sprite->y][x] == ' '){ int compteur =0;
compteur++; set_haut(&world->joueur);
} world->joueur.y -= world->joueur.v;
reset_sprite_on_map(sprite, world);
//déplace vers le haut
if (world->map[sprite->y][sprite->x] != ' ' || world->map[sprite->y][sprite->x + SIZE_JOUEUR] != ' '){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for (int y= sprite->y; y<SIZE_JOUEUR; y++){
if (world->map[y][sprite->x] != ' '){
compteur++;
} }
sprite->x -= compteur; }
sprite->x += compteur;
}
}
void deplace_droite (sprite_t *sprite, world_t *world){
int compteur =0;
set_droite(&world->joueur);
world->joueur.x += world->joueur.v;
reset_sprite_on_map(sprite, world);
//déplace vers la droite
if (world->map[sprite->y][sprite->x + SIZE_JOUEUR] != ' ' || world->map[sprite->y + SIZE_JOUEUR][sprite->x + SIZE_JOUEUR] != ' '){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for (int x= sprite->x; x<SIZE_JOUEUR; x++){
if (world->map[sprite->y][x] == ' '){
compteur++;
} }
break; }
case 3: sprite->x -= compteur;
//déplace vers la gauche }
if (world->map[sprite->y][sprite->x] != ' ' || world->map[sprite->y + SIZE_JOUEUR][sprite->x] != ' '){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit }
for (int x= sprite->x; x<SIZE_JOUEUR; x++){
if (world->map[sprite->y][x] != ' '){ void deplace_gauche (sprite_t *sprite, world_t *world){
compteur++; int compteur =0;
} set_gauche(&world->joueur);
world->joueur.x -= world->joueur.v;
reset_sprite_on_map(sprite, world);
//déplace vers la gauche
if (world->map[sprite->y][sprite->x] != ' ' || world->map[sprite->y + SIZE_JOUEUR][sprite->x] != ' '){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for (int x= sprite->x; x<SIZE_JOUEUR; x++){
if (world->map[sprite->y][x] != ' '){
compteur++;
} }
sprite->x += compteur;
} }
break; sprite->x += compteur;
} }
limites_externes(sprite, world);
place_sprite_on_map(sprite, world);
} }
void gestion_events(SDL_Event *event, world_t *world){ void gestion_events(SDL_Event *event, world_t *world){
Uint8 *keystates;
while (SDL_PollEvent(event)){
SDL_PollEvent(event);
switch(event->type){ switch(event->type){
case SDL_QUIT: case SDL_QUIT:
world->gameover = 1; break; world->gameover = 1; break;
case SDL_KEYDOWN: case SDL_KEYDOWN:
switch(event->key.keysym.sym){ switch(event->key.keysym.sym){
case SDLK_ESCAPE: case SDLK_ESCAPE:
world->gameover = 1; break; world->gameover = 1; break;
//Déplacement du joueur //Déplacement du joueur
case SDLK_z: case SDLK_UP:
set_haut(&world->joueur); deplace_haut(&world->joueur, world);
world->joueur.y -= world->joueur.v; printf("BOUUUUUUUUH \n");
break; break;
case SDLK_s:
set_bas(&world->joueur);
world->joueur.y += world->joueur.v;
break;
case SDLK_d:
set_droite(&world->joueur);
world->joueur.x += world->joueur.v;
break;
case SDLK_q:
set_gauche(&world->joueur);
world->joueur.x -= world->joueur.v;
break;
//case SDLK_SPACE:
} case SDLK_DOWN:
deplace_bas(&world->joueur, world);
break;
case SDLK_RIGHT:
deplace_droite(&world->joueur, world);
break;
case SDLK_LEFT:
deplace_gauche(&world->joueur, world);
break;
//case SDLK_SPACE:
}
} }
}
} }
char** init_map (){ char** init_map (){
...@@ -276,12 +293,13 @@ char** init_map (){ ...@@ -276,12 +293,13 @@ char** init_map (){
return tab; return tab;
} }
void update_data (world_t *world){ void update_data (world_t *world){
const char *nomSave = "Ressouces/save.txt"; const char *nomSave = "Ressources/save.txt";
limites_externes(&world->joueur, world);
place_sprite_on_map(&world->joueur, world);
genere_fichier(nomSave, world->map, SCREEN_HEIGHT, SCREEN_WIDTH); genere_fichier(nomSave, world->map, SCREEN_HEIGHT, SCREEN_WIDTH);
} }
...@@ -61,7 +61,7 @@ typedef struct world_s world_t; ...@@ -61,7 +61,7 @@ typedef struct world_s world_t;
* \param y gestion de la localisation sur l'axe des ordonnés * \param y gestion de la localisation sur l'axe des ordonnés
* \param w largeur du sprite * \param w largeur du sprite
* \param h hauteur du sprite * \param h hauteur du sprite
* \param v vitesse verticale du sprite * \param v vitesse du sprite
* \param state état du sprite * \param state état du sprite
*/ */
void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v, int state); void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v, int state);
...@@ -158,12 +158,59 @@ int return_state (sprite_t *sprite); ...@@ -158,12 +158,59 @@ int return_state (sprite_t *sprite);
void limites_externes (sprite_t *sprite, world_t *world); void limites_externes (sprite_t *sprite, world_t *world);
/** /**
* @brief Déplacement d'un sprite et actualisation de la map * @brief Déplacement d'un sprite vers la gauche + limites
* *
* @param sprite sprite qui se déplace * @param sprite sprite qui se déplace
* @param world données du monde * @param world données du monde
*/ */
void deplace_sprite (sprite_t *sprite, world_t *world); void deplace_gauche (sprite_t *sprite, world_t *world);
/**
* @brief Déplacement d'un sprite vers la droite + limites
*
* @param sprite sprite qui se déplace
* @param world données du monde
*/
void deplace_droite (sprite_t *sprite, world_t *world);
/**
* @brief Déplacement d'un sprite vers le haut + limites
*
* @param sprite sprite qui se déplace
* @param world données du monde
*/
void deplace_haut (sprite_t *sprite, world_t *world);
/**
* @brief Déplacement d'un sprite vers le bas + limites
*
* @param sprite sprite qui se déplace
* @param world données du monde
*/
void deplace_bas (sprite_t *sprite, world_t *world);
/**
* @brief Retire le sprite de la map - avant maj d'un déplacement
*
* @param sprite sprite
* @param world données du monde
*/
void reset_sprite_on_map (sprite_t *sprite, world_t *world);
/**
* @brief Place le sprite sur la map - avant maj d'un déplacement
*
* @param sprite
* @param world
*/
void place_sprite_on_map (sprite_t *sprite, world_t *world);
/**
* @brief Mets à jour les données du monde en fonction des évolutions et des limites du jeu
*
* @param world Données du monde
*/
void update_data (world_t *world);
#endif #endif
\ No newline at end of file
...@@ -50,6 +50,7 @@ while (estFini(&world)==0){ ...@@ -50,6 +50,7 @@ while (estFini(&world)==0){
//Gestion des évenements (entrées joueurs) //Gestion des évenements (entrées joueurs)
gestion_events(&evenements, &world); gestion_events(&evenements, &world);
update_data(&world);
//update_graphics(ecran, &world, &textures); //update_graphics(ecran, &world, &textures);
......
...@@ -80,9 +80,24 @@ void test_lecture_map(){ ...@@ -80,9 +80,24 @@ void test_lecture_map(){
} }
void test_limite(){ void test_limite(){
SDL_Init(SDL_INIT_VIDEO);
world_t world; world_t world;
SDL_Event event;
init_data(&world); init_data(&world);
int i=0;
while (i<100){
reset_sprite_on_map(&world.joueur, &world);
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);
place_sprite_on_map(&world.joueur, &world);
SDL_Delay(100);
//afficher_tab_2D(world.map, SCREEN_HEIGHT, SCREEN_WIDTH);
}
afficher_tab_2D(world.map, SCREEN_HEIGHT, SCREEN_WIDTH); afficher_tab_2D(world.map, SCREEN_HEIGHT, SCREEN_WIDTH);
SDL_Quit();
} }
......
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