|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
PONG EN SDL
Information sur la source
Description
Voila, c'est mon deuxieme petit projet avec la sdl.C'est un pong mais qui a un petit bu,je vous laisse le decouvrir.Il peut aussi servir de base (gestion des touches,affichages....)
le zip est trop gros donc je l'ai mis sur mon site.
http://membres.lycos.fr/jul3838/downloads.php et cliquer sur pong.
Source
- #include <stdlib.h>
- #include <SDL/sdl.h>
- #include <SDL/SDL_TTF.h>
- #include <stdio.h>
- #include <fmod.h>
-
- /*variables des positions raquettes et balle*/
- SDL_Rect rballe={512,380,0,0};
- SDL_Rect rraquet1={2,350,0,0};
- SDL_Rect rraquet2={1000,350,0,0};
- SDL_Rect intr;
- SDL_Rect fleche={290,600,0,0};
- SDL_Rect fin1a,fin2b;
-
- /*variables score et sens balle,debut de l'intro et autres....*/
- int sens1=0, sens2=0, scorep=0, scoreo=0, vit=1,game=1,introdu=1,fini,refini=1;
-
- /*les sons*/
- FMUSIC_MODULE *son_mid;
-
- /*pour les booléens*/
- typedef enum{false,true}bool;
-
- /* Les fonctions*/
- void collision();
- void loadimage();
- void affiche();
- void deplacement();
- void score();
- void ordinateur();
- void joueur();
- void jouintro();
- void introd();
-
- /*liste des images*/
- SDL_Surface *Screen, *firstscreen, *balle, *raquette1, *raquette2,*intro, *flech, *fin1, *fin2;
-
- TTF_Font *font;
- /* les events*/
- SDL_Event event;
-
- /* Notre belle fonction main*/
- int main(int argc, char *argv[])
- {
- initialisation();
- loadimage();
- introd();
- FMUSIC_PlaySong(son_mid);
- fini=1; /*variables pour le score,defini si continue*/
-
- while(game!=0) /* boucle principale*/
- {
- ordinateur();
- joueur();
- collision();
- score();
- deplacement();
- affiche();
- continuer();
- SDL_Flip(Screen);
- }
-
- FMUSIC_StopSong(son_mid);
- SDL_Quit;
- return 0;
- }
-
- void initialisation() /* petite initialisation de la sdl */
- { FSOUND_Init(44100, 32, 0);
- SDL_Init(SDL_INIT_VIDEO);
- Screen=SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
- SDL_ShowCursor(0);
- SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL+1);
- SDL_Delay(100);
- }
-
- void loadimage()/*charge les images + son*/
- {
- intro=SDL_LoadBMP("intro.bmp");
- flech=SDL_LoadBMP("fleche.bmp");
- balle=SDL_LoadBMP("balle.bmp");
- raquette1=SDL_LoadBMP("raquet1.bmp");
- raquette2=SDL_LoadBMP("raquet2.bmp");
- firstscreen=SDL_LoadBMP("scene.bmp");
- fin1=SDL_LoadBMP("ga1.bmp");
- fin2=SDL_LoadBMP("ga2.bmp");
- SDL_SetColorKey(balle,SDL_SRCCOLORKEY,SDL_MapRGB(balle->format,255,0,0));
- /*pour mettre le fond de la balle transparent donc plus de rouge*/
-
- son_mid=FMUSIC_LoadSong("son_mid.mid");
- SDL_Delay(500);
- }
-
-
-
-
-
- void joueur() /* la cest la commande du joueur + Choix du jeu ds l'intro*/
- {
-
-
- if (SDL_PollEvent(&event))
- {
- switch(event.type)
- {
-
- case SDL_KEYDOWN:
- {
- Uint8 *keys = SDL_GetKeyState(NULL);
- if (keys[SDLK_UP])
- {
- if (introdu!=0)
- {
- fleche.y=fleche.y-50; /*je pense que vous l'avez compris*/
- if(fleche.y<600)
- fleche.y=600;
- }
- rraquet1.y=rraquet1.y-30;
- if (rraquet1.y<0)
- rraquet1.y=0;
- }
- if (keys[SDLK_DOWN])
- {
- if (introdu!=0)
- {
- fleche.y=fleche.y+50; /*je pense que vous l'avez compris*/
- if(fleche.y>650)
- fleche.y=650;
- }
- rraquet1.y=rraquet1.y+30;
- if (rraquet1.y>600)
- rraquet1.y=600;
- }
- if(keys[SDLK_ESCAPE]) /* quitte proprement la sdl*/
- {
- game=0;
- introdu=0;
- refini=0;
- }
- if(keys[SDLK_RETURN])
- {
- if(fleche.y==600) /* depla des fleches pr l'intro*/
- {
- game=1;
- introdu=0;
- }
- if(fleche.y==650) /* depla des fleches pr l'intro*/
- {
- introdu=0;
- game=0;
- }
- if(fini!=0) /* la variables qui va permettre de continuer si score>10*/
- {
- refini=0;
- }
- }
- }
- break;
- }
- }
-
- }
-
- void ordinateur()
- { /* l'ordinateur se deplace selon les coordonnées de la balle*/
- if(rballe.y>rraquet2.y)
- {
- rraquet2.y=rraquet2.y+40;
- if (rraquet2.y>600)
- rraquet2.y=600;
- }
- if(rballe.y<rraquet2.y)
- {
- rraquet2.y=rraquet2.y-40;
- if (rraquet2.y<0)
- rraquet2.y=0;
- }
-
- }
-
- void deplacement()
- {/* different sens de la balle*/
- if (sens1==0)
- { rballe.x=rballe.x-(3*vit);
-
- }
- if(sens1==1)
- {
- rballe.x=rballe.x+(3*vit);
- }
- if (sens2==0)
- {
- rballe.y=rballe.y-(3*vit);
- }
- if(sens2==1)
- {
- rballe.y=rballe.y+(3*vit);
- }
- }
-
- void collision()
- {/*on gere les collisions avec le mur et les raquettes,on change donc le sens de balle*/
- if(rballe.y<=0 && rballe.x>512)
- {vit=vit+1;
- sens2=1;
- sens1=0;
-
- }
- if(rballe.y<=0 && rballe.x<512)
- {vit=vit+1;
- sens1=0;
- sens2=1;
-
- }
- if(rballe.y>=720 && rballe.x<512)
- {vit=vit+1;
- sens1=1;
- sens2=0 ;
-
- }
- if(rballe.y>=720 && rballe.x>512)
- {vit=vit+1;
- sens2=0;
- sens1=1;
-
- } /* merci ptival de m'avoir aidé sur les collisions balle/raquettes */
- if((rballe.x + rballe.w) >= rraquet1.x
- &&
- (rballe.x) <= (rraquet1.x + rraquet1.w)
- &&
- (rballe.y + rballe.h) >= rraquet1.y
- &&
- (rballe.y) <= (rraquet1.y + rraquet1.h)
- )
- {vit=vit+1;
- sens1=1 ;
-
-
- }
- if((rballe.x + rballe.w) >= rraquet2.x
- &&
- (rballe.x) <= (rraquet2.x + rraquet2.w)
- &&
- (rballe.y + rballe.h) >= rraquet2.y
- &&
- (rballe.y) <= (rraquet2.y + rraquet2.h))
- {vit=vit+1;
- sens1=0;
- sens2=0;
-
-
- }
-
- }
- void score()
- {
- if (rballe.x<=0) /*si le joueur ne rattrape pas la balle on remet a O*/
- {
- scoreo=scoreo+1;
-
- rballe.y=380;
- rballe.x=512;
- vit=1;
- sens1=0;
- sens2=0;
- }
- if(rballe.x>=1024) /*si l'ordi ne ratttrape pas la balle*/
- {
- scorep=scorep+1;
- rballe.y=380;
- rballe.x=512;
- vit=1;
- sens1=1;
- sens2=1;
- }
-
-
- }
-
- void affiche()
- {/*réaffiche les positions*/
- SDL_BlitSurface(firstscreen,NULL,Screen,NULL);
- SDL_BlitSurface(balle,NULL,Screen,&rballe);
- SDL_BlitSurface(raquette1,NULL,Screen,&rraquet1);
- SDL_BlitSurface(raquette2,NULL,Screen,&rraquet2);
- }
-
-
- void introd() /* l'intro.....*/
- {
- while(introdu!=0)
- {
-
- joueur();
-
- SDL_BlitSurface(intro,NULL,Screen,&intr);
- SDL_BlitSurface(flech,NULL,Screen,&fleche);
- SDL_Flip(Screen);
- }
- }
-
- void continuer()
- {
- if(scoreo>9)
- {
- while (refini!=0)
- {
- joueur();
- SDL_BlitSurface(fin1,NULL,Screen,&fin1a);
- SDL_Flip(Screen);
- }
- rballe.x=512;
- rballe.y=380;
- rraquet1.x=2;
- rraquet1.y=350;
- rraquet2.x=1000;
- rraquet2.y=350;
- sens1=1;
- sens2=1;
- scoreo=0;
- scorep=0;
- vit=1;
- refini=1;
- SDL_Delay(50);
- }
- if(scorep>9)
- {
- while (refini!=0)
- {
- joueur();
- SDL_BlitSurface(fin2,NULL,Screen,&fin2b);
- SDL_Flip(Screen);
- }
- rballe.x=512;
- rballe.y=380;
- rraquet1.x=2;
- rraquet1.y=350;
- rraquet2.x=1000;
- rraquet2.y=350;
- sens1=1;
- sens2=1;
- scoreo=0;
- scorep=0;
- vit=1;
- refini=1;
- SDL_Delay(50);
- }
- }
-
#include <stdlib.h>
#include <SDL/sdl.h>
#include <SDL/SDL_TTF.h>
#include <stdio.h>
#include <fmod.h>
/*variables des positions raquettes et balle*/
SDL_Rect rballe={512,380,0,0};
SDL_Rect rraquet1={2,350,0,0};
SDL_Rect rraquet2={1000,350,0,0};
SDL_Rect intr;
SDL_Rect fleche={290,600,0,0};
SDL_Rect fin1a,fin2b;
/*variables score et sens balle,debut de l'intro et autres....*/
int sens1=0, sens2=0, scorep=0, scoreo=0, vit=1,game=1,introdu=1,fini,refini=1;
/*les sons*/
FMUSIC_MODULE *son_mid;
/*pour les booléens*/
typedef enum{false,true}bool;
/* Les fonctions*/
void collision();
void loadimage();
void affiche();
void deplacement();
void score();
void ordinateur();
void joueur();
void jouintro();
void introd();
/*liste des images*/
SDL_Surface *Screen, *firstscreen, *balle, *raquette1, *raquette2,*intro, *flech, *fin1, *fin2;
TTF_Font *font;
/* les events*/
SDL_Event event;
/* Notre belle fonction main*/
int main(int argc, char *argv[])
{
initialisation();
loadimage();
introd();
FMUSIC_PlaySong(son_mid);
fini=1; /*variables pour le score,defini si continue*/
while(game!=0) /* boucle principale*/
{
ordinateur();
joueur();
collision();
score();
deplacement();
affiche();
continuer();
SDL_Flip(Screen);
}
FMUSIC_StopSong(son_mid);
SDL_Quit;
return 0;
}
void initialisation() /* petite initialisation de la sdl */
{ FSOUND_Init(44100, 32, 0);
SDL_Init(SDL_INIT_VIDEO);
Screen=SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL+1);
SDL_Delay(100);
}
void loadimage()/*charge les images + son*/
{
intro=SDL_LoadBMP("intro.bmp");
flech=SDL_LoadBMP("fleche.bmp");
balle=SDL_LoadBMP("balle.bmp");
raquette1=SDL_LoadBMP("raquet1.bmp");
raquette2=SDL_LoadBMP("raquet2.bmp");
firstscreen=SDL_LoadBMP("scene.bmp");
fin1=SDL_LoadBMP("ga1.bmp");
fin2=SDL_LoadBMP("ga2.bmp");
SDL_SetColorKey(balle,SDL_SRCCOLORKEY,SDL_MapRGB(balle->format,255,0,0));
/*pour mettre le fond de la balle transparent donc plus de rouge*/
son_mid=FMUSIC_LoadSong("son_mid.mid");
SDL_Delay(500);
}
void joueur() /* la cest la commande du joueur + Choix du jeu ds l'intro*/
{
if (SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
{
Uint8 *keys = SDL_GetKeyState(NULL);
if (keys[SDLK_UP])
{
if (introdu!=0)
{
fleche.y=fleche.y-50; /*je pense que vous l'avez compris*/
if(fleche.y<600)
fleche.y=600;
}
rraquet1.y=rraquet1.y-30;
if (rraquet1.y<0)
rraquet1.y=0;
}
if (keys[SDLK_DOWN])
{
if (introdu!=0)
{
fleche.y=fleche.y+50; /*je pense que vous l'avez compris*/
if(fleche.y>650)
fleche.y=650;
}
rraquet1.y=rraquet1.y+30;
if (rraquet1.y>600)
rraquet1.y=600;
}
if(keys[SDLK_ESCAPE]) /* quitte proprement la sdl*/
{
game=0;
introdu=0;
refini=0;
}
if(keys[SDLK_RETURN])
{
if(fleche.y==600) /* depla des fleches pr l'intro*/
{
game=1;
introdu=0;
}
if(fleche.y==650) /* depla des fleches pr l'intro*/
{
introdu=0;
game=0;
}
if(fini!=0) /* la variables qui va permettre de continuer si score>10*/
{
refini=0;
}
}
}
break;
}
}
}
void ordinateur()
{ /* l'ordinateur se deplace selon les coordonnées de la balle*/
if(rballe.y>rraquet2.y)
{
rraquet2.y=rraquet2.y+40;
if (rraquet2.y>600)
rraquet2.y=600;
}
if(rballe.y<rraquet2.y)
{
rraquet2.y=rraquet2.y-40;
if (rraquet2.y<0)
rraquet2.y=0;
}
}
void deplacement()
{/* different sens de la balle*/
if (sens1==0)
{ rballe.x=rballe.x-(3*vit);
}
if(sens1==1)
{
rballe.x=rballe.x+(3*vit);
}
if (sens2==0)
{
rballe.y=rballe.y-(3*vit);
}
if(sens2==1)
{
rballe.y=rballe.y+(3*vit);
}
}
void collision()
{/*on gere les collisions avec le mur et les raquettes,on change donc le sens de balle*/
if(rballe.y<=0 && rballe.x>512)
{vit=vit+1;
sens2=1;
sens1=0;
}
if(rballe.y<=0 && rballe.x<512)
{vit=vit+1;
sens1=0;
sens2=1;
}
if(rballe.y>=720 && rballe.x<512)
{vit=vit+1;
sens1=1;
sens2=0 ;
}
if(rballe.y>=720 && rballe.x>512)
{vit=vit+1;
sens2=0;
sens1=1;
} /* merci ptival de m'avoir aidé sur les collisions balle/raquettes */
if((rballe.x + rballe.w) >= rraquet1.x
&&
(rballe.x) <= (rraquet1.x + rraquet1.w)
&&
(rballe.y + rballe.h) >= rraquet1.y
&&
(rballe.y) <= (rraquet1.y + rraquet1.h)
)
{vit=vit+1;
sens1=1 ;
}
if((rballe.x + rballe.w) >= rraquet2.x
&&
(rballe.x) <= (rraquet2.x + rraquet2.w)
&&
(rballe.y + rballe.h) >= rraquet2.y
&&
(rballe.y) <= (rraquet2.y + rraquet2.h))
{vit=vit+1;
sens1=0;
sens2=0;
}
}
void score()
{
if (rballe.x<=0) /*si le joueur ne rattrape pas la balle on remet a O*/
{
scoreo=scoreo+1;
rballe.y=380;
rballe.x=512;
vit=1;
sens1=0;
sens2=0;
}
if(rballe.x>=1024) /*si l'ordi ne ratttrape pas la balle*/
{
scorep=scorep+1;
rballe.y=380;
rballe.x=512;
vit=1;
sens1=1;
sens2=1;
}
}
void affiche()
{/*réaffiche les positions*/
SDL_BlitSurface(firstscreen,NULL,Screen,NULL);
SDL_BlitSurface(balle,NULL,Screen,&rballe);
SDL_BlitSurface(raquette1,NULL,Screen,&rraquet1);
SDL_BlitSurface(raquette2,NULL,Screen,&rraquet2);
}
void introd() /* l'intro.....*/
{
while(introdu!=0)
{
joueur();
SDL_BlitSurface(intro,NULL,Screen,&intr);
SDL_BlitSurface(flech,NULL,Screen,&fleche);
SDL_Flip(Screen);
}
}
void continuer()
{
if(scoreo>9)
{
while (refini!=0)
{
joueur();
SDL_BlitSurface(fin1,NULL,Screen,&fin1a);
SDL_Flip(Screen);
}
rballe.x=512;
rballe.y=380;
rraquet1.x=2;
rraquet1.y=350;
rraquet2.x=1000;
rraquet2.y=350;
sens1=1;
sens2=1;
scoreo=0;
scorep=0;
vit=1;
refini=1;
SDL_Delay(50);
}
if(scorep>9)
{
while (refini!=0)
{
joueur();
SDL_BlitSurface(fin2,NULL,Screen,&fin2b);
SDL_Flip(Screen);
}
rballe.x=512;
rballe.y=380;
rraquet1.x=2;
rraquet1.y=350;
rraquet2.x=1000;
rraquet2.y=350;
sens1=1;
sens2=1;
scoreo=0;
scorep=0;
vit=1;
refini=1;
SDL_Delay(50);
}
}
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Comparez les prix Nouvelle version
|