begin process at 2012 05 27 13:46:43
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > [C] BALLES REBONDISSANTES EN SDL

[C] BALLES REBONDISSANTES EN SDL


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :SDL, Balle rebondissante, fonctions, carrer Niveau :Débutant Date de création :15/05/2010 Date de mise à jour :15/05/2010 09:25:19 Vu :3 079

Auteur : smartties

Ecrire un message privé
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

Source avec Zip Source avec une capture CASSE BRIQUE [C] [SDL]
Source avec une capture [C]BOUTON EN SDL
Source avec une capture CONVERTISSEUR

 Sources de la même categorie

Source avec Zip KISIEL CD INFO DRIVE par kisiel0147852
Source avec une capture SUPPRESSION DES REDONDANCES DE FICHIERS par cyberntique
Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture JEUX SERPENT par antho974
Source avec Zip Source avec une capture PENDU EN SDL par Damsou91
Source avec Zip Source avec une capture [C++] CLASSE DE GESTION DE FONCTIONS par pop70
Source avec Zip BIBLIOTHEQUE FONCTIONNELLE : OPÉRATIONS, COMPOSITION D'OBJET... par ordiman85
CASSE BRIQUE SDL MODIFICATION par Vardosh

Commentaires et avis

Commentaire de underprog le 16/05/2010 11:29:21

Salut,

tu peux simplifier un peu, dans la fonction rebond :

-------

if(posi.x<0 || posi.x>600 || posi.y<0 || posi.y>400){

     switch(*deplacement){

          // Traitement

     }        
}

-------


a+

 Ajouter un commentaire


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 &lt;SDL/SDL.h&gt;int main(int argc,char *argv[]){      


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,716 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales