Skip to content
Snippets Groups Projects
Commit 93c85c2c authored by Paul Georges's avatar Paul Georges
Browse files

main.c

parent 5bc488db
No related branches found
No related tags found
No related merge requests found
#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);
//Cration fentre
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;
}
//Cration 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 paramtres (voir projectile.h)
balle b = nouvelle_balle(balleLongueJaune, 0, persoPos);
ballesTirees = nouvelle_listeB(b);
//Boucle de jeu
while(!gameover)
{
//Petit timer pour pas dpasser 60 excutions/sec (provisoire)
tempsActuel = SDL_GetTicks();
if (tempsActuel > tempsPrecedent + 16)
{
//Dtection vnements
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 dplacement/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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment