Accueil > > > [C] BALLES REBONDISSANTES EN SDL
[C] BALLES REBONDISSANTES EN SDL
Information sur la source
Description
Voici un code que j'ai fait récemment.Mais le code est imcomplet(certaines variable ne sont pas utlisés ) je poste ici pour savoir si mon programme est bien codé. (enfaite ce son des carrers rebondissants et non des balles je me suis gourer dans le titre)
Source
- #include <stdlib.h>
- #include <stdio.h>
- #include <SDL/SDL.h>
-
- enum direction // enumeration de variable qui permerttront de connaitre la direction facilement au lieu d'ulitiliser des chiffres
- { // 0 1 2 3 4 5 6 7
- hautgauche, gauche, basgauche, bas, basdroit, droite, hautdroit, haut
- };
-
- void bouger(SDL_Surface *ecran, SDL_Surface *carrer, SDL_Rect* Position, int deplacement) //Fonction qui sert a faire bouger un carrer
- {
- static int couleura = 0, couleurb = 255, couleurc = 112; //creation de variable de type static. Ces type iniatilise la variable une sueul fois dans tt le programme
- //meme apres plusieur utilisation de la fonction.
- couleura++; //changement de couleur
- couleurb--; //changement de couleur
- couleurc++; //changement de couleur
-
- switch(deplacement) //traitement du déplacement
- {
- case hautgauche: //si deplacement = 0 (hautgauche)
- Position[0].x--;
- Position[0].y--;
- break;
- case gauche: //si deplacement = 1 (gauche)
- Position[0].x--;
- break;
- case basgauche: //si deplacement = 2 (hautgauche)
- Position[0].x--;
- Position[0].y++;
- break;
- case bas: //si deplacement = 3 (bas)
- Position[0].y++;
- break;
- case basdroit: //si deplacement = 4 (basdroit)
- Position[0].x++;
- Position[0].y++;
- break;
- case droite: //si deplacement = 5 (droite)
- Position[0].x++;
- break;
- case hautdroit: //si deplacement = 6 (hautdroit)
- Position[0].x++;
- Position[0].y--;
- break;
- case haut: //si deplacement = 7 (haut)
- Position[0].y--;
- break;
- }
- SDL_FillRect(carrer, NULL, SDL_MapRGB(ecran->format, couleura, couleurb, couleurc)); //colorisation du carrer
- SDL_BlitSurface(carrer, NULL, ecran, &Position[0]); //le carrer est coller sur la surface
-
- }
-
- int rebond(SDL_Rect posi, int* deplacement) //fonction permettent de rebondir si elle depace les contour de la fenetre
- {
-
- if(posi.y == 0 )
- {
- if(*deplacement == hautgauche) // pas besoin d'expliquer
- *deplacement = basgauche;
- if(*deplacement == hautdroit) // je pense que vous
- *deplacement = basdroit;
- } // comprendrez facilement
-
- if(posi.x == 0 )
- {
- if(*deplacement == basgauche)
- *deplacement = basdroit;
- if(*deplacement == hautgauche)
- *deplacement = hautdroit;
- }
-
- if(posi.y > 440 )
- {
- if(*deplacement == basdroit)
- *deplacement = hautdroit;
- if(*deplacement == basgauche)
- *deplacement = hautgauche;
- }
-
- if(posi.x > 600)
- {
- if(*deplacement == basgauche)
- *deplacement = hautgauche;
- if(*deplacement == hautdroit)
- *deplacement = hautgauche;
- if(*deplacement == basdroit)
- *deplacement = basgauche;
- }
-
- }
-
- int main ( int argc, char** argv )
- {
- int deplacement = hautgauche, boucle = 1, deplacement2 = basdroit; // creation de trois variable de type int
- SDL_Init(SDL_INIT_VIDEO); //démarrage de la SDL
- SDL_Surface *ecran = NULL, *carrer = NULL, *carrer2 = NULL; //iniatialisation de 3 surfaces
- SDL_Rect position, position2; //iniatilisation de deux varial de type SDL_Rect qui serviront a position les carrer dans la fenetre
- SDL_Event event; //creation de l'event
- position.x = 640/2; //position du carrer a la verticale
- position.y = 480/2; //position du carrer a l'horizontale
- position2.x = 640/2; //position du carrer2 a la verticale
- position2.y = 480/2; //position du carrer2 a l'horizontale
-
- ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE); //creation de la surface principale 640*480
- carrer = SDL_CreateRGBSurface(SDL_HWSURFACE, 40, 40, 32, 0, 0, 0, 0); //creation de la surface du carrer 40*40
- carrer2= SDL_CreateRGBSurface(SDL_HWSURFACE, 40, 40, 32, 0, 0, 0, 0); //creation de la surface du carrer2 40*40
- SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); //colorie un carré blanc a l'ecran
- SDL_WM_SetCaption("Rebond de Carrers a martin !", NULL); //ajout du titre a la fenetre
- SDL_WM_SetIcon(SDL_LoadBMP("Icon.bmp"), NULL); //ajout d'un icone a la fenetre
-
- while(boucle)
- {
- rebond(position, &deplacement); // fait rebondir la balle si elle touche les extremités de la fenetre
- rebond(position2, &deplacement2); // fait rebondir la balle si elle touche les extremités de la fenetre (de la deuxieme balle)
- SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); //efface de l'ecran la balle precedente
- bouger(ecran, carrer, &position, deplacement); //la balle 1 est dessinée et est copiée sur la surface principal "ecran"
- bouger(ecran, carrer2, &position2, deplacement2); //la balle 2 est dessinée et est copiée sur la surface principal "ecran"
- SDL_Flip(ecran); //mise a jour de l'ecran et affichage des balles
- SDL_Delay(2); //attente de 2 milli seconde
-
- SDL_PollEvent(&event); //attente de l'event, mais si il ne recoit pas l'event la boucle continue, contrairement a "SDL_WaiktEvent"
- switch(event.type) //traitement de l'event
- {
- case SDL_QUIT: //permet de quitter la fenetre si on clic sur la croix
- boucle = 0; //arret de la boucle si on clic
- break;
-
- case SDL_KEYDOWN: // Permet d'arreter
- SDL_WaitEvent(&event); // le mouvement des
- switch(event.type) // deux balles
- { // en appuyant sur
- case SDL_KEYUP: // une touche du
- boucle = 0; // clavier. Le mouve
- break; // -ment reprendra
- } // en relachant la
- boucle = 1; // touche.
- break; //
-
- }
-
- }
- SDL_FreeSurface(carrer); //libération
- SDL_FreeSurface(carrer2); //des trois
- SDL_FreeSurface(ecran); //surfaces
- SDL_Quit(); //quitte la SDL
- }
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
enum direction // enumeration de variable qui permerttront de connaitre la direction facilement au lieu d'ulitiliser des chiffres
{ // 0 1 2 3 4 5 6 7
hautgauche, gauche, basgauche, bas, basdroit, droite, hautdroit, haut
};
void bouger(SDL_Surface *ecran, SDL_Surface *carrer, SDL_Rect* Position, int deplacement) //Fonction qui sert a faire bouger un carrer
{
static int couleura = 0, couleurb = 255, couleurc = 112; //creation de variable de type static. Ces type iniatilise la variable une sueul fois dans tt le programme
//meme apres plusieur utilisation de la fonction.
couleura++; //changement de couleur
couleurb--; //changement de couleur
couleurc++; //changement de couleur
switch(deplacement) //traitement du déplacement
{
case hautgauche: //si deplacement = 0 (hautgauche)
Position[0].x--;
Position[0].y--;
break;
case gauche: //si deplacement = 1 (gauche)
Position[0].x--;
break;
case basgauche: //si deplacement = 2 (hautgauche)
Position[0].x--;
Position[0].y++;
break;
case bas: //si deplacement = 3 (bas)
Position[0].y++;
break;
case basdroit: //si deplacement = 4 (basdroit)
Position[0].x++;
Position[0].y++;
break;
case droite: //si deplacement = 5 (droite)
Position[0].x++;
break;
case hautdroit: //si deplacement = 6 (hautdroit)
Position[0].x++;
Position[0].y--;
break;
case haut: //si deplacement = 7 (haut)
Position[0].y--;
break;
}
SDL_FillRect(carrer, NULL, SDL_MapRGB(ecran->format, couleura, couleurb, couleurc)); //colorisation du carrer
SDL_BlitSurface(carrer, NULL, ecran, &Position[0]); //le carrer est coller sur la surface
}
int rebond(SDL_Rect posi, int* deplacement) //fonction permettent de rebondir si elle depace les contour de la fenetre
{
if(posi.y == 0 )
{
if(*deplacement == hautgauche) // pas besoin d'expliquer
*deplacement = basgauche;
if(*deplacement == hautdroit) // je pense que vous
*deplacement = basdroit;
} // comprendrez facilement
if(posi.x == 0 )
{
if(*deplacement == basgauche)
*deplacement = basdroit;
if(*deplacement == hautgauche)
*deplacement = hautdroit;
}
if(posi.y > 440 )
{
if(*deplacement == basdroit)
*deplacement = hautdroit;
if(*deplacement == basgauche)
*deplacement = hautgauche;
}
if(posi.x > 600)
{
if(*deplacement == basgauche)
*deplacement = hautgauche;
if(*deplacement == hautdroit)
*deplacement = hautgauche;
if(*deplacement == basdroit)
*deplacement = basgauche;
}
}
int main ( int argc, char** argv )
{
int deplacement = hautgauche, boucle = 1, deplacement2 = basdroit; // creation de trois variable de type int
SDL_Init(SDL_INIT_VIDEO); //démarrage de la SDL
SDL_Surface *ecran = NULL, *carrer = NULL, *carrer2 = NULL; //iniatialisation de 3 surfaces
SDL_Rect position, position2; //iniatilisation de deux varial de type SDL_Rect qui serviront a position les carrer dans la fenetre
SDL_Event event; //creation de l'event
position.x = 640/2; //position du carrer a la verticale
position.y = 480/2; //position du carrer a l'horizontale
position2.x = 640/2; //position du carrer2 a la verticale
position2.y = 480/2; //position du carrer2 a l'horizontale
ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE); //creation de la surface principale 640*480
carrer = SDL_CreateRGBSurface(SDL_HWSURFACE, 40, 40, 32, 0, 0, 0, 0); //creation de la surface du carrer 40*40
carrer2= SDL_CreateRGBSurface(SDL_HWSURFACE, 40, 40, 32, 0, 0, 0, 0); //creation de la surface du carrer2 40*40
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); //colorie un carré blanc a l'ecran
SDL_WM_SetCaption("Rebond de Carrers a martin !", NULL); //ajout du titre a la fenetre
SDL_WM_SetIcon(SDL_LoadBMP("Icon.bmp"), NULL); //ajout d'un icone a la fenetre
while(boucle)
{
rebond(position, &deplacement); // fait rebondir la balle si elle touche les extremités de la fenetre
rebond(position2, &deplacement2); // fait rebondir la balle si elle touche les extremités de la fenetre (de la deuxieme balle)
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); //efface de l'ecran la balle precedente
bouger(ecran, carrer, &position, deplacement); //la balle 1 est dessinée et est copiée sur la surface principal "ecran"
bouger(ecran, carrer2, &position2, deplacement2); //la balle 2 est dessinée et est copiée sur la surface principal "ecran"
SDL_Flip(ecran); //mise a jour de l'ecran et affichage des balles
SDL_Delay(2); //attente de 2 milli seconde
SDL_PollEvent(&event); //attente de l'event, mais si il ne recoit pas l'event la boucle continue, contrairement a "SDL_WaiktEvent"
switch(event.type) //traitement de l'event
{
case SDL_QUIT: //permet de quitter la fenetre si on clic sur la croix
boucle = 0; //arret de la boucle si on clic
break;
case SDL_KEYDOWN: // Permet d'arreter
SDL_WaitEvent(&event); // le mouvement des
switch(event.type) // deux balles
{ // en appuyant sur
case SDL_KEYUP: // une touche du
boucle = 0; // clavier. Le mouve
break; // -ment reprendra
} // en relachant la
boucle = 1; // touche.
break; //
}
}
SDL_FreeSurface(carrer); //libération
SDL_FreeSurface(carrer2); //des trois
SDL_FreeSurface(ecran); //surfaces
SDL_Quit(); //quitte la SDL
}
Conclusion
voila j'espère que vous pourrez m'aider a améliorer mon code. bon comme je peut pas extraire mon projet en .zip tenez : (pour ceux qui on la flemme de compiler mon code)
http://www.megaupload.com/?d=82JCRLSD ou http://rapidshare.com/files/387515877/sdl-17.rar.h tml
Historique
- 15 mai 2010 09:25:19 :
- mise a jour
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
SDL - cherche aide.... [ par WormsParty ]
Hello !voilà je débute avec la librairie SDL avec DevC++.Je voulais savoir si quelqu'un pourrait me dire tout ce qui doit être déclaré et utilisé comm
Directx + SDL [ par seb2086 ]
Bonjour,J'aurais voulu savoir si on pouvais utiliser SDL pour creer la fenêtre principale et directx pour afficher un objet dans cette fenêtre ?Car en
Lecture fichier impossible avec SDL [ par CCJ ]
Hello.j'utilise SDL pour me faire un petit jeu 2D. Seulement je recontre actuellement un petit probleme. Il semblerait en effet qu'il bloque l'utilisa
programmation d'1 jeu [ par rannou_hp ]
saluten fait je viens de m'inscrire et j'etudie dans une écoled'info.bref on me demande de programmer un jeu"motus" en turbo c,j'ai trouvé le code sur
[SDL]Un jeu de dames , le jeu se ferme tout seul [ par gottfried852 ]
Bonjour, Je suis en train de faire un jeu de dames en C , avec la SDL. Mais lorsque je lance mon programme , et que j'entre les coordonnees du pio
probleme SDL [ par franckq ]
bonjour,depuis que je commence la SDL, j'ai un probleme. Au lancement de mon build, j'ai ceci:Il est dit ceci dans le log:
Spécialisation template et fonctions inline [ par Samaths ]
Bonjour à tous!Je suis nouveau sur le forum, mais je programme en C++ depuis quelques temps déjà (3 ans). Dans le cadre d'un projet (niveau universita
problème avec SDL [ par opaf20 ]
j'ai suivi les instructions pour installer SDL mais il y a toujours un problème.J'ai compilé un code ki m mark o erreurs et par la suite lors de l'exe
Intégration DLL Csharp dans projet C++ [ par swyms ]
bonjour à tous!Voila, j'ai une application développé en C++ avec visual studio 2002.Aujourd'hui, on me demande d'utiliser une DLL fait en CSHARP pour
Probleme SDL [ par agent 047 ]
Problême: impossible de créer un éxecutable à partir de gcc et de l'en-tete SDL.hex:#include <SDL/SDL.h>int main(int argc,char *argv[]){
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MATRICE TEMPLATEMATRICE TEMPLATE par hjr2610
Cliquez pour lire la suite par hjr2610 RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|