diff --git a/clavier.c b/clavier.c index e5fde5f5a1ae624920418023d8f3d8edb856a7a4..3a4a1d88d94ef8f62cc71ba5f94bea8a9d1a198d 100644 --- a/clavier.c +++ b/clavier.c @@ -1,27 +1,12 @@ -#include <SDL2/SDL.h> +/* #include <SDL2/SDL.h> #include "clavier.h" +#include <stdio.h> + + + + -/* FICHIER A RENOMMER */ - - -ListeB tir_update(ListeB LB, ListeP LP, int time, SDL_Texture *balleLongueJaune, int v){ - //Si perso en train de tirer - s_ListeP *tmp = LP; - while(tmp != NULL){ - if(tmp->data.tir){ - //On fait pop une nouvelle balle toutes les X ms - if(time > tmp->data.tempsTirPrecedent + 200) { - LB = cons_listeB(LB, nouvelle_balle(balleLongueJaune, tmp->data.angle, tmp->data.pos)); - tmp->data.tempsTirPrecedent = time; - } - } - tmp = tmp->next; - } - //On met a jour les coordonn�es des balles d�j� tir�es, d�pop si n�c�ssaire - LB = incrementer_balles(LB, v); - return LB; -} void animer_persos(ListeP L){ s_ListeP *tmp = L; @@ -29,3 +14,6 @@ void animer_persos(ListeP L){ animer_perso(&tmp->data); return; } + + +*/ diff --git a/clavier.h b/clavier.h index 4214dde1720156297bf930f63fea778aa8e3eb59..aa078d7a90c85456fad52f474e7f5c203475c1fe 100644 --- a/clavier.h +++ b/clavier.h @@ -1,9 +1,9 @@ -#include <SDL2/SDL.h> -#include "listeP.h" +/*#include <SDL2/SDL.h> #include "listeB.h" -/* FICHIER A RENOMMER */ -ListeB tir_update(ListeB LB, ListeP LP, int time, SDL_Texture *balleLongueJaune, int v); -void animer_persos(ListeP L); + + +void animer_persos(ListeP L);*/ + diff --git a/image.c b/image.c index 6a390674bcecf8593dacc852543c17e9a530904b..69ee4ca7f4e116a07d4b80986b144c0a2bde8e6c 100644 --- a/image.c +++ b/image.c @@ -1,13 +1,32 @@ #include "image.h" -#include <SDL2/SDL.h> -#include <SDL2/SDL_image.h> -SDL_Texture* charger_image(const char* cheminFichier, SDL_Renderer* renderer) + +SDL_Texture* charger_image(const char* cheminFichier, SDL_Renderer* renderer, int r, int g, int b) { SDL_Surface* surface = IMG_Load(cheminFichier); - SDL_SetColorKey(surface, SDL_TRUE, SDL_MapRGB(surface->format, 255, 255, 255 )); + if(r >= 0 && g >= 0 && b >= 0){ + SDL_SetColorKey(surface, SDL_TRUE, SDL_MapRGB(surface->format, r, g, b )); + } SDL_Texture* image = SDL_CreateTextureFromSurface(renderer, surface); SDL_FreeSurface(surface); return image; } +void afficher_niveau(int *tab, SDL_Renderer *renderer, SDL_Texture **spriteMap, int xCamera, int yCamera){ + SDL_Rect destrect; + destrect.h = 50; + destrect.w = 50; + for(int j = 0; j < 30; j++){ + for(int i = 0; i < 30; i++){ + destrect.x = i * 50 - xCamera; + destrect.y = j * 50 - yCamera; + SDL_RenderCopy(renderer, spriteMap[0], NULL, &destrect); + for(int k = 1; k < 9; k++){ + if(tab[30*j+i] == k){ + SDL_RenderCopy(renderer, spriteMap[k], NULL, &destrect); + } + } + } + } + return; +} diff --git a/image.h b/image.h index ff79863f370f939cf8c447644c2dbde1d8a0ff8b..df42d8bb70cbe3a376bae15bd17fb296427ce92f 100644 --- a/image.h +++ b/image.h @@ -1,4 +1,5 @@ #include <SDL2/SDL.h> +#include <SDL2/SDL_image.h> -SDL_Texture* charger_image(const char* fichier, SDL_Renderer* renderer); - +SDL_Texture* charger_image(const char* fichier, SDL_Renderer* renderer, int r, int g, int b); +void afficher_niveau(int *tab, SDL_Renderer *renderer, SDL_Texture **spriteMap, int xCamera, int yCamera); diff --git a/listeB.c b/listeB.c index 18e80461a60e40d87d596d29a705f5470b09adb5..a3adaf421bc5a5c6b0e4d05eff396da2a560910b 100644 --- a/listeB.c +++ b/listeB.c @@ -1,7 +1,6 @@ -#include <stdio.h> -#include <stdlib.h> #include "listeB.h" + ListeB nouvelle_listeB(balle data){ ListeB L = malloc(sizeof(s_ListeB)); L->data = data; @@ -21,23 +20,42 @@ bool est_vide_listeB(ListeB L) { } -ListeB incrementer_balles(ListeB L, int v) + +ListeB incrementer_balles(ListeB LB, ListeP LP, ListeR LR, int v, int xCamera, int yCamera) { - if(L == NULL){ - return L; + if(LB == NULL){ + return LB; } - //L->data = incrementer_balle(L->data, v); - incrementer_balle(&L->data, v); + incrementer_balle(&LB->data, v); - if(L->data.ballePos.x <= -60 || L->data.ballePos.x >= 1000 || L->data.ballePos.y <= -60 || L->data.ballePos.y >= 720){ - L = L->next; - return incrementer_balles(L, v); - } else { - L->next = incrementer_balles(L->next, v); - return L; + SDL_Rect ballePos; + ballePos.w = 1; + ballePos.h = 1; + ballePos.x = LB->data.ballePos.x + 20; + ballePos.y = LB->data.ballePos.y + 20; + + if(ballePos.x < 0 || ballePos.x >= 1000 || ballePos.y <= 0 || ballePos.y >= 700 + || detecter_collision_murs(LR, ballePos, xCamera, yCamera)){ + LB = LB->next; + return incrementer_balles(LB, LP, LR, v, xCamera, yCamera); } + ballePos.w = 6; + ballePos.h = 6; + ballePos.x = LB->data.ballePos.x - 3; + ballePos.y = LB->data.ballePos.y - 3; + + if(detecter_collision_perso(LP, ballePos, xCamera, yCamera)) { + LB = LB->next; + return incrementer_balles(LB, LP, LR, v, xCamera, yCamera); + } + + + LB->next = incrementer_balles(LB->next, LP, LR, v, xCamera, yCamera); + return LB; + + return NULL; } @@ -49,3 +67,21 @@ void afficher_listeB(SDL_Renderer *renderer, ListeB L) { } } +ListeB tir_update(ListeB LB, ListeP LP, ListeR LR, int time, SDL_Texture *balleLongueJaune, int v, int xCamera, int yCamera){ + //Si perso en train de tirer + s_ListeP *tmp = LP; + while(tmp != NULL){ + if(tmp->data.tir){ + //On fait pop une nouvelle balle toutes les X ms + if(time > tmp->data.tempsTirPrecedent + 200) { + LB = cons_listeB(LB, nouvelle_balle(balleLongueJaune, tmp->data.angle, tmp->data.pos)); + tmp->data.tempsTirPrecedent = time; + } + } + tmp = tmp->next; + } + //On met a jour les coordonn�es des balles d�j� tir�es, d�pop si n�c�ssaire + LB = incrementer_balles(LB, LP, LR, v, xCamera, yCamera); + return LB; +} + diff --git a/listeB.h b/listeB.h index 1380b496f851ba4240b000db53bb3e1f5f21f9e5..a3f75e9f5048a4dcd35b63efa2d6156e0f4f3669 100644 --- a/listeB.h +++ b/listeB.h @@ -1,5 +1,6 @@ -#include "projectile.h" -#include <stdbool.h> +#include <stdio.h> +#include "projectile.h" +#include "listeP.h" typedef struct s_ListeB *ListeB, s_ListeB; struct s_ListeB @@ -11,5 +12,6 @@ struct s_ListeB ListeB nouvelle_listeB(balle data); ListeB cons_listeB(ListeB L, balle data); bool est_vide_listeB(ListeB L); -ListeB incrementer_balles(ListeB L, int v); +ListeB incrementer_balles(ListeB LB, ListeP LP, ListeR LR, int v, int xCamera, int yCamera); void afficher_listeB(SDL_Renderer *renderer, ListeB L); +ListeB tir_update(ListeB LB, ListeP LP, ListeR LR, int time, SDL_Texture *balleLongueJaune, int v, int xCamera, int yCamera); diff --git a/listeP.c b/listeP.c index 444f826fa6d698a22d8d6884e59a5e3d3f7dc0f8..0cb33d8e811cb827ed8cb2668ee9e7fa76f8802e 100644 --- a/listeP.c +++ b/listeP.c @@ -1,14 +1,13 @@ -#include <stdio.h> -#include <stdlib.h> #include "listeP.h" + + ListeP nouvelle_listeP(Perso data){ ListeP L = malloc(sizeof(s_ListeP)); L->data = data; L->next = NULL; return L; - -}; +} ListeP cons_listeP(ListeP L, Perso data){ ListeP tmp = nouvelle_listeP(data); @@ -38,3 +37,57 @@ Perso* joueur(ListeP L){ } return NULL; } + + + +ListeP deplacement_ennemis(ListeP L, int xCamera, int yCamera, int dxCamera, int dyCamera){ + + if(L == NULL){ + return L; + } + + s_ListeP *tmp = L; + while(tmp != NULL){ + deplacement_ennemi(&tmp->data, xCamera, yCamera, dxCamera, dyCamera); + tmp = tmp->next; + } + + return L; + +} + +bool detecter_collision_perso(ListeP L, SDL_Rect rect, int xCamera, int yCamera){ + int ax1, ax2, bx1, bx2, ay1, ay2, by1, by2; + while(L != NULL){ + ax1 = rect.x;//+ xCamera; + ax2 = rect.x + rect.w ;//+ xCamera; + bx1 = L->data.pos.x; + bx2 = L->data.pos.x + L->data.pos.w; + ay1 = rect.y;// + yCamera; + ay2 = rect.y;// + rect.h + yCamera; + by1 = L->data.pos.y; + by2 = L->data.pos.y + L->data.pos.h; + if(ax1 < bx2 && ax2 > bx1 && ay1 < by2 && ay2 > by1 && L->data.ennemi){ + return true; + } + L = L->next; + } + return false; + +} + +void animer_persos2(ListeP L){ + while(L != NULL){ + if(L->data.ennemi){ + animer_perso(&L->data); + } + L = L->next; + } +} + +void animer_persos(ListeP L){ + + animer_persos2(L); + return; +} + diff --git a/listeP.h b/listeP.h index b4ea68649d263cb2873acb4379d700a69b44f7ed..a7e0f05f769f011e5167b44dcd1dff470a923824 100644 --- a/listeP.h +++ b/listeP.h @@ -1,5 +1,6 @@ -#include "personnage.h" -#include <stdbool.h> +#include "personnage.h" +#include <stdio.h> + typedef struct s_ListeP *ListeP, s_ListeP; struct s_ListeP @@ -13,5 +14,7 @@ ListeP cons_listeP(ListeP L, Perso data); bool est_vide_listeP(ListeP L); void afficher_listeP(SDL_Renderer *renderer, ListeP L); Perso* joueur(ListeP L); - - +ListeP deplacement_ennemis(ListeP L, int xCamera, int yCamera, int dxCamera, int dyCamera); +bool detecter_collision_perso(ListeP L, SDL_Rect rect, int xCamera, int yCamera); +void animer_persos(ListeP L); +void animer_persos2(ListeP L); diff --git a/listeR.c b/listeR.c new file mode 100644 index 0000000000000000000000000000000000000000..b4cab061b69eb093ab59ffb86e21d7af23547fc0 --- /dev/null +++ b/listeR.c @@ -0,0 +1,111 @@ +#include "listeR.h" + + + +ListeR nouvelle_listeR(SDL_Rect data){ + ListeR L = malloc(sizeof(s_ListeR)); + L->data = data; + L->next = NULL; + return L; +} + +ListeR cons_listeR(ListeR L, SDL_Rect data){ + ListeR tmp = nouvelle_listeR(data); + tmp->next = L; + return tmp; +} + + +ListeR charger_niveau(int *tab, ListeR L){ + //on met toutes les case � 0 pour dire que tout est du sol (provisoire) + for(int j = 0; j < 30; j++){ + for(int i = 0; i < 30; i++){ + tab[30*j+i] = 0; + } + } + + //ici lire fichier et remplacer les cases qu'il faut par 1-8 pour mettre des murs + //je mets �a en attendant pour afficher des murs sur le bord de la map + for(int j = 0; j < 30; j++){ + tab[30*j+0] = 3; + tab[30*j+29] = 4; + tab[30*0+j] = 1; + tab[30*29+j] = 2; + } + tab[30*0+0] = 5; + tab[30*0+29] = 6; + tab[30*29+0] = 7; + tab[30*29+29] = 8; + + //Remplir la liste de murs + SDL_Rect rect; + for(int j = 0; j < 30; j++){ + for(int i = 0; i < 30; i++){ + switch(tab[30*j+i]){ + case 0: + break; + case 1: + rect.x = i * 50; + rect.y = j * 50; + rect.h = 25; + rect.w = 50; + L = cons_listeR(L, rect); + break; + case 2: + rect.x = i * 50; + rect.y = j * 50 + 25; + rect.h = 25; + rect.w = 50; + L = cons_listeR(L, rect); + break; + case 3: + rect.x = i * 50; + rect.y = j * 50; + rect.h = 50; + rect.w = 25; + L = cons_listeR(L, rect); + break; + case 4: + rect.x = i * 50 + 25; + rect.y = j * 50; + rect.h = 50; + rect.w = 25; + L = cons_listeR(L, rect); + break; + + case 5: + case 6: + case 7: + case 8: + rect.x = i * 50; + rect.y = j * 50; + rect.h = 50; + rect.w = 50; + L = cons_listeR(L, rect); + break; + } + } + } + return L; +} + + +bool detecter_collision_murs(ListeR L, SDL_Rect rect, int xCamera, int yCamera){ + s_ListeR *tmp = L; + int ax1, ax2, bx1, bx2, ay1, ay2, by1, by2; + while(tmp != NULL){ + ax1 = rect.x + xCamera; + ax2 = rect.x + rect.w + xCamera; + bx1 = tmp->data.x; + bx2 = tmp->data.x + tmp->data.w; + ay1 = rect.y + yCamera; + ay2 = rect.y + rect.h + yCamera; + by1 = tmp->data.y; + by2 = tmp->data.y + tmp->data.h; + if(ax1 < bx2 && ax2 > bx1 && ay1 < by2 && ay2 > by1){ + return true; + } + tmp = tmp->next; + } + return false; +} diff --git a/listeR.h b/listeR.h new file mode 100644 index 0000000000000000000000000000000000000000..9f06adcaaabf640bc190e7f3f572671cb2814d58 --- /dev/null +++ b/listeR.h @@ -0,0 +1,15 @@ +#include <SDL2/SDL.h> +#include <stdlib.h> +#include <stdbool.h> + +typedef struct s_ListeR *ListeR, s_ListeR; +struct s_ListeR +{ + ListeR next; + SDL_Rect data; +}; + +ListeR nouvelle_listeR(SDL_Rect data); +ListeR cons_listeR(ListeR L, SDL_Rect data); +ListeR charger_niveau(int *tab, ListeR L); +bool detecter_collision_murs(ListeR L, SDL_Rect rect, int xCamera, int yCamera); diff --git a/main.c b/main.c deleted file mode 100644 index 703029d844129a0e689ddcf3d6602b79d16d5a78..0000000000000000000000000000000000000000 --- a/main.c +++ /dev/null @@ -1,238 +0,0 @@ -#include <SDL2/SDL.h> -#include <SDL2/SDL_image.h> -#include <stdio.h> -#include <stdlib.h> -#include <stdbool.h> -#include <time.h> -#include "image.h" -#include "clavier.h" - - -#define RAYON 30.9 - -int main(int argc, char *argv[]) -{ - srand(time(NULL)); - bool gameover = false; - bool tir = false; - SDL_Window *fenetre; - SDL_Event evenements; - SDL_Renderer *ecran; - 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; - ListeB ballesTirees; - 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)) - { - printf("Erreur d'initialisation de la SDL %s", SDL_GetError()); - SDL_Quit(); - return EXIT_FAILURE; - } - - IMG_Init(IMG_INIT_PNG); - - //Création fenêtre - fenetre = SDL_CreateWindow("gameName", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 720, SDL_WINDOW_RESIZABLE); - if(fenetre == NULL) - { - printf("Erreur d'initialisation de la fenetre %s", SDL_GetError()); - return EXIT_FAILURE; - } - - //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); - sprites[1] = perso; - perso = charger_image("sprites/perso/ennemi_1.png", ecran); - sprites[2] = perso; - - Perso p = nouveau_joueur(ecran , sprites); - persosListe = nouvelle_listeP(p); - p = nouvel_ennemi_1(ecran, sprites); - persosListe = cons_listeP(persosListe, p); - - //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) - tempsActuel = SDL_GetTicks(); - if (tempsActuel > tempsPrecedent + 16) - { - //Détection événements - while(SDL_PollEvent(&evenements)) - { - switch(evenements.type) - { - case SDL_QUIT: - gameover = true; - break; - case SDL_MOUSEMOTION: - mouseX = evenements.motion.x; - mouseY = evenements.motion.y; - break; - case SDL_MOUSEBUTTONDOWN: - switch(evenements.button.button) - { - case SDL_BUTTON_LEFT: - tir = true; - break; - } - break; - case SDL_MOUSEBUTTONUP: - switch(evenements.button.button) - { - case SDL_BUTTON_LEFT: - tir = false; - break; - } - break; - - case SDL_KEYDOWN: - switch(evenements.key.keysym.sym) - { - case SDLK_ESCAPE: - gameover = true; - break; - } - break; - - } - } - - - joueur_ptr = joueur(persosListe); - joueur_ptr->tir = tir; - - tempsActuelAnim = SDL_GetTicks(); - if(tempsActuelAnim > tempsPrecedentAnim + 70 ){ - animer_persos(persosListe); - tempsPrecedentAnim = tempsActuelAnim; - } - - - - //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); - tempsPrecedent = tempsActuel; - } - } - - //Nettoyage - SDL_DestroyWindow(fenetre); - SDL_DestroyTexture(fond); - SDL_DestroyTexture(perso); - IMG_Quit(); - SDL_Quit(); - return EXIT_SUCCESS; -} diff --git a/personnage.c b/personnage.c deleted file mode 100644 index ccc692ebc38acfa593b354f8bc47fb93c36b73a6..0000000000000000000000000000000000000000 --- a/personnage.c +++ /dev/null @@ -1,135 +0,0 @@ -#include <time.h> -#include <stdlib.h> -#include "personnage.h" -#include <math.h> - -#define PI 3.14159265359 - -Perso nouveau_joueur(SDL_Renderer *renderer, SDL_Texture **sprites){ - Perso p; - p.tempsTirPrecedent = 0; - p.image = sprites[0]; - p.pos.x = 300; - p.pos.y = 300; - p.pos.w = 60; - p.pos.h = 60; - p.srcrect.x = 0; - p.srcrect.y = 0; - p.srcrect.w = 258; - p.srcrect.h = 220; - p.angle = 0; - p.vie = 100; - p.vitesse = 3; - p.tir = false; - p.ennemi = false; - p.anim = IDLE; - p.animFlip = 1; - return p; -} - -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) - p.pos.x = rand()%900 + 100; - p.pos.y = rand()%600 + 100; - p.pos.w = 60; - p.pos.h = 60; - p.srcrect.x = 0; - p.srcrect.y = 0; - p.srcrect.w = 258; - p.srcrect.h = 220; - p.angle = 0; - p.vie = 100; - p.vitesse = 3; - p.tir = false; - p.ennemi = true; - p.anim = IDLE; - p.animFlip = 1; - return p; -} - -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, SDL_Rect *tabMur) -{ - int dX = 0; - int dY = 0; - - const Uint8 *state = SDL_GetKeyboardState(NULL); - - if(state[SDL_GetScancodeFromKey(SDLK_z)]){ - dY -= 1; - } - - if(state[SDL_GetScancodeFromKey(SDLK_s)]){ - dY += 1; - } - - if(state[SDL_GetScancodeFromKey(SDLK_q)]){ - dX -= 1; - } - - if(state[SDL_GetScancodeFromKey(SDLK_d)]){ - dX += 1; - } - - if(dX == 2 || dX == -2){ - dX = dX/4; - } - - if(dY == 2 || dY == -2){ - dY = dY/4; - } - - - 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; - } - - -} - -void angle_joueur(Perso *p, float mouseX, float mouseY){ - float angle; - //float dSourisPerso; - angle = atan2(mouseY - (p->pos.y + 30), mouseX - (p->pos.x + 30)); - //dSourisPerso = sqrt(pow(mouseX - (p->pos.x + 30), 2) + pow(mouseY - (p->pos.y + 30), 2)); - //angle -= atan(15./dSourisPerso); - angle = (angle * 180.0000)/PI; - p->angle = angle; - - return; -} - -void animer_perso(Perso *p){ - p->srcrect.y += 216 * p->animFlip; - if(p->srcrect.y > 4104|| p->srcrect.y < 0){ - p->animFlip = -p->animFlip; - p->srcrect.y += 216 * p->animFlip; - } - return; -} - diff --git a/personnage.h b/personnage.h index 94d2b72162ffcfa3c31509bb50dea81b43e5cd26..efba9718d1991a2bb0a3c869f8ec04c8480de49d 100644 --- a/personnage.h +++ b/personnage.h @@ -1,12 +1,11 @@ -#include <SDL2/SDL.h> -#include <stdbool.h> +#include <time.h> +#include <math.h> #include "image.h" +#include "listeR.h" + +#define PI 3.14159265359 + -typedef enum AnimationType Anim; -enum AnimationType -{ - IDLE, MOUVEMENT, TIR, CUT, MORT -}; typedef struct s_Personnage Perso; struct s_Personnage @@ -21,13 +20,15 @@ struct s_Personnage int animFlip; bool tir; bool ennemi; - Anim anim; }; 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, SDL_Rect *tabMur); +void deplacement_joueur(Perso *p, ListeR L, int *xCamera, int *yCamera, int *dxCamera, int *dyCamera); +void deplacement_ennemi(Perso *p, int xCamera, int yCamera, int dxCamera, int dyCamera); +void angle_ennemi(Perso *p); void angle_joueur(Perso *p, float mouseX, float mouseY); void animer_perso(Perso *p); + diff --git a/projectile.c b/projectile.c index 7f6404cfba61e534a33be1218f508e0c168680bc..eb2e94c12a4f099595024de2a68a476a6b787c0d 100644 --- a/projectile.c +++ b/projectile.c @@ -1,12 +1,6 @@ -#include <SDL2/SDL.h> -#include <math.h> -#include <stdlib.h> #include "projectile.h" -#define PI 3.14159265359 - - balle nouvelle_balle(SDL_Texture *image, float angle, SDL_Rect persoPos) { balle b; @@ -20,8 +14,8 @@ balle nouvelle_balle(SDL_Texture *image, float angle, SDL_Rect persoPos) //v = vitesse de la balle (provisoire) void incrementer_balle(balle *b, int v) { - b->ballePos.x += (int)(cos(b->angle * PI / 180) * v); - b->ballePos.y += (int)(sin(b->angle * PI / 180) * v); + b->ballePos.x += round(cos(b->angle * PI / 180) * v); + b->ballePos.y += round(sin(b->angle * PI / 180) * v); } diff --git a/projectile.h b/projectile.h index 89734240d1a6db567381542b9099e0148c44d2a4..8d1c272b753c2568ad4b9d7e996430a920a3d8bb 100644 --- a/projectile.h +++ b/projectile.h @@ -1,5 +1,8 @@ #include <SDL2/SDL.h> #include <stdbool.h> +#include <math.h> +#include <stdlib.h> +#define PI 3.14159265359 typedef struct s_Balle balle, s_Balle; struct s_Balle diff --git a/son/musique.mp3 b/son/musique.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..dc52d260b169213270156c3fe2d8375b8f2dfd66 Binary files /dev/null and b/son/musique.mp3 differ diff --git a/son/pistolet.flac b/son/pistolet.flac new file mode 100644 index 0000000000000000000000000000000000000000..cc35a3540ac0feb6d94839f4dc641259ff039915 Binary files /dev/null and b/son/pistolet.flac differ diff --git a/son/shotgun.mp3 b/son/shotgun.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..55233c7818b4ab4b47d832664f91958daf00c5fe Binary files /dev/null and b/son/shotgun.mp3 differ diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_0.png b/sprites/ennemis/zombie/attack/skeleton-attack_0.png new file mode 100644 index 0000000000000000000000000000000000000000..065cb415e20af639229419ea274e0ef3ffe4982a Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_0.png differ diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_1.png b/sprites/ennemis/zombie/attack/skeleton-attack_1.png new file mode 100644 index 0000000000000000000000000000000000000000..23b33f651d0ccd124e645e4ac87ec207a8f01064 Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_1.png differ diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_2.png b/sprites/ennemis/zombie/attack/skeleton-attack_2.png new file mode 100644 index 0000000000000000000000000000000000000000..778fb66f3c5d9d39694da1fc74624ca7ed64454c Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_2.png differ diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_3.png b/sprites/ennemis/zombie/attack/skeleton-attack_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ee6db3ab2e4d839aa85d0d7da444adfb5684aca1 Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_3.png differ diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_4.png b/sprites/ennemis/zombie/attack/skeleton-attack_4.png new file mode 100644 index 0000000000000000000000000000000000000000..d2006f641aafa76216438f13be79b45c81336582 Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_4.png differ diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_5.png b/sprites/ennemis/zombie/attack/skeleton-attack_5.png new file mode 100644 index 0000000000000000000000000000000000000000..8d3ba16b675ce0bde6ded1a092a092699d8c7547 Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_5.png differ diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_6.png b/sprites/ennemis/zombie/attack/skeleton-attack_6.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0b577a00e8b9361a9c21ad2b1da15a23c4479a Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_6.png differ diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_7.png b/sprites/ennemis/zombie/attack/skeleton-attack_7.png new file mode 100644 index 0000000000000000000000000000000000000000..27494e0fcc8960c057db31ff200889b5a202e52a Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_7.png differ diff --git a/sprites/ennemis/zombie/attack/skeleton-attack_8.png b/sprites/ennemis/zombie/attack/skeleton-attack_8.png new file mode 100644 index 0000000000000000000000000000000000000000..065cb415e20af639229419ea274e0ef3ffe4982a Binary files /dev/null and b/sprites/ennemis/zombie/attack/skeleton-attack_8.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_0.png b/sprites/ennemis/zombie/move/skeleton-move_0.png new file mode 100644 index 0000000000000000000000000000000000000000..efc5f47c0826f2df567779eeedb3762078f72558 Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_0.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_1.png b/sprites/ennemis/zombie/move/skeleton-move_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e32405141468f5601c4d1d26b8af53fa0675a7a2 Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_1.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_10.png b/sprites/ennemis/zombie/move/skeleton-move_10.png new file mode 100644 index 0000000000000000000000000000000000000000..eea6728758c9eb075dfdb8721a22658e654df7eb Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_10.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_11.png b/sprites/ennemis/zombie/move/skeleton-move_11.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c4bc4b1866944ac018939851f3de3beb790f7c Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_11.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_12.png b/sprites/ennemis/zombie/move/skeleton-move_12.png new file mode 100644 index 0000000000000000000000000000000000000000..d4457c8d0195b200cdd844eb372adc1de8894ce0 Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_12.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_13.png b/sprites/ennemis/zombie/move/skeleton-move_13.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b4860be42ebd33d0a8510e73525c0e38118225 Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_13.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_14.png b/sprites/ennemis/zombie/move/skeleton-move_14.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd3b8498a7fced2ac1d8d48e2c3858b12b57141 Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_14.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_15.png b/sprites/ennemis/zombie/move/skeleton-move_15.png new file mode 100644 index 0000000000000000000000000000000000000000..c91f5bcdd0c7ed146340f65e6d30aa44c4e45a2f Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_15.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_16.png b/sprites/ennemis/zombie/move/skeleton-move_16.png new file mode 100644 index 0000000000000000000000000000000000000000..efc5f47c0826f2df567779eeedb3762078f72558 Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_16.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_2.png b/sprites/ennemis/zombie/move/skeleton-move_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e386e06ba473cce660ced1430641358a8aeb7d0 Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_2.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_3.png b/sprites/ennemis/zombie/move/skeleton-move_3.png new file mode 100644 index 0000000000000000000000000000000000000000..27f2ad4c4fa51be3620b97636afecff6df989b1e Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_3.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_4.png b/sprites/ennemis/zombie/move/skeleton-move_4.png new file mode 100644 index 0000000000000000000000000000000000000000..097f77b45d9a8ad9c2aa4cc704b94d6de4bf3e9d Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_4.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_5.png b/sprites/ennemis/zombie/move/skeleton-move_5.png new file mode 100644 index 0000000000000000000000000000000000000000..85f29dfdcb752e5f0a3cc117564d24a0ba7888db Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_5.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_6.png b/sprites/ennemis/zombie/move/skeleton-move_6.png new file mode 100644 index 0000000000000000000000000000000000000000..8f687160e92e7c3c7f8e7dedaf231e69d8c81273 Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_6.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_7.png b/sprites/ennemis/zombie/move/skeleton-move_7.png new file mode 100644 index 0000000000000000000000000000000000000000..80e40f78fb99b48dbe5e7e7f91089d756435fd66 Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_7.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_8.png b/sprites/ennemis/zombie/move/skeleton-move_8.png new file mode 100644 index 0000000000000000000000000000000000000000..03dc64883ff7ea9dfc1ae8ed95bf693134e5825c Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_8.png differ diff --git a/sprites/ennemis/zombie/move/skeleton-move_9.png b/sprites/ennemis/zombie/move/skeleton-move_9.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6713b147c7b6d62d5d27faa45e1c7b1ad36bce Binary files /dev/null and b/sprites/ennemis/zombie/move/skeleton-move_9.png differ diff --git a/sprites/ennemis/zombie/move/zombie_move.png b/sprites/ennemis/zombie/move/zombie_move.png new file mode 100644 index 0000000000000000000000000000000000000000..e1b74dccfb6dac76758ed96e730f7f95f68188e5 Binary files /dev/null and b/sprites/ennemis/zombie/move/zombie_move.png differ diff --git a/sprites/fond.png b/sprites/fond.png index 44f1c0b6401be531e01b3540393dffffff922622..9be62928bc1a9491e0585b23263c35b0f314dd36 100644 Binary files a/sprites/fond.png and b/sprites/fond.png differ diff --git a/sprites/map/mur_b.png b/sprites/map/mur_b.png new file mode 100644 index 0000000000000000000000000000000000000000..551f5fcb4fbe101b5289ee6fbedde95ddbbbfe03 Binary files /dev/null and b/sprites/map/mur_b.png differ diff --git a/sprites/map/mur_bd.png b/sprites/map/mur_bd.png new file mode 100644 index 0000000000000000000000000000000000000000..b67445f6b2d589967ea0b94cd444975be35d52fb Binary files /dev/null and b/sprites/map/mur_bd.png differ diff --git a/sprites/map/mur_bg.png b/sprites/map/mur_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d57e9731b1122c2a1d502eb72a66e9a8439b6fb9 Binary files /dev/null and b/sprites/map/mur_bg.png differ diff --git a/sprites/map/mur_d.png b/sprites/map/mur_d.png new file mode 100644 index 0000000000000000000000000000000000000000..223435d8236106c90672f7b92532c361c5a5fd05 Binary files /dev/null and b/sprites/map/mur_d.png differ diff --git a/sprites/map/mur_g.png b/sprites/map/mur_g.png new file mode 100644 index 0000000000000000000000000000000000000000..55ed72fdb678fda61c4a9ee956a2d5c05c24596b Binary files /dev/null and b/sprites/map/mur_g.png differ diff --git a/sprites/map/mur_h.png b/sprites/map/mur_h.png new file mode 100644 index 0000000000000000000000000000000000000000..aa35d1a5a3699b15caea5a3f827c478beddfd714 Binary files /dev/null and b/sprites/map/mur_h.png differ diff --git a/sprites/map/mur_hd.png b/sprites/map/mur_hd.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3193f53622941e4c3e3e6341b7af4204fa5df9 Binary files /dev/null and b/sprites/map/mur_hd.png differ diff --git a/sprites/map/mur_hg.png b/sprites/map/mur_hg.png new file mode 100644 index 0000000000000000000000000000000000000000..27cf4037424478e94efb945bb1f0bc848382e992 Binary files /dev/null and b/sprites/map/mur_hg.png differ diff --git a/sprites/map/sol.png b/sprites/map/sol.png new file mode 100644 index 0000000000000000000000000000000000000000..babd03d6440a05ce30925278c82e5c9ff98172a8 Binary files /dev/null and b/sprites/map/sol.png differ diff --git a/sprites/map/sol2.png b/sprites/map/sol2.png new file mode 100644 index 0000000000000000000000000000000000000000..bfb593f842e0c891c04488c60b5febf1f70552c3 Binary files /dev/null and b/sprites/map/sol2.png differ