begin process at 2012 05 30 16:59:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

lundi 25 janvier 2010 à 14:14:15 | savoir quel case d'un tableau bidimensionel est lié au clic de la souris

juju116

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
lundi 25 janvier 2010 à 15:17:38 | Re : savoir quel case d'un tableau bidimensionel est lié au clic de la souris

BruNews

Administrateur CodeS-SourceS
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++
lundi 25 janvier 2010 à 17:45:50 | Re : savoir quel case d'un tableau bidimensionel est lié au clic de la souris

juju116

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
lundi 25 janvier 2010 à 17:59:10 | Re : savoir quel case d'un tableau bidimensionel est lié au clic de la souris

BruNews

Administrateur CodeS-SourceS
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++
vendredi 29 janvier 2010 à 07:42:27 | Re : savoir quel case d'un tableau bidimensionel est lié au clic de la souris

juju116

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);

}
lundi 1 février 2010 à 14:32:22 | Re : savoir quel case d'un tableau bidimensionel est lié au clic de la souris

juju116

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 ;)

Code C/C++ :
#include <cstdlib>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL.h>
#include <iostream>

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);
   }

}


Cette discussion est classée dans : clic, tableau, case, souris, bidimensionel


Répondre à ce message

Sujets en rapport avec ce message

Position de la souris. [ par Colombus ] Bonjour, Dans un projet MFC j'ouvre un bitmap; Je voudrais par la suite, "uniquement" après clic sur un bouton pouvoir avec la souris cliquer sur un p Position Joystick et clic souris [ par theoriginalstpierre ] Salut,J'aimerais pouvoir récupérer la position (x,y) du joystick dans deux variables distinctes x et y.Aussi comment savoir si un bouton du joystick e coordonnees opengl d'un clic de souris [ par sheeper ] Bonjour,J'aimerais savoir comment convertir les coorddonnes d'un clic de souris (donc relative a l'ecran) en coordonnes correspondantes pour ma fenetr utiliser le double clic de la souris pour afficher une dialogbox [ par izle ] IzLe,Bonjour, je voudrais utiliser le double clic de la souris pour ouvrir une boite de dialog, je voudrais également conserver la position du cursor deplacements dans des fenetres [ par magic_Nono ] déplacement rectangle ds fenetre avec sourisQuestion toute bêteqqn a-t'il déjà fait un prgou il deplace des boites, rectangles ou autre objet au sein Clic de souris [ par manta7 ] Bonjour a tous !!! Je voudrais savoir s'il existe un moyen simple de produire x clics par secondes lorsque l'on garde le bouton gauche de la souris ap perte de device avec dinput [ par chamoine ] J'ai un soucis lorsque j'agrandi mon application après l'avoir réduite. Je suis obligé de killer celle-ci.... J'arrive parfaite a récupérer mes surfac Cacher un tableau de chiffre par un de caractere [ par RootASM ] Bonjour,Je suis en train de programmer un démineur mais je ne sais pas comment faire pour afficher un tableau de '*' que le joueur verra et ou il entr allegro => getch() pour souris [ par Djedie ] j utilise allegro sous dev cpp, et je voudrai que mon programme attente le clic de la souris pour continuer.comme avec le getch() pour le clavier.en f Clic et déplacement de la souris [ par maxinfos ] Bonjour,je voudrais savoir comment faire pour faire cliquer ma souris automatiquement, tout comme je la fait déplacer avec la méthode "SetCursorPos(in


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 : 0,671 sec (3)

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