Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL Permutation de case en C

    21 mai 2017 à 17:20:20

    // J'initialise le tableau de position des cases
     SDL_Rect tab[8];
       // case 1
        tab[0].x=p[0].x*250;
        tab[0].y=p[0].y*250;
        tab[0].w=WIDTH;
        tab[0].h=HEIGHT;
    
        // case 2
        tab[1].x=p[1].x*250;
        tab[1].y=p[1].y*250;
        tab[1].w=WIDTH;
        tab[1].h=HEIGHT;
    
        // case 3
        tab[2].x=p[2].x*250;
        tab[2].y=p[2].y*250;
        tab[2].w=WIDTH;
        tab[2].h=HEIGHT;
    
        // case 4
        tab[3].x=p[3].x*250;
        tab[3].y=p[3].y*250;
        tab[3].w=WIDTH;
        tab[3].h=HEIGHT;
    
        // case 5
        tab[4].x=p[4].x*250;
        tab[4].y=p[4].y*250;
        tab[4].w=WIDTH;
        tab[4].h=HEIGHT;
    
        // case 6
        tab[5].x=p[5].x*250;
        tab[5].y=p[5].y*250;
        tab[5].w=WIDTH;
        tab[5].h=HEIGHT;
    
        // case 7
        tab[6].x=p[6].x*250;
        tab[6].y=p[6].y*250;
        tab[6].w=WIDTH;
        tab[6].h=HEIGHT;
    
        // case 8
        tab[7].x=p[7].x*250;
        tab[7].y=p[7].y*250;
        tab[7].w=WIDTH;
        tab[7].h=HEIGHT;
    
        // case 9
        tab[8].x=p[8].x*250;
        tab[8].y=p[8].y*250;
        tab[8].w=WIDTH;
        tab[8].h=HEIGHT;
    
    
    	 if (SDL_Init(SDL_INIT_VIDEO) == -1) // Démarrage de la SDL. Si erreur :
    
        {
    
            fprintf(stderr, "Erreur d'initialisation de la SDL : %s\n", SDL_GetError()); // Écriture de l'erreur
    
            exit(EXIT_FAILURE); // On quitte le programme
    
        }
    
    	ecran = SDL_SetVideoMode(750,750,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
    	SDL_WM_SetCaption("Jeu du Taquin", NULL);
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 200, 200, 200));
    
    	un = SDL_LoadBMP("un.bmp");
    	deux = SDL_LoadBMP("deux.bmp");
    	trois = SDL_LoadBMP("trois.bmp");
    	quatre = SDL_LoadBMP("quatre.bmp");
    	cinq = SDL_LoadBMP("cinq.bmp");
    	six = SDL_LoadBMP("six.bmp");
    	sept = SDL_LoadBMP("sept.bmp");
    	huit = SDL_LoadBMP("huit.bmp");
    	vide = SDL_LoadBMP("vide.bmp");
    // Je colle les 9 image sur mon ecran
    
    
    	SDL_BlitSurface(un, NULL, ecran, &tab[0]);
    	SDL_BlitSurface(deux, NULL, ecran, &tab[1]);
    	SDL_BlitSurface(trois, NULL, ecran, &tab[2]);
    	SDL_BlitSurface(quatre, NULL, ecran, &tab[3]);
    	SDL_BlitSurface(cinq, NULL, ecran, &tab[4]);
    	SDL_BlitSurface(six, NULL, ecran, &tab[5]);
    	SDL_BlitSurface(sept, NULL, ecran, &tab[6]);
    	SDL_BlitSurface(huit, NULL, ecran, &tab[7]);
    	SDL_BlitSurface(vide, NULL, ecran, &tab[8]);
    
    
        if( event.type == SDL_MOUSEBUTTONDOWN )
        {
        if(event.button.button == SDL_BUTTON_LEFT)
        {
        posX = event.motion.x;
        posY = event.motion.y;
    //SI JE CLIC A DROITE DE tab[8]
        if((posX>tab[8].x+tab[8].w) && (posX<tab[8].x+2*tab[8].w) && (posY>tab[8].y) && (posY<tab[8].y+tab[8].h))
        {
    //RECHERCHE DE LA CASE ADJACENTE A tab[8]
            for(z=0;z<8;z++)
            {
                tab[z];
                if((tab[z].x<posX) && (tab[z].x+tab[z].w>posX) && (posY>tab[z].y<posY) && (tab[z].y+tab[z].h>posY))
                {
    //PERMUTATION DE LA CASE ADJACENTE AVEC tab[8]
                    tab[z].x=tab[8].x;
                    tab[z].y=tab[8].y;
                    tab[8].x=tab[z].x;
                    tab[8].y=tab[z].y;
                }
            }
        }
        }
        }
     

     


    Pourquoi quand je clic les cases ne bougent pas ? 
    J'ai essayé de blitté derrière la gestion d'event mais toujours rien 

    -
    Edité par Game of throtinette 21 mai 2017 à 18:05:38

    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2017 à 17:37:50

      Salut,

      J’ai pas lu tout le code, mais utilise des boucles. Et il manque une case à ton tableau tab. Ça doit être un tableau de 9 cases.

      -
      Edité par yo@n97one 21 mai 2017 à 17:38:29

      • Partager sur Facebook
      • Partager sur Twitter
      Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
        21 mai 2017 à 19:25:44

        Hello,

        Comme le dit yo@n97one, utilise des boucles, et des tableaux:

        // Ce code....
        	un=SDL_LoadBMP("un.bmp");
        	deux = SDL_LoadBMP("deux.bmp");
        	trois = SDL_LoadBMP("trois.bmp");
        	quatre = SDL_LoadBMP("quatre.bmp");
        	cinq = SDL_LoadBMP("cinq.bmp");
        	six = SDL_LoadBMP("six.bmp");
        	sept = SDL_LoadBMP("sept.bmp");
        	huit = SDL_LoadBMP("huit.bmp");
        	vide = SDL_LoadBMP("vide.bmp");
            
        	SDL_BlitSurface(un, NULL, ecran, &tab[0]);
        	SDL_BlitSurface(deux, NULL, ecran, &tab[1]);
        	SDL_BlitSurface(trois, NULL, ecran, &tab[2]);
        	SDL_BlitSurface(quatre, NULL, ecran, &tab[3]);
        	SDL_BlitSurface(cinq, NULL, ecran, &tab[4]);
        	SDL_BlitSurface(six, NULL, ecran, &tab[5]);
        	SDL_BlitSurface(sept, NULL, ecran, &tab[6]);
        	SDL_BlitSurface(huit, NULL, ecran, &tab[7]);
        	SDL_BlitSurface(vide, NULL, ecran, &tab[8]);
        
        // Préalable: renommer un.bmp en 1.bmp, deux en 2.bmp, ...., vide en 9.bmp
        // .... devient
        int i;
        char tmp[6];
        SDL_Surface *img[8];
        
        for(i=0;i<9;i++) {
        	sprintf(tmp,"%d.bmp",i+1);
        	img[i]=SDL_LoadBmp(tmp);
        	// check if load doesn't fail
        	....
        }
        
        for(i=0;i<9;i++)
        	SDL_BlitSurface(img[i],NULL,ecran,&tab[i]);
        • Partager sur Facebook
        • Partager sur Twitter

        On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

          21 mai 2017 à 20:06:25

          Ou même sans renommer les fichiers, en utilisant un tableau de chaînes de caractères..

          for(i = 0; i < 9; i++)
          {
              img[i] = SDL_LoadBMP(chemin_img[i]);
              ...
          } 
          
          • Partager sur Facebook
          • Partager sur Twitter
          Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs

          SDL Permutation de case en C

          × 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