diff --git a/main.c b/main.c index 6c2ea1f5d5b893c7424bf41ad56280830cde41e4..703029d844129a0e689ddcf3d6602b79d16d5a78 100644 --- a/main.c +++ b/main.c @@ -18,7 +18,7 @@ int main(int argc, char *argv[]) SDL_Window *fenetre; SDL_Event evenements; SDL_Renderer *ecran; - SDL_Texture *fond, *perso, *balleLongueJaune; + SDL_Texture *fond, *perso, *balleLongueJaune, *mur; SDL_Rect persoPos; float mouseX, mouseY; int vitesse = 25, tempsActuel = 0, tempsPrecedent = 0, tempsActuelTir = 0, tempsActuelAnim = 0, tempsPrecedentAnim = 0; @@ -26,7 +26,84 @@ int main(int argc, char *argv[]) ListeP persosListe; Perso *joueur_ptr; SDL_Texture *sprites[3]; - + + SDL_Rect mur1; + mur1.x = 500; + mur1.y = 500; + mur1.h = 100; + mur1.w = 104; + SDL_Rect mur2; + mur2.x = 10; + mur2.y = 10; + mur2.h = 56; + mur2.w = 47; + SDL_Rect mur3; + mur3.x = 500; + mur3.y = 659; + mur3.h = 85; + mur3.w = 500; + + SDL_Rect tabMur[3]; + tabMur[0] = mur1; + tabMur[1] = mur2; + tabMur[2] = mur3; + + /** + + FILE* fichier = NULL; + fichier = fopen("map.txt", "r"); + char caractereActuel; + char nombre = ""; + + if (fichier != NULL){ + // Boucle de lecture des caract�res un � un + int i = 0; + do + { + if( 'M' == fgetc(fichier)){ // On lit le caract�re + printf("J'ai trouv� un mur !"); + caractereActuel = fgetc(fichier); + + while(caractereActuel != ':'){ + caractereActuel = fgetc(fichier); + nombre = nombre + caractereActuel; + printf("%c", nombre); + + } + printf("%c", nombre); + tabMur[i].x = nombre; + + while(caractereActuel != ':'){ + caractereActuel = fgetc(fichier); + } + + while(caractereActuel != ':'){ + caractereActuel = fgetc(fichier); + } + tabMur[i].y = fgetc(fichier); + + while(caractereActuel != ':'){ + caractereActuel = fgetc(fichier); + } + tabMur[i].w = fgetc(fichier); + + while(caractereActuel != ':'){ + caractereActuel = fgetc(fichier); + } + tabMur[i].h = fgetc(fichier); + i++; + } + else{ + caractereActuel = fgetc(fichier); + } + + } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourn� EOF (fin de fichier) + + fclose(fichier); + } + */ + + //Initialisation SDL if(SDL_Init(SDL_INIT_VIDEO < 0)) @@ -38,7 +115,7 @@ int main(int argc, char *argv[]) IMG_Init(IMG_INIT_PNG); - //Cr�ation fen�tre + //Création fenêtre fenetre = SDL_CreateWindow("gameName", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 720, SDL_WINDOW_RESIZABLE); if(fenetre == NULL) { @@ -46,12 +123,13 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - //Cr�ation renderer + //Création renderer ecran = SDL_CreateRenderer(fenetre, -1, SDL_RENDERER_ACCELERATED); //Chargement images balleLongueJaune = charger_image("sprites/projectiles/balle/balle_longue_jaune.png", ecran); fond = charger_image("sprites/fond.png", ecran); + mur = charger_image("sprites/mur.png", ecran); perso = charger_image("sprites/perso/handgun/idle/survivor_idle.png", ecran); sprites[0] = perso; perso = charger_image("sprites/perso/handgun/move/survivor_moving.png", ecran); @@ -64,18 +142,18 @@ int main(int argc, char *argv[]) p = nouvel_ennemi_1(ecran, sprites); persosListe = cons_listeP(persosListe, p); - //Pareil pour la balle + ses autres param�tres (voir projectile.h) + //Pareil pour la balle + ses autres paramètres (voir projectile.h) balle b = nouvelle_balle(balleLongueJaune, 0, persoPos); ballesTirees = nouvelle_listeB(b); //Boucle de jeu while(!gameover) { - //Petit timer pour pas d�passer 60 ex�cutions/sec (provisoire) + //Petit timer pour pas dépasser 60 exécutions/sec (provisoire) tempsActuel = SDL_GetTicks(); if (tempsActuel > tempsPrecedent + 16) { - //D�tection �v�nements + //Détection événements while(SDL_PollEvent(&evenements)) { switch(evenements.type) @@ -128,18 +206,21 @@ int main(int argc, char *argv[]) - //Gestion d�placement/angle de tir - deplacement_joueur(joueur_ptr); + //Gestion déplacement/angle de tir + deplacement_joueur(joueur_ptr, tabMur); angle_joueur((joueur_ptr), mouseX, mouseY); //Tir tempsActuelTir = SDL_GetTicks(); ballesTirees = tir_update(ballesTirees, persosListe, tempsActuelTir, balleLongueJaune, vitesse); - - + + //Affichage SDL_RenderClear(ecran); SDL_RenderCopy(ecran, fond, NULL, NULL); + for(int i = 0; i < 3; i++){ + SDL_RenderCopyEx(ecran, mur, NULL, &tabMur[i], 0, NULL, SDL_FLIP_NONE); + } afficher_listeP(ecran, persosListe); afficher_listeB(ecran, ballesTirees); SDL_RenderPresent(ecran); diff --git a/map.txt b/map.txt new file mode 100644 index 0000000000000000000000000000000000000000..5c1f8833c0cb8e3d3d48121a9163e953c33f8e15 --- /dev/null +++ b/map.txt @@ -0,0 +1,3 @@ +M:322:523:20:40 +M:20:231:100:30 +M:800:600:60:40 \ No newline at end of file diff --git a/personnage.c b/personnage.c index 56b9f759ada5c26046299576064d6660aaefd7f2..ccc692ebc38acfa593b354f8bc47fb93c36b73a6 100644 --- a/personnage.c +++ b/personnage.c @@ -31,7 +31,7 @@ Perso nouvel_ennemi_1(SDL_Renderer *renderer, SDL_Texture **sprites){ Perso p; p.tempsTirPrecedent = 0; p.image = sprites[2]; - //g�n�re des coordonn�es de spawn al�atoires(provisoire) + //génère des coordonnées de spawn aléatoires(provisoire) p.pos.x = rand()%900 + 100; p.pos.y = rand()%600 + 100; p.pos.w = 60; @@ -55,7 +55,7 @@ void afficher_perso(SDL_Renderer *renderer, Perso p) SDL_RenderCopyEx(renderer, p.image, &p.srcrect, &p.pos, p.angle, NULL, SDL_FLIP_NONE); } -void deplacement_joueur(Perso *p) +void deplacement_joueur(Perso *p, SDL_Rect *tabMur) { int dX = 0; int dY = 0; @@ -86,8 +86,29 @@ void deplacement_joueur(Perso *p) dY = dY/4; } - p->pos.x += dX * p->vitesse; - p->pos.y += dY * p->vitesse; + + int res = 0; + if(p->pos.x + dX*p->vitesse < 950 && p->pos.x + dX*p->vitesse > 0 && p->pos.y + dY*p->vitesse < 670 && p->pos.y + dY*p->vitesse > 0){ + for(int i = 0; i < 3; i++){ + if (p->pos.x + dX*p->vitesse <= tabMur[i].x + tabMur[i].w && p->pos.x + p->pos.w + dX*p->vitesse >= tabMur[i].x && p->pos.y + dY*p->vitesse<= tabMur[i].y + tabMur[i].h + && p->pos.h + p->pos.y + dY*p->vitesse >= tabMur[i].y ) { + //collision d�tect�e ! + res = -100; + + } + else{ + res += 1; + + } + } + + } + + if(res >= 1){ + p->pos.x += dX * p->vitesse; + p->pos.y += dY * p->vitesse; + } + } diff --git a/personnage.h b/personnage.h index e1f8ea1792dd9f03c038f39a94043a2605ddafca..94d2b72162ffcfa3c31509bb50dea81b43e5cd26 100644 --- a/personnage.h +++ b/personnage.h @@ -28,6 +28,6 @@ struct s_Personnage Perso nouveau_joueur(SDL_Renderer *renderer, SDL_Texture **sprites); Perso nouvel_ennemi_1(SDL_Renderer *renderer, SDL_Texture **sprites); void afficher_perso(SDL_Renderer *renderer, Perso p); -void deplacement_joueur(Perso *p); +void deplacement_joueur(Perso *p, SDL_Rect *tabMur); void angle_joueur(Perso *p, float mouseX, float mouseY); void animer_perso(Perso *p); diff --git a/sprites/mur.png b/sprites/mur.png new file mode 100644 index 0000000000000000000000000000000000000000..9651a050c7c8a843c74ab7fce7cb01a165f012da Binary files /dev/null and b/sprites/mur.png differ