Se connecter avec
S'enregistrer | Connectez-vous

faire un tableau C++

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

Bah moi j'avais vu une source d'un morpion ou plusieur s cases étaient utilisées :

Le truc (m'enfin c'était un peu lourd) c'etait de créer plusieur hWnd en child d'une principale et de récupérer le message d'un clic dans le procésus en fonction de la fenêtre et puis ensuite exécuter une fonction.

Voila voila ;-)

EDIT : Euh je me suis pas renseigner mais tu demander bien sous l'API windows ? parceque sous console il te faudra une biblio ou alors tu fais ca à la old school : parties asm dans le C++ à coup de push lol ;-) mais alors la tu vas souffrir

Le code est assez long quand même donc je post que la partie des hWnd :

hwnd = CreateWindowEx (0, szClassName, "RAOUL Morpion",
WS_SYSMENU | WS_MINIMIZEBOX, 250, 150, 237, 277,
HWND_DESKTOP, NULL, hThisInstance, NULL);

case1 = CreateWindowEx (WS_EX_CLIENTEDGE, szClassName2, "nom1",
WS_VISIBLE|WS_CHILD, 10, 10, 70, 70, hwnd, NULL,
hThisInstance, NULL);

case2 = CreateWindowEx (WS_EX_CLIENTEDGE, szClassName2, "nom2",
WS_VISIBLE|WS_CHILD, 80, 10, 70, 70, hwnd, NULL,
hThisInstance, NULL);

case3 = CreateWindowEx (WS_EX_CLIENTEDGE, szClassName2, "nom3",
WS_VISIBLE|WS_CHILD, 150, 10, 70, 70, hwnd, NULL,
hThisInstance, NULL);

case4 = CreateWindowEx (WS_EX_CLIENTEDGE, szClassName2, "nom4",
WS_VISIBLE|WS_CHILD, 10, 80, 70, 70, hwnd, NULL,
hThisInstance, NULL);

case5 = CreateWindowEx (WS_EX_CLIENTEDGE, szClassName2, "nom5",
WS_VISIBLE|WS_CHILD, 80, 80, 70, 70, hwnd, NULL,
hThisInstance, NULL);

case6 = CreateWindowEx (WS_EX_CLIENTEDGE, szClassName2, "nom6",
WS_VISIBLE|WS_CHILD, 150, 80, 70, 70, hwnd, NULL,
hThisInstance, NULL);

case7 = CreateWindowEx (WS_EX_CLIENTEDGE, szClassName2, "nom7",
WS_VISIBLE|WS_CHILD, 10, 150, 70, 70, hwnd, NULL,
hThisInstance, NULL);

case8 = CreateWindowEx (WS_EX_CLIENTEDGE, szClassName2, "nom8",
WS_VISIBLE|WS_CHILD, 80, 150, 70, 70, hwnd, NULL,
hThisInstance, NULL);

case9 = CreateWindowEx (WS_EX_CLIENTEDGE, szClassName2, "nom9",
WS_VISIBLE|WS_CHILD, 150, 150, 70, 70, hwnd, NULL,
hThisInstance, NULL);

Je te fais pas de copier du processus parceque il fait 5 ou 6 pages mais bon le principe est simple c'est toujours en fonction de MSG msg que tu execute des fonction ...

(switch(msg){case WM_CREATE : ducodeducodeducode;break;case WM_PAINT : etcetcetc;break;default: return DefWindowProc (hwnd, message, wParam, lParam);};)

(Par pitier pas de commentaire je sais c'est illisible mais c'est parceque je les tapper en deux deux et que c'est juste pour expliquer)

Voila en espérence que ca t'aide : sinon le code entier est disponible sur www.cppfrance.com
(tape morpion) ;-) :-D

Euh je viens de penser à un truc là ... Tu pourrais aussi faire avec un bitblt et afficher un dessin que tu aurais fait d'un tableau de cases avec une impression de profondeur pour chaque cases

Mais le je bloque un peu pour le dynamisme ... Je connais pas vraiment de fonction qui définit une zone dans une fenètre sans se référencer à quoi que ce soit... (quoique ça doit exister en cherchant un peu)

Sinon j'ai une dernière alternative ... si le dynamisme et que tu demandes une action après un clic sur une de ces cases tu peux aussi aligner des boutons les uns à côté des autres avec sur eux un dessins d'une case en profondeur ... mais je reste un peu septique sur le résultat obtenu ... :-D

merci beaucoup de vos réponses

****Attention ce qui va suivre risque d'être stupide****
On peut pas faire une matrice [10] [10] et mettre des boutons sur chaque case avec un effet de profondeur.
Après on peut faire référence à chaque case avec les coordonnées non ?

Bah si c'est une bonne idée pour après manipuler les cases cocher ou pas ... en plus comme ça ta une représentation dans l'espace des cases cochées enfin je veux dire que ca sera plus facile de désigner des boutons cochés et alignés de cette façon
Expert Programmation

Tu peux aussi créer une seule fenetre et traiter avec une fonction de callback le message WM_LBUTTONDOWN.
tu récupère les coordonées de la souris avec GET_X_LPARAM(lParam) et GET_Y_LPARAM(lParam)
et tu calcules sur quelle case tu te trouves.

côté donnée tu peux créer ton tableau indiquant les mines ou créer une liste de mines qui contient sa position dans le tableau.
Petite astuce pour le démineur: ajoute une clonne en début et en fin, une ligne en haut et une en bas (tout à 0). Comme ça ton calcul du nombre de mines autour d'une case est le même partout (pas de cas particulier sur les bords ;) 
Lassé par la pub ? Créez un compte
Tom's guide dans le monde