diff --git a/main.c b/main.c index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6c2ea1f5d5b893c7424bf41ad56280830cde41e4 100644 --- a/main.c +++ b/main.c @@ -0,0 +1,157 @@ +#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; + 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]; + + + //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); + 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); + 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); + 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; +}