// Leopold Clement #include #include #include #include "SDL2/SDL.h" /*#include #include #include */ struct timeval tv; const int16_t LONGUEURE_TERRAIN = 800; const int16_t LARGEUR_TERRAIN = 600; const int16_t LARGEUR_BUT = 200; const float VITESSE_TRANSLATION = 0.2; const float VITESSE_ROTATION = 0.02; typedef struct { int up_key; int down_key; int right_key; int left_key; } Controlleur; typedef struct { float x; float y; float theta; } Vecteur; typedef struct { Vecteur position; char nom[25]; Controlleur *control; } Robot; typedef struct { Vecteur position; Vecteur vitesse; Robot *possession; } Balle; typedef struct { int point_vert; int point_violet; int balle_en_jeu; } Score; void rendut_robot(Robot robot) { } void rendut_balle(Balle balle) { } void rendut_global(Robot robots[2], Balle balle) { } float distance_vecteurs(Vecteur vect1, Vecteur vect2) { return (sqrtf32(powf(vect1.x - vect2.x, 2) + powf(vect1.y - vect2.y, 2))); } Vecteur addition_vecteur(Vecteur vect1, Vecteur vect2) { Vecteur vecteur_somme = {vect1.x + vect2.y, vect1.y + vect2.y, vect1.theta + vect2.theta}; return vecteur_somme; } Vecteur projecteur_base_fixe(Vecteur vect, float theta) { Vecteur vect_fixe = {0, 0, 0}; vect_fixe.x = vect.x * cosf32(theta) - vect.y * sinf32(theta); vect_fixe.y = vect.x * sinf32(theta) + vect.y * cosf32(theta); return vect_fixe; } void deplacement_robot(SDL_Event events, Robot robot) { if (events.key.keysym.sym == robot.control->up_key) { Vecteur avance_ref_robot = {VITESSE_TRANSLATION, 0, 0}; Vecteur avance_ref_fixe = projecteur_base_fixe(avance_ref_robot, -robot.position.theta); robot.position = addition_vecteur(robot.position, avance_ref_fixe); } else if (events.key.keysym.sym == robot.control->down_key) { Vecteur avance_ref_robot = {-VITESSE_TRANSLATION, 0, 0}; Vecteur avance_ref_fixe = projecteur_base_fixe(avance_ref_robot, -robot.position.theta); robot.position = addition_vecteur(robot.position, avance_ref_fixe); } if (events.key.keysym.sym == robot.control->left_key) { Vecteur rotation = {0, 0, VITESSE_ROTATION}; robot.position = addition_vecteur(robot.position, rotation); } else if (events.key.keysym.sym == robot.control->right_key) { Vecteur rotation = {0, 0, -VITESSE_ROTATION}; robot.position = addition_vecteur(robot.position, rotation); } } void pulsation_du_jeu(SDL_Renderer *prenderer, SDL_Event events, Robot robots[2], Balle balle, int *pisOpen) { while (SDL_PollEvent(&events)) { switch (events.type) { case SDL_QUIT: *pisOpen = 0; break; case SDL_KEYDOWN: char i; for(i = 0; i<2; i++) deplacement_robot(events, robots[i]); } } return; } int main(int argc, char *argv[]) { SDL_Window *pwindow; SDL_Renderer *prenderer; SDL_Event events; int isOpen = 1; unsigned long long last_tic = 0; // SDL_Rect rectangle1 = {20, 20, 100, 50}; //Initialisation de SDL avec la vidéo if (SDL_Init(SDL_INIT_VIDEO) != 0) printf("il y a un souci d'initialisation"); // make sure SDL cleans up before exit atexit(SDL_Quit); //Création d'une fenetre pointée par m_window et de son rendu pointé par m_rendered //largeur 640 et hauteur 480 if (SDL_CreateWindowAndRenderer(640, 480, SDL_WINDOW_SHOWN, &pwindow, &prenderer) != 0) printf("il y a un souci de création de fenêtre"); //Paramètre de rendu de la fenetre (R,G,B et transparence a 255 pour opaque) SDL_SetRenderDrawColor(prenderer, 200, 200, 200, 255); SDL_RenderClear(prenderer); //Affichage de la fenetre SDL_RenderPresent(prenderer); while (isOpen) { gettimeofday(&tv, NULL); unsigned long long millisecondsSinceEpoch = (unsigned long long)(tv.tv_sec) * 1000 + (unsigned long long)(tv.tv_usec) / 1000; /* évènements de votre jeu */ SDL_RenderPresent(prenderer); // mets à jour la fenêtre } SDL_DestroyRenderer(prenderer); //destruction du rendu SDL_DestroyWindow(pwindow); //destruction de la fenetre SDL_Quit(); return 0; }