Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C]afficher des petits carrés dans un cadrillage

Sujet résolu
    15 juin 2006 à 17:22:43

    salut!!
    voila j'ai un petit problème. je veux faire un jeux de reversi(pour ceux qui connaisse, sinon c'est un jeu ou il faut placer des pions en faisant en sorte de transformer ceux des autres en pion de sa couleur)bref je me suis dit que pour commencer, ce serait bien si j'arrivai à affiher un carré de couleur dans un cadrillage.
    voila mon code:

    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    void aireDeJeu(SDL_Surface *ecran);
    void afficherPion(SDL_Surface *ecran);

    int main(int argc, char *argv[])
    {
        //création de la fenêtre
        SDL_Surface *ecran;
        SDL_Init(SDL_INIT_VIDEO);
        ecran = SDL_SetVideoMode(358, 358, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("mon reversi!", NULL);
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
       
        //création du cadrillage
        aireDeJeu(ecran);
        SDL_Flip(ecran);
       
        afficherPion(ecran);
       
        pause();

        SDL_Quit();

        return EXIT_SUCCESS;
    }

    void aireDeJeu(SDL_Surface *ecran)
    {   
         /*là, je cré un cadrillage de 30 cases sur 30 cases et chaques case fait 10*10pixels chaque lignes du cadrillage fait 2 pixels de large*/
         SDL_Surface *ligneHorizontale, *ligneVerticale;
         long i;
         
        ligneHorizontale = SDL_CreateRGBSurface(SDL_HWSURFACE, 358, 2, 32, 0, 0, 0, 0);
        SDL_FillRect(ligneHorizontale, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
       
        ligneVerticale = SDL_CreateRGBSurface(SDL_HWSURFACE, 2, 358, 32, 0, 0, 0, 0);
        SDL_FillRect(ligneVerticale, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
       
        SDL_Rect positionLigneHorizontale;
            positionLigneHorizontale.x = 0;
           
        SDL_Rect positionLigneVerticale;
            positionLigneVerticale.y = 0;
       
        for(i = 10; i<358; i+=12)
        {
            positionLigneHorizontale.y = i;
            positionLigneVerticale.x = i;   
            SDL_BlitSurface(ligneHorizontale, NULL, ecran, &positionLigneHorizontale);
            SDL_BlitSurface(ligneVerticale, NULL, ecran, &positionLigneVerticale);
        }
       
        SDL_FreeSurface(ligneHorizontale);
        SDL_FreeSurface(ligneVerticale);
    }

    void afficherPion(SDL_Surface *ecran)
    {
         /* la j'essaie de mettre des petits carrés  dans ce quadrillage*/
         SDL_Surface *carre;
         carre = SDL_CreateRGBSurface(SDL_HWSURFACE, 10, 10, 32, 0, 0, 0, 0);
         SDL_FillRect(carre, NULL, SDL_MapRGB(ecran->format, 255, 0, 0));
         
         long i = 1, a;
         
         SDL_Rect pcarre;
         
         while (i);
         {
             SDL_Event event;
             SDL_WaitEvent(&event);
             switch (event.type)
             {
                    case SDL_MOUSEBUTTONUP:
                         a = event.button.x % 12;
                         pcarre.x = event.button.x - a;
                         a = event.button.y % 12;
                         pcarre.y = event.button.y - a;
                         SDL_BlitSurface(carre, NULL, ecran, &pcarre);
                         SDL_Flip(ecran);
                         break;
                    case SDL_QUIT:
                         i = 0;
                         break;
             }
         }
         SDL_FreeSurface(carre);
    }

    ce qui se passe, c'est que le cadrillage s'affiche, pas de problème, mais ensuite, le curseur de la souris reste en forme de sablier ce qui fait que je ne peux pas cliquer surles cases pour faire apparaitre les petits carres. et au bout de trente seconde environ, le programme ne donne plus de réponse ce qui fait que je suis obligé de faire un ctrl+alt+suppr bourrin pour le fermer.

    Voila, jespere que vous pourriez trouvez mon erreur.
    Secret (cliquez pour afficher)
    j'èspere aussi que mon erreur n'est pas trop bête non plus! :D:-°

    merci d'avance!
    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2006 à 19:18:01

      personne ne trouve mon problème?
      domage!
      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2006 à 19:29:20

        Il te faut une boucle pour dire au programme de reafficher sans cesse avec SDL_Flip(ecran).
        La tu affiche une fois tous puis le programme attend et il quite
        essaye ça
        while(1)
        {
        aireDeJeu(ecran);


        afficherPion(ecran);
        SDL_Flip(ecran);
        }

        Edit:Il faut aussi que tu initialise au debut les surface et que tu les vide a la fin. Tu perd de la vitesse sinon.

        • Partager sur Facebook
        • Partager sur Twitter
          16 juin 2006 à 19:33:04

          ok merci enormement
          @++
          • Partager sur Facebook
          • Partager sur Twitter

          [C]afficher des petits carrés dans un cadrillage

          × 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