slt je suis en train de faire un jeu en C sdl
voila j'ai un vaisseau et je dois tirer sur de smétéorite
des qu'une météorite touche le vaisseau une barre de vie s'enleve le probleme
il ya 4barre de vie et des que je touche une meteorite et ben il y en a deux qui s'enlev d'un seul coup
pouvez vous m'aider merci
/* jeu SPACE RAIN I
programmé par Sylvain
le 01/06/09
*/
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include <FMOD/fmod.h>
#include "jeu.h"
void jouer(SDL_Surface* ecran)
{
SDL_Surface *ecran1 = NULL, *vaisseau1 = NULL, *laser=NULL, *mm=NULL, *explo=NULL;
SDL_Surface * barre =NULL, *barre1=NULL,*barre2=NULL,*barre3=NULL;
SDL_Rect positionVaisseau1;
SDL_Rect positionEcran1;
SDL_Rect positionLaser;
SDL_Rect positionMm;
SDL_Rect positionBarre;
SDL_Rect positionBarre1;
SDL_Rect positionBarre2;
SDL_Rect positionBarre3;
SDL_Rect positionVie;
SDL_Rect positionExplo;
SDL_Event event;
long jeu=0;
int continuer = 1;
int tempsPrecedent1 = 0, tempsActuel1 = 0;
int tempsLaser1 =0, tempsLaser2=0;
int tempsPrecedent2=0, tempsActuel2=0;
/* chargement de tous les sprites et des positions*/
SDL_Init(SDL_INIT_VIDEO);
ecran1 = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF );
SDL_WM_SetCaption("SPACE RAIN I", NULL);
laser= SDL_LoadBMP("laser.bmp");
mm=SDL_LoadBMP("mm.bmp");
barre=SDL_LoadBMP("barre.bmp");
barre1=SDL_LoadBMP("barre1.bmp");
barre2=SDL_LoadBMP("barre2.bmp");
barre3=SDL_LoadBMP("barre3.bmp");
explo=IMG_Load("explosion.jpg");
vaisseau1= SDL_LoadBMP("vaisseau1.bmp");
SDL_SetColorKey(mm,SDL_SRCCOLORKEY, SDL_MapRGB(mm -> format,0,0,0));
positionMm.x=350;
positionMm.y=50;
SDL_SetColorKey(barre,SDL_SRCCOLORKEY, SDL_MapRGB(barre -> format,0,0,0));
positionBarre.x=600;
positionBarre.y=20;
SDL_SetColorKey(barre1,SDL_SRCCOLORKEY, SDL_MapRGB(barre1 -> format,0,0,0));
positionBarre1.x=800;
positionBarre1.y=800;
SDL_SetColorKey(barre2,SDL_SRCCOLORKEY, SDL_MapRGB(barre2 -> format,0,0,0));
positionBarre2.x=800;
positionBarre2.y=800;
SDL_SetColorKey(barre3,SDL_SRCCOLORKEY, SDL_MapRGB(barre3 -> format,0,0,0));
positionBarre3.x=800;
positionBarre3.y=800;
positionExplo.x=800;
positionExplo.y=800;
SDL_SetColorKey(vaisseau1, SDL_SRCCOLORKEY, SDL_MapRGB(vaisseau1->format, 0, 0, 0));
positionVaisseau1.x = ecran1->w / 2 - vaisseau1->w / 2;
positionVaisseau1.y = ecran1->h / 2 - vaisseau1->h / 2;
positionLaser.x = positionVaisseau1.x;
positionLaser.y = positionVaisseau1.y;
SDL_Delay(500);//atente de 500ms
SDL_EnableKeyRepeat(10, 10);//répétition des touches
SDL_ShowCursor(SDL_DISABLE);//masquer le curseur
while (continuer)//boucle principale
{
SDL_PollEvent(&event);
switch(event.type)
{
case SDL_QUIT://quitter avec la croix rouge
continuer = 0;
break;
case SDL_MOUSEMOTION://mouvement souris
positionVaisseau1.x = event.motion.x;
positionVaisseau1.y = event.motion.y;
break;
case SDL_MOUSEBUTTONUP:
case SDL_BUTTON_LEFT : //tirer avec le laser
positionLaser.y = positionVaisseau1.y-15;
positionLaser.x = positionVaisseau1.x+40;
break;
break;
}
//chargement de tous les blitte à leur nouvelle position
SDL_Flip(ecran);
SDL_FillRect(ecran1, NULL, SDL_MapRGB(ecran1->format, 0, 0, 0));
SDL_SetAlpha(ecran1, SDL_SRCALPHA, 0);
SDL_BlitSurface(ecran1, NULL, ecran, &positionEcran1);
SDL_BlitSurface(vaisseau1, NULL, ecran, &positionVaisseau1);
SDL_BlitSurface(mm,NULL,ecran,&positionMm);
SDL_BlitSurface(barre,NULL,ecran,&positionBarre);
SDL_BlitSurface(barre1,NULL,ecran,&positionBarre1);
SDL_BlitSurface(barre2,NULL,ecran,&positionBarre2);
SDL_BlitSurface(barre3,NULL,ecran,&positionBarre3);
SDL_BlitSurface(explo,NULL,ecran,&positionExplo);
tempsLaser1=SDL_GetTicks();//fonction tirer laser
if(tempsLaser1-tempsLaser2 >30)
{
positionLaser.y--;//position laser y-- (remonte)
if (positionLaser.y > 0 && positionLaser.x > 0)
{
SDL_SetColorKey(laser, SDL_SRCCOLORKEY, SDL_MapRGB(laser->format, 0, 0, 0));
SDL_BlitSurface(laser,NULL,ecran,&positionLaser);//blitte laser a sa nouvelle posittion
}
}
tempsActuel1 = SDL_GetTicks();
if (tempsActuel1 - tempsPrecedent1 > 10) /* Si 10 ms se sont écoulées depuis le dernier tour de boucle */
{
positionMm.y++; /* On bouge la météroite */
tempsPrecedent1 = tempsActuel1; /* Le temps "actuel" devient le temps "precedent" pour nos futurs calculs */
}
if(positionMm.y>=650)
{
const long MAXx = 600, MINx =1 ;// constante pour savoir quel sera la position de la météorite sur l'ecran en x
positionMm.x = (rand() % (MAXx - MINx + 1)) + MINx;//generation du nombre aléatoire
positionMm.y=0;
}
if(positionVaisseau1.y==positionMm.y)
{
positionBarre.x=800;
positionBarre.y=800;
positionBarre1.x=600;
positionBarre1.y=20;
jeu=1;
}
if((jeu==1)&&(positionVaisseau1.y==positionMm.y))
{
positionBarre1.x=800;
positionBarre1.y=800;
positionBarre2.x=600;
positionBarre2.y=20;
}
}
//libérer les mémoires de toutes les images
SDL_FreeSurface (vaisseau1);
SDL_FreeSurface(laser);
SDL_FreeSurface(barre);
SDL_FreeSurface(barre1);
SDL_FreeSurface(barre2);
SDL_FreeSurface(barre3);
SDL_FreeSurface (mm);
SDL_FreeSurface(explo);
SDL_Quit();
}