You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
4.3 KiB
C++

// Leopold Clement
#include <stdio.h>
#include <math.h>
#include <sys/time.h>
#include "SDL2/SDL.h"
/*#include <exception.h>
#include <string.h>
#include <iostream.h>*/
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;
}