Bjr tout le monde,je doit rendre ma pPTI pour mercredi prochain mais je suis un debutant en sdl et j'ai donc un probleme, voici mn code que le main.cpp(ci-dessous), je voudrais faire deplacer ma voiture avec rotation grace aux fleches du clavier mais je n'y arrive pas, le code ou sa bloke est en rouge je c il doit manquer 5 à 10 ligne mais impossible à trouver j'ai tout essayer mais la voiture fait n'importe quoi ...Quelqu'un pourrait t-il maider en me donnant le code necessaire ? Je vous en remercie d'avance..
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_rotozoom.h>
#include "Implementation.h"
#define TEMPS 15 // Le temps qu'il y a entre chaque augmentation de l'angle.
int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL;
SDL_Surface *rotation = NULL;
SDL_Surface *message = NULL;
SDL_Surface *background = NULL;
SDL_Surface *tabvoit[3];
SDL_Event event;
SDL_Surface *perso = NULL;
SDL_Rect positfond;
SDL_Rect voitfond;
SDL_Rect persofond;
SDL_GetTicks();
// Position des images
positfond.x=0;positfond.y=0;
voitfond.x=310;voitfond.y=210;
persofond.x=220;persofond.y=251;
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;
int continuer = 1;
int pointx;
int pointy;
double dpointx, dpointy;
double angle = 0;
double zoom = 1;
int sens = 1;
//Initialisation de la librairie SDL en mode vidéo uniquement et son
SDL_Init (SDL_INIT_VIDEO);
// Je définie une fenêtre de 640*480 en 32 bits
ecran = SDL_SetVideoMode(792, 582, 32, SDL_SWSURFACE| SDL_DOUBLEBUF);
// Je nomme ma fenêtre
SDL_WM_SetCaption("Mini-Circuit", NULL);
//Chargement de l'image
background = SDL_LoadBMP("Circuit.bmp");
perso = SDL_LoadBMP("perso2.bmp");
//Tableau Voiture
tabvoit[0]=SDL_LoadBMP("car1.bmp");
tabvoit[2]=SDL_LoadBMP("car2.bmp");
tabvoit[1]=SDL_LoadBMP("car3.bmp");
while (continuer) /* TANT QUE la variable ne vaut pas 0 */
{
SDL_PollEvent(&event);
switch(event.type) /* On teste le type d'év�nement */
{
case SDL_QUIT: /* Si c'est un év�nement QUITTER */
continuer = 0; /* On met le booléen à 0, donc la boucle va s'arrêter */
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE: /* Appui sur la touche Echap, on arrête le programme */
continuer = 0;
break;
/* // touche pour deplacer la voiture
case SDLK_UP:
double angle=angle*(3.1415/180.0);
dpointx+=10*cos(angle);
dpointy+=10*sin(angle);
//permet la conversion d'un double en int
pointx=(int)dpointx;
pointy=(int)dpointy;
voitfond.x=pointx;
voitfond.y=pointy;
break;
*/
}
}
animperso(persofond);
//ContourImage ( voitfond);
if(voitfond.y>=535)
{
voitfond.y=532;
}
if(voitfond.x>=754)
{
voitfond.x=752;
}
//Mur invisible en dessous personnages
if ((voitfond.y>=230)&&(voitfond.y<=270))
if ((voitfond.x>=200)&&(voitfond.x<=250))
{
voitfond.y=290;
}
// Efface l'écran avec la couleur noire
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
// circuit devant l'ecran noir
SDL_BlitSurface(background,NULL,ecran,&positfond);
//Afficher Personnage et enleve les couleur contour
SDL_BlitSurface(perso,NULL,ecran,&persofond);
SDL_SetColorKey(perso,SDL_SRCCOLORKEY,SDL_MapRGB(perso->format,94,66,41));
//On affiche la rotation de la surface image.
SDL_SetColorKey(tabvoit[0],SDL_SRCCOLORKEY,SDL_MapRGB(tabvoit[0]->format,94,66,41));
rotation = rotozoomSurface(tabvoit[0], angle, 1.0, 1);
SDL_SetColorKey(rotation,SDL_SRCCOLORKEY,SDL_MapRGB(rotation->format,0,0,0));
SDL_BlitSurface(rotation , NULL, ecran, &voitfond);
//On efface rotation car on va la redéfinir dans la prochaine boucle.Si on ne le fait pas, cela crée une fuite de mémoire.
SDL_FreeSurface(rotation);
// Met l'écran en premier plan
SDL_Flip(ecran);
}
SDL_FreeSurface(ecran);
// Libération de la librairie SDL
SDL_Quit();
return EXIT_SUCCESS;
}