Partage
  • Partager sur Facebook
  • Partager sur Twitter

[EXERCICES]Langage C, en SDL

Des consignes précises

Sujet résolu
    11 août 2008 à 10:10:41

    J'ai récemment ouvert un topic sur des exercices en C. Mais les TP proposés étaient presque tous des projets. C'est pourquoi j'ouvre ce topic avec des règles précises.

    Ne postez pas d'exercices sans avoir lu les règles qui suivent!


    Sur quoi portent les exercices



    Sur ce topic, les exercices sont uniquement des exercices sur le langage C utilisant la SDL. Pas de C++ ici !
    Ces exercices ne seront pas "gros", c'est à dire que ce ne seront pas des projets mais des simples TP (du même genre que les TP fournit par M@theo21 dans son tutoriel sur le langage C.

    Quelles sont les règles



    Tout d'abbord, ce topic n'est pas un fourre tout!
    Si vous voulez postez un TP, il faut que celui ci soit parfaîtement expliquez et qu'il suive une présantation précise (ci dessous) :

    <titre1>Titre du TP</titre1>
    
    <titre2><souligne>Quand</souligne>: </titre2> Lieu où ce TP pourrais être placé si il était dans le tutoriel de M@téo sur le C (pour voir le niveau).
    <titre2><souligne>Sujet principal</souligne></titre2> : Sur quoi porte ce sujet (1 ou 2 lignes).
    <titre2><souligne>Consignes</souligne></titre2>: Consignes TRES précises. 
    <titre2><souligne>Notions travaillées</souligne></titre2>: Quelles sont les notions travaillée (exemple : pointeurs et conditions)
    <titre2>Réponse</titre2> :
    <secret>Les réponses sont à placées dans une balise "secret!"</secret>
    <titre2><souligne>Améliorations possibles</souligne></titre2> : Facultatif.
    


    Sur la ligne Quand, vous devez mettre ce TP ce situe à quel chapitre du tutoriel sur le langage C.

    Les repères:



    1. Avant l'apprentissage de SDL_image
    2. Avant la gestion des événements
    3. Avant le Mario Sokoban (avec la gestion des événements)
    4. Après le Mario Sokoban (maîtrise des collisioins etc...)
    5. Après la gestion du temps
    6. Après la gestion du temps et de SDL_ttf
    7. Tous chapitres


    Si votre TP possède des images hors du tutoriel de M@teo, il est préférable d'envoyer un zip du dossier. S'il requiert des images fournies par m@teo, il serait sympas de mettre un lien vers la page du tutoriel qui les met à téléchargement : )


    Les réponses



    Si vous postez un TP, vous êtes obligés de donner la solution au problème. Celle ci doit obligatoirement se situer dans une balises secret.
    Le code doit avoir été testé.

    N'utilisez aucune bibliothèque non travaillée avec M@teo21 lors de son tutoriel.


    Si votre TP suit bien ces règles, alors il sera mentionné dans le tableau ci dessous.

    Exercices



    Exercices/TP SDL
    Titre du TP Notions abordées Envoyé par Repère
    SDL Button
    maîtrise du C (niveau correct)/SDL/Pointeurs
    de fonction et méthodologie
    gogohan
    Tous chapitres
    Je dessine
    évènements, conditions, surfaces et pointeurs
    xavierh
    Avant Mario Sokoban
    (maîtrise évènement requise)
    Coordonnées de la souris
    Utilisation des évènements en SDL et de SDL_ttf
    aska990
    Après l'apprentissage de SDL_ttf
    Bal littéraire Timers, tableaux de char, affichage de texte danman
    Tous chapitres


    Si vous avez besoin d'aide à propos des exercices ou que vous voulez signaler une erreur ou même demander de l'aide à propos des améliorations, n'hésitez pas à poster votre message. Les TP sont fais pour vous entraîner!
    • Partager sur Facebook
    • Partager sur Twitter
      11 août 2008 à 10:41:37

      SDL button



      Quand:

      Partie 3 du tuto de C -> maitrise de la SDL requise

      Sujet principal

      : Création de boutons personnalisés

      Consignes

      : Réalisez une structure nommée SDL_Button, ainsi que des fonctions afin de s'occuper des boutons. Je n'impose rien, à vous de chercher.

      Notions travaillées

      : maîtrise du C (niveau correct)/SDL/Pointeurs de fonction et méthodologie ;)

      Aide

      :
      Pensez à mettre un pointeur de fonction dans la structure SDL_Button.
      exemple : (structure incomplète :p , à vous de chercher quoi rajouter)
      typedef struct _SDL_Button{
      
      SDL_Rect pos;
      SDL_Surface *surface_normale; /* On n'a pas le curseur sur le bouton */
      
      void *(*fonction)(void); /* le pointeur de fonction, renvoie une valeur de type (void *) */
      
      }SDL_Button;
      



      Réponse

      :

      Bon, j'ai retrouvé ma version de la lib.

      A ne lire qu'une fois votre lib entamée, ou une fois finie (ne lisez pas mes sources si vous n'avez aucun problème :p ).

      Télécharger les sources

      Améliorations possibles

      : Personnalisez le bouton en y mettant du texte (SDL_ttf :-° ), ou encore en chargeant une image ;)


      Bon courage à tous :D

      Edit: Je cherche ma correction :-° J'éditerai quand j'aurai retrouvé mon code :p
      Edit 2: Fait ;)

      Note: Pour mon code, j'ai crée une fonction pour écrire du texte plus rapidement sur une surface, mais je n'ai pas optimisé le code donc il est assez lourd si vous devez créer 30-40 boutons (ouverture et fermeture 30 fois des polices :lol: ). Aussi, je ne stocke pas la position du bouton dans ma structure car on n'a pas accès aux membres de la structure ;)
      • Partager sur Facebook
      • Partager sur Twitter
        11 août 2008 à 11:27:06

        Je dessine



        Quand:

        Avant Mario Sokoban (maîtrise de la gestion des évènements requise).

        Sujet principal

        : Dans ce TP, vous allez faire un petit jeu ou l'utilisateur pourra dessiner.

        Consignes

        :
        Ce TP vous ferra réaliser un programme dans lequel l'utilisateur pourra dessiner sur l'écran. Il dessinera des petits carrés de 3 pixel sur 3 pixel mais attention : il faut que l'on puisse modifier la couleur du carré.
        Voici les couleurs associées à la touche:
        • Touche 1: rgb = 0, 0, 0
        • 2 : rgb = 255, 0, 0
        • 3 : rgb = 0, 255, 0
        • 4 : rgb = 0, 0, 255
        • 5 : rgb = 255, 255, 0
        • 6 : rgb = 255, 134, 0
        • 7 : rgb = 100, 50, 0
        • 8 : rgb = 255, 91, 173
        • 9 : rgb = 53, 154, 255
        • 0 : rgb = 255, 255, 255


        En plus il faut que lorsque l'on fait flèche du haut, la taille du crayon (le carré) grossisse et qu'elle diminue lorsque l'on fait flèche du bas. Allez, Au boulot!


        Notions travaillées

        : évènements, conditions, surfaces et pointeurs

        Réponse

        :

        Secret (cliquez pour afficher)


        Solution:

        Je récapitulerais le code à la fin...

        Tout d'abbord on inclus SDL.h

        #include <SDL/SDL.h>
        

        Ensuite:
        SDL_Surface *ecran = NULL, *SurfaceColler, *pCouleur;  
        	SDL_Event event;
            	int continuer = 1;
        	long t = 3;
        	long r;
        	long g;
        	long b;
        	SDL_Rect position;
        
        	position.x = 0; 
        	position.y = 0;
        


        Explication :

        *ecran designe l'écran ^^.
        SurfaceColler est un pointeur qui designe quelle surface va être collée. Dans ce corrigé, il est inutil. Pourquoi l'avoir mis? Je vous expliquerais plus tard, lors des améliorations possibles.
        pCouleur c'est la surface que l'utilisateur collera pour dessiner.
        continuer est la variable qui, tant qu'elle est vraie, fera une boucle infinie.
        La suite, plus tard.

        Ensuite, on initialise la SDL et on ouvre une fenêtre avec un fond blanc.

        SDL_Init(SDL_INIT_VIDEO);
        
            ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF );
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
            SDL_WM_SetCaption("Je dessine", NULL);
        


        Puis on créé pCouleur qui n'est que un petit carré. Mais attention, pas n'importe comment. De sorte à ce que l'on puissent plus tard modifier sa taille et sa couleur. On va donc mettre la variable "t" pour sa taille, et "r", "g", "b" pour sa couleur.

        r = 0; g = 0; b = 0;
        	pCouleur = SDL_CreateRGBSurface(SDL_HWSURFACE, t, t, 32, 0, 0, 0, 0 );
        	SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        


        Comme je vous l'ai dit plus tôt, la surface que l'utilisateur dessinera est SurfaceColler qui va pointer sur pCouleur.

        SurfaceColler = pCouleur;
        


        Ensuite on met l'écran à jour et on active la répétition de touches.

        SDL_Flip(ecran);
        		
            	SDL_EnableKeyRepeat(10, 10);
        


        Maintenant vient la boucle des événements. Il faut ici dire que lorsque l'on tappe sur 0, 1, 2, 3, 4, ..., 9, alors pCouleur change de couleur et que lorsque l'on fait flèche du haut, pCouleur grossi (la valeur de "t" augmente) et que lorsque l'on fait flèche du bas, pCouleur diminue.

        while (continuer)
        		{
        			SDL_WaitEvent(&event);
        			switch(event.type)
        			{
        				case SDL_QUIT://Arrêt du programme
        					continuer = 0;
        				break;
        
        				case SDL_KEYDOWN:
        					
        					switch(event.key.keysym.sym)
        					{
        						case SDLK_ESCAPE://Effacement de l'écran
        							position.x = 0;
        							position.y = 0;
        							SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        						break;
        
        						case SDLK_1://couleur rgb de pCouleur : 0.0.0
        							r = 0;
        							g = 0;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        						
        						case SDLK_2://couleur rgb de pCouleur : 255.0.0
        							r = 255;
        							g = 0;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_3://0.255.0
        							r = 0;
        							g = 255;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_4://0.0.255
        							r = 0;
        							g = 0;
        							b = 255;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_5://255.255.0
        							r = 255;
        							g = 255;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_6://255.134.0
        							r = 255;
        							g = 134;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_7://100.50.0
        							r = 100;
        							g = 50;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_8://255.91.173
        							r = 255;
        							g = 91;
        							b = 173;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_9://53.154.255
        							r = 53;
        							g = 154;
        							b = 255;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_0://255.255.255
        							r = 255;
        							g = 255;
        							b = 255;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;			
        						
        						case SDLK_UP://taille de pCouleur plus grosse
        							t++;
        							switch(t)
        							{
        								case 479:
        									t = 478;
        								break;
        							}
        							pCouleur = SDL_CreateRGBSurface(SDL_HWSURFACE, t, t, 32, 0, 0, 0, 0);
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_DOWN:	//moins grosse									
        							t--;
        							switch(t)
        							{
        								case 0:
        									t = 1;
        								break;
        							}
        							pCouleur = SDL_CreateRGBSurface(SDL_HWSURFACE, t, t, 32, 0, 0, 0, 0);
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;	
        							
        						break;
        						
        						
        					}					
        
        				break;
        				
        				case SDL_MOUSEMOTION:
        					
        					switch(event.button.button)
        					{
        						case SDL_BUTTON_LEFT:
        
        							position.x = event.motion.x;
        							position.y = event.motion.y;
        							SDL_BlitSurface(SurfaceColler, NULL, ecran, &position);
        						break;
        					}
        				break;
        
        					break;
        	
        				case SDL_MOUSEBUTTONDOWN:
        					switch(event.button.button)
        					{
        						case SDL_BUTTON_LEFT:
        							position.x = event.motion.x;
        							position.y = event.motion.y;
        							SDL_BlitSurface(SurfaceColler, NULL, ecran, &position);
        						break;
        					}
        				break;
        			}
        
        			SDL_Flip(ecran);
        		}
        


        Vous avez remarqué que les valeurs de r g b change ainsi que t. D'ailleur, j'ai mis que lorsque t atteignait 0, celui-ci était = 1, comme ca, pas de t en dessous de 0 (si "t" à une valeur en dessous de 0, le programme plante, esseyez!). Et de même lorsqu'il arrive à 479.

        Ensuite on quitte :

        SDL_FreeSurface(pCouleur);
            SDL_Quit();
        


        Je récapitul le tout :

        #include <SDL/SDL.h>
        
        int main(int argc, char *argv[])
        {
            SDL_Surface *ecran = NULL, *SurfaceColler;
        	SDL_Surface *pCouleur;  
        	SDL_Event event;
            int continuer = 1;
        	long t = 3;
        	long r;
        	long g;
        	long b;
        	SDL_Rect position;
        
        	position.x = 0; 
        	position.y = 0;
        
            SDL_Init(SDL_INIT_VIDEO);
        
            ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF );
        	SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
            SDL_WM_SetCaption("Je dessine", NULL);
        
        	r = 0; g = 0; b = 0;
        	pCouleur = SDL_CreateRGBSurface(SDL_HWSURFACE, t, t, 32, 0, 0, 0, 0 );
        	SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        	
        	SurfaceColler = pCouleur; 
        
        	SDL_Flip(ecran);
        		
            SDL_EnableKeyRepeat(10, 10); 
        
        		while (continuer)
        		{
        			SDL_WaitEvent(&event);
        			switch(event.type)
        			{
        				case SDL_QUIT://Arrêt du programme
        					continuer = 0;
        				break;
        
        				case SDL_KEYDOWN:
        					
        					switch(event.key.keysym.sym)
        					{
        						case SDLK_ESCAPE://Effacement de l'écran
        							position.x = 0;
        							position.y = 0;
        							SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        						break;
        
        						case SDLK_1://couleur rgb de pCouleur : 0.0.0
        							r = 0;
        							g = 0;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        						
        						case SDLK_2://couleur rgb de pCouleur : 255.0.0
        							r = 255;
        							g = 0;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_3://0.255.0
        							r = 0;
        							g = 255;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_4://0.0.255
        							r = 0;
        							g = 0;
        							b = 255;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_5://255.255.0
        							r = 255;
        							g = 255;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_6://255.134.0
        							r = 255;
        							g = 134;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_7://100.50.0
        							r = 100;
        							g = 50;
        							b = 0;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_8://255.91.173
        							r = 255;
        							g = 91;
        							b = 173;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_9://53.154.255
        							r = 53;
        							g = 154;
        							b = 255;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_0://255.255.255
        							r = 255;
        							g = 255;
        							b = 255;
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;			
        						
        						case SDLK_UP://taille de pCouleur plus grosse
        							t++;
        							switch(t)
        							{
        								case 479:
        									t = 478;
        								break;
        							}
        							pCouleur = SDL_CreateRGBSurface(SDL_HWSURFACE, t, t, 32, 0, 0, 0, 0);
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;
        						break;
        
        						case SDLK_DOWN:	//moins grosse									
        							t--;
        							switch(t)
        							{
        								case 0:
        									t = 1;
        								break;
        							}
        							pCouleur = SDL_CreateRGBSurface(SDL_HWSURFACE, t, t, 32, 0, 0, 0, 0);
        							SDL_FillRect(pCouleur, NULL, SDL_MapRGB(ecran->format, r, g, b));
        							SurfaceColler = pCouleur;	
        							
        						break;
        						
        						
        					}					
        
        				break;
        				
        				case SDL_MOUSEMOTION:
        					
        					switch(event.button.button)
        					{
        						case SDL_BUTTON_LEFT:
        
        							position.x = event.motion.x;
        							position.y = event.motion.y;
        							SDL_BlitSurface(SurfaceColler, NULL, ecran, &position);
        						break;
        					}
        				break;
        
        					break;
        	
        				case SDL_MOUSEBUTTONDOWN:
        					switch(event.button.button)
        					{
        						case SDL_BUTTON_LEFT:
        							position.x = event.motion.x;
        							position.y = event.motion.y;
        							SDL_BlitSurface(SurfaceColler, NULL, ecran, &position);
        						break;
        					}
        				break;
        			}
        
        			SDL_Flip(ecran);
        		}
        
        	SDL_FreeSurface(pCouleur);
            SDL_Quit();
        
            return EXIT_SUCCESS;
        }
        





        Améliorations possibles

        : 1.Vous pouvez rajouter des dessins à ce programme : c'est la qu'intervient l'utilitée de SurfaceColler ! Imaginions que vous voulez un soleil, vous chargez le soleil et vous écrivez :
        SurfaceColler = soleil
        


        2. Pourquoi ne pas pouvoir changer la couleur de fond ;) .
        3. Faire un menu (avec des boutons) qui permet de séléctionner la couleur du crayon.

        Allez, Au boulot!

        • Partager sur Facebook
        • Partager sur Twitter
          12 août 2008 à 21:33:51

          S'il vous plaît, aidez nous et remplissez ce post d'exercices clairs et précis (je n'en demande pas trop quand même :p ).
          </span>

          Un petit UP ne fait pas de mal...

          Merci d'avance pour vos futures aides...


          Xavierh, débutant qui veut aidez des autres débutants...
          • Partager sur Facebook
          • Partager sur Twitter
            13 août 2008 à 7:39:26

            Coordonnées de la souris



            Quand:

            Après l'apprentissage de SDL_ttf

            Sujet principal:

            afficher les coordonnées de la souris à l'écran

            Consignes

            : Créez une fonction qui affiche les coordonnées actuelles de la souris dans un coin de l'écran. Aide : voici le prototype de la fonction :
            void afficherPositionSouris(int x, int y, SDL_Rect position, TTF_Font *police, SDL_Color couleur, SDL_Surface *ecran);
            


            Notions travaillées

            : Utilisation des évènements en SDL et de SDL_ttf.

            Réponse

            :
            #include <SDL/SDL.h>
            #include <SDL/SDL_ttf.h>
            #include <SDL/SDL_Image.h>
            
            void afficherPositionSouris(int x, int y, SDL_Rect position, TTF_Font *police, SDL_Color couleur, SDL_Surface *ecran);
            
            int main(int argc, char *argv[])
            {
                SDL_Surface *ecran = {NULL};
                SDL_Event event = {0};
                SDL_Rect position = {0};
                TTF_Font *police = NULL;
                SDL_Color couleur = {0, 255, 0};
            
                int continuer = 1;
            
                SDL_Init(SDL_INIT_VIDEO);
                TTF_Init();
            
            
                ecran = SDL_SetVideoMode(500, 500, 32, SDL_HWSURFACE);
                police = TTF_OpenFont("arial.ttf", 20);
            
            
                while(continuer)
                {
                    SDL_WaitEvent(&event);
            
                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            
                    switch(event.type)
                    {
                        case SDL_QUIT :
                        continuer = 0;
                        break;
            
                        case SDL_MOUSEMOTION :
                        afficherPositionSouris(event.motion.x, event.motion.y, position, police, couleur, ecran);
                        break;
            
                   }
                   SDL_Flip(ecran);
            
                }
            
                TTF_CloseFont(police);
                TTF_Quit();
                SDL_Quit();
            
                return EXIT_SUCCESS;
            }
            
            void afficherPositionSouris(int x, int y, SDL_Rect position, TTF_Font *police, SDL_Color couleur, SDL_Surface *ecran)
            {
                char chaine[100] = {0};
                SDL_Surface *texte = NULL;
            
                sprintf(chaine, "x : %d -- y : %d", x, y);
            
                texte = TTF_RenderText_Solid(police, chaine, couleur);
                SDL_BlitSurface(texte, NULL, ecran, &position);
            
                SDL_FreeSurface(texte);
            }
            


            Améliorations possibles

            :
            • Vous remarquerez que la fonction prend un grand nombre de paramètres. Pourquoi ne pas les regrouper dans une structure ?
            • Essayez d'afficher également les touches enfoncées. Vous devrez peut-être modifier le prototype afin qu'il ne soit pas trop long.
            • Faites en sorte que l'affichage des coordonnées s'active ou se désactive lorsque l'utilisateur appuie sur une touche.
            • Partager sur Facebook
            • Partager sur Twitter
              13 août 2008 à 17:08:15

              Merci pour ces exercices!
              • Partager sur Facebook
              • Partager sur Twitter
                20 août 2008 à 19:59:49

                Bal littéraire



                Quand:

                Tous en général

                Sujet principal

                :
                Créer une fonction qui permet d'afficher du texte a coté de la position du curseur avec des effets.


                Consignes

                :
                Si le curseur bouge, ce n'est pas tout le texte d'un coup mais des lettres avec un décalage (la 1 bouge, puis au bout de 100 ms , la deux bouge ,etc;

                argument : le texte a afficher, le temps de décalage (en ms)[,la couleur,le type d'affichage, la taille ,la police]. (les arguments entre [] ne sont pas obligatoire.

                Notions travaillées

                : Timers, tableaux de char, affichage de texte

                Réponse

                :
                <secret>Aucun code actuellement fait ... désolé :( <secret>

                Améliorations possibles

                :
                Gestion des collisions entre les lettres et l'écran;

                Ajout d'autre effets comme la rotation, le changement de taille, le fondu , etc

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  5 novembre 2011 à 17:37:28

                  Titre du TP



                  Quand:

                  Avant TP Marion Sokoban

                  Sujet principal

                  : Ce sera un paint pour petit (exercice de m@teo21).

                  Consignes

                  : Ce logiciel devra coller des dessins sur une surface blanche quand ont clique. L'utilisateur choisir l'image a coller avec les touches de 1 à 9. Il y aura donc 9 dessin. L'utilisateur pourra aussi effacer l'écran en appuiant sur suppr.

                  Notions travaillées

                  : Gestion des évènements.

                  Réponse

                  :

                  #include <stdlib.h>
                  #include <stdio.h>
                  #include <SDL.h>
                  #include <SDL_image.h>
                  #define ZOZOR 0
                  #define SAPIN 1
                  #define SOLEIL 2
                  #define NUAGE 3
                  #define HERBE 4
                  #define FLEUR 5
                  #define COEUR 6
                  #define ETOILE 7
                  #define MAISON 8
                  
                  
                  int main(int argc , char *argv[])
                  {
                      SDL_Surface *screen = NULL ;
                      SDL_Surface *banderolle = NULL;
                      SDL_Surface *image[9]; // on crée deux surface ou on mettra zozor et le sapin
                      int continuer = 1;
                      SDL_Event event;
                      int clic = 0;
                      SDL_Rect posSouris;
                      SDL_Rect posBanderolle;
                      int suppr = 0;
                      int imageActuelle = ZOZOR;//par default c'est zozor que l'on blitte en premier
                  
                      if(SDL_Init(SDL_INIT_VIDEO) == -1)
                      {
                          fprintf(stderr , "%s\n" , SDL_GetError());
                          exit(-1);
                      }
                  
                      SDL_WM_SetIcon(IMG_Load("image/icone.png"), NULL);
                  
                      screen = SDL_SetVideoMode(640 , 480 , 32 , SDL_HWSURFACE | SDL_DOUBLEBUF);
                      if(screen == NULL)
                      {
                          fprintf(stderr , "%s\n" , SDL_GetError());
                          exit(-1);
                      }
                  
                      image[ZOZOR] = SDL_LoadBMP("image/zozor.bmp");
                      if(image[ZOZOR] == NULL)
                      {
                          fprintf(stderr , "%s\n" , SDL_GetError());
                          exit(-1);
                      }
                  
                      image[SAPIN] = IMG_Load("image/sapin.png");
                      if(image[SAPIN] == NULL)
                      {
                          fprintf(stderr , "%s\n" , SDL_GetError());
                          exit(-1);
                      }
                  
                      image[SOLEIL] = IMG_Load("image/soleil.png");
                      if(image[SOLEIL] == NULL)
                      {
                          fprintf(stderr, "%s\n", SDL_GetError());
                          exit(-1);
                      }
                  
                      image[NUAGE] = IMG_Load("image/nuage.png");
                      if(image[NUAGE] == NULL)
                      {
                          fprintf(stderr, "%s\n", SDL_GetError());
                          exit(-1);
                      }
                  
                      image[HERBE] = IMG_Load("image/herbe.png");
                      if(image[HERBE] == NULL)
                      {
                          fprintf(stderr, "%s\n", SDL_GetError());
                          exit(-1);
                      }
                  
                      image[FLEUR] = IMG_Load("image/fleur.png");
                      if(image[FLEUR] == NULL)
                      {
                          fprintf(stderr, "%s\n", SDL_GetError());
                          exit(-1);
                      }
                  
                      image[COEUR] = IMG_Load("image/coeur.png");
                      if(image[COEUR] == NULL)
                      {
                          fprintf(stderr, "%s\n", SDL_GetError());
                          exit(-1);
                      }
                  
                      image[ETOILE] = IMG_Load("image/etoile.png");
                      if(image[ETOILE] == NULL)
                      {
                          fprintf(stderr, "%s\n", SDL_GetError());
                          exit(-1);
                      }
                  
                      banderolle = IMG_Load("image/banderolle.png");
                      if(banderolle == NULL)
                      {
                          fprintf(stderr, "%s\n", SDL_GetError());
                          exit(-1);
                      }
                  
                      image[MAISON] = IMG_Load("image/maison.png");
                      if(image[MAISON] == NULL)
                      {
                          fprintf(stderr, "%s\n", SDL_GetError());
                          exit(-1);
                      }
                  
                      SDL_SetColorKey(image[ZOZOR] , (SDL_SRCCOLORKEY | SDL_RLEACCEL) , SDL_MapRGB( SDL_GetVideoSurface()->format , 0 , 0 , 255));
                  
                      SDL_FillRect(screen , NULL , SDL_MapRGB(screen->format , 255 , 255 , 255));// on met l'écran en blanc une fois
                  
                      posBanderolle.x = 0;
                      posBanderolle.y = 0;
                  
                      while(continuer)
                      {
                          while(SDL_PollEvent(&event))
                          {
                              switch(event.type)
                              {
                                  case SDL_QUIT :
                                     continuer = 0;
                                     break;
                  
                                  case SDL_MOUSEBUTTONDOWN :
                                  if(event.button.button == SDL_BUTTON_LEFT)
                                  {
                                     posSouris.x = event.button.x;
                                     posSouris.y = event.button.y;
                                     clic = 1;
                                  }
                  
                                  else if(event.button.button == SDL_BUTTON_RIGHT)
                                  {
                                      suppr = 1;
                                  }
                                     break;
                                  case SDL_KEYUP:
                                      switch(event.key.keysym.sym)
                                      {
                                          case SDLK_DELETE:
                                          suppr = 1;
                                          break;
                  
                                          case SDLK_ESCAPE:
                                          continuer = 0;
                                          break;
                  
                                          case SDLK_1:
                                          imageActuelle = ZOZOR;
                                          break;
                  
                                          case SDLK_2:
                                          imageActuelle = SAPIN;
                                          break;
                  
                                          case SDLK_3:
                                          imageActuelle = SOLEIL;
                                          break;
                  
                                          case SDLK_4:
                                          imageActuelle = NUAGE;
                                          break;
                  
                                          case SDLK_5:
                                          imageActuelle = HERBE;
                                          break;
                  
                                          case SDLK_6:
                                          imageActuelle = FLEUR;
                                          break;
                  
                                          case SDLK_7:
                                          imageActuelle = COEUR;
                                          break;
                  
                                          case SDLK_8:
                                          imageActuelle = ETOILE;
                                          break;
                  
                                          case SDLK_9:
                                          imageActuelle = MAISON;
                                          break;
                  
                                          default :
                                             ;
                                      }
                                      break;
                  
                                      default :
                                         ;
                              }
                          }
                          SDL_BlitSurface(banderolle, NULL, screen, &posBanderolle);
                  
                          if(clic == 1)
                          {
                              SDL_BlitSurface(image[imageActuelle] , NULL , screen , &posSouris); // on dessine aux position
                                                                                                  //de la souris l'objet actuelle
                              clic = 0;
                          }
                  
                          else if(suppr == 1)
                          {
                              SDL_FillRect(screen , NULL , SDL_MapRGB(screen->format , 255 , 255 , 255));// on vide l'écran en blanc (on efface)
                              suppr = 0;
                          }
                  
                          SDL_Flip(screen);
                      }
                  
                      SDL_FreeSurface(image[ZOZOR]);
                      SDL_FreeSurface(image[SAPIN]);
                      SDL_FreeSurface(image[SOLEIL]);
                      SDL_FreeSurface(image[NUAGE]);
                      SDL_FreeSurface(image[HERBE]);
                      SDL_FreeSurface(image[FLEUR]);
                      SDL_FreeSurface(image[COEUR]);
                      SDL_FreeSurface(image[ETOILE]);
                      SDL_FreeSurface(image[MAISON]);
                      SDL_Quit();
                  
                      return EXIT_SUCCESS;
                  }
                  


                  Améliorations possibles

                  : (rien pour le momoent)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    5 novembre 2011 à 18:04:47

                    Pas la peine de déterrer pour poster l'exercice s'il est déjà dans le tuto.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [EXERCICES]Langage C, en SDL

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown