Savoir quel case d'un tableau bidimensionel est lié au clic de la souris

juju116 Messages postés 23 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 1 février 2010 - 25 janv. 2010 à 14:14
juju116 Messages postés 23 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 1 février 2010 - 1 févr. 2010 à 14:32
bonjour j'ai un petit souci de comprehension
j'ai un tableau declaré ainsi: int tableau[3][3]; tout mes cases sont intialisé à zero à l'aide de deux boucles for qui parcours mon tableau jusqu'ici pas de soucis et je recupère les cordonné de ma souris lorsque je presse mon bouton de souris par l'evenement associé. le souci est comment savoir quel est ma case associé à mon clic de souris. le but est de savoir quel case à été coché pour changé la variable.merci beaucoup d'avence

5 réponses

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2010 à 15:17
Tu es certain d'avoir besoin d'un tableau 2 dimensions ???
Avec une résolution 2000x1400 ça fera deja 11 Mo de mémoire utilisée.

ciao...
BruNews, MVP VC++
0
juju116 Messages postés 23 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 1 février 2010
25 janv. 2010 à 17:45
re BruNews mon tableau est réalise dans une dimension de 600*600 moins de mémoire utilisé donc, mais sinon comment je pourais allegé mon tableau dans ce cas? et comment lier la case ou je clic avec la souris ( a partir des coordonnée x et y de la souris trouver les coordonnée de la case ou j'ai cliqué) merci
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2010 à 17:59
Sous Windows, position du clic souris est dans un:
POINT pt;
tableau[pt.x][pt.y] = qqchose;
truc de ce genre.

ciao...
BruNews, MVP VC++
0
juju116 Messages postés 23 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 1 février 2010
29 janv. 2010 à 07:42
j'ai créé cette fonction ci mais mon image s'affiche toujours dans la case en haut a gauche bizzare puisque j'ai créer deux boucles for donc je parcours bien mon tableau, int x et y sont les coordonnées recuperé par la souris et i j les coordonnées finale de la case à charger.

void Plateau(int x, int y )
{
SDL_Rect f ={ 0,0,0,0};
int i,j,k,h,w,l;
h= largeur/3;
l= hauteur/3;

for(k=0,i=0;i<h;i+=h,k++)
{
f.y = i;
for(j=0,l=0;j<l;j+=l,w++)
{
f.x = j;
}
}
plateau[i][j] = SDL_BlitSurface(X,NULL,screen,&f);

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
juju116 Messages postés 23 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 1 février 2010
1 févr. 2010 à 14:32
voila j'ai réussi après plusieurs simulations à trouver un bon code. c'est un peu crade avec les conditions pour les coordonées du pointeurs si quelqu'un m'apporte des suggestions je suis preneur, voila topic clos ;)

#include <cstdlib>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL.h>
#include 

using namespace std;

bool Initialisation();
void Plateau(int, int);
void Pause();
void Affichage();
void Probleme();
void Souris();
void Tours();



int i,j;
int const largeur = 600;
int const hauteur = 600;
int plateau[3][3];
SDL_Surface *fd, *X, *O, *screen;
SDL_Event event;
SDL_Rect r={0,0,0,0};

int main ( int argc, char** argv )
{
    SDL_Init( SDL_INIT_VIDEO);
    int done =0;


    // initialize SDL video
    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        cout << "Probleme d initialisation" << SDL_GetError() << endl;
        Probleme();
    }

    // create a new window
    screen = SDL_SetVideoMode(largeur,hauteur, 16,SDL_HWSURFACE|SDL_DOUBLEBUF);
    SDL_WM_SetCaption("Morpion Version 1.0", NULL);

    Initialisation();

    Affichage();

    	//Boucle generale
while(!done)
{
//Traiter les evenements
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
done=1;
break;
case SDL_KEYUP:
if(event.key.keysym.sym==SDLK_a)
done=1;
break;
case SDL_MOUSEBUTTONUP:
                    Plateau(event.button.x,event.button.y);
break;
default:
break;
}
}

        // finally, update the screen :)

        SDL_Flip(screen);
    } // end main loop

    // free loaded bitmap
    SDL_FreeSurface(screen);

    // all is well ;)
    printf("Exited cleanly\n");
    SDL_Quit();
    return 0;
}

bool Initialisation()
{
   fd = NULL;
   X = NULL;
   O = NULL;

   //pour fd
   if( (!fd NULL) || (!X NULL) || (!O == NULL) )
   {
       SDL_FreeSurface(fd), fd= NULL;
       SDL_FreeSurface(X), X= NULL;
       SDL_FreeSurface(O), O = NULL;
       cout<< "Probleme d initialisation des images" << endl;
       Probleme();
   }

   if( (fd NULL) || (X NULL) || (O == NULL) )
   {
       cout<< "Probleme de chargement de fd, x et o" << endl;
       Probleme();
   }

   X = SDL_LoadBMP("x.bmp");
   O = SDL_LoadBMP("o.bmp");
   fd = SDL_LoadBMP("fd.bmp");




}

void Pause()
{
    int continuer = 1;
    SDL_Event event;

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
        }
    }
}

void Affichage()
{
    SDL_Rect r = {0};
    SDL_BlitSurface(fd,NULL,screen,&r);
}

void Probleme()
{
    char choix;
    cout<< " Vous avez un probleme\n "<<endl;
    cout<< " Voules vous quitter? Oui ou Non :\n "<<endl;

    switch(choix)
    {
        case 'oui':
        EXIT_SUCCESS;
        break;

        case 'non':
        EXIT_FAILURE;
        break;
    }

}

void Plateau(int x, int y )
{
   int h,l,w,a,b;
   for(i=0; i<3; i++)
   for(j=0;j<3;j++)
   plateau[i][j]=0;

   //calcul de la case associé:
   i=x/(largeur/3);
   j=y/(hauteur/3);

   if(plateau[i][j]==0)
   {
   {
    //pour les x:
    if(x<200)
    {
    x=0;
    }
    else if(x<400)
    {
    x=200;
    }
    else
    {
    x=400;
    }
    //pour les y :
    if(y<200)
    {
    y=0;
    }
    else if(y<400)
    {
    y=200;
    }
    else
    {
    y=400;
    }
    r.x=x;
    r.y=y;
    }
   SDL_BlitSurface(X,NULL,screen,&r);
   }

   else if(plateau[i][j]==2)
   {
   {
    //pour les x:
    if(x<200)
    {
    x=0;
    }
    else if(x<400)
    {
    x=200;
    }
    else
    {
    x=400;
    }
    //pour les y :
    if(y<200)
    {
    y=0;
    }
    else if(y<400)
    {
    y=200;
    }
    else
    {
    y=400;
    }
    r.x=x;
    r.y=y;
    }
   SDL_BlitSurface(O,NULL,screen,&r);
   }

}
0
Rejoignez-nous