Souvent je vois dans les codes un ShowCursor_(#True) sans test pour savoir si le curseur est deja afficher ou non, et c'est comme la drogue, c'est maaaaaaaaaltu as même réglé en passant mon problème de positionnement du crayon quand on quitte puis revient sur l'écran via l'appel à l'API avec ShowCursor_


Enfait c'est une habitude, plus court que #PB_Event_CloseWindow ou Select EventType() : Case : #PB_EventType_LeftClick : ... Et puis c'est plus pratique car tu peut remplir les cases facilement sans relacher le bouton de la sourie avec un variable d'etat. Par exemple :Chapeau pour la maîtrise des constantes comme #WM_LBUTTONUP, #WM_CLOSE.
Dans les déclarations globales :
Code : Tout sélectionner
Global FillCross.b ; va nous permetre de savoir si le bouton droit est enfoncer pour remplir les cases
Code : Tout sélectionner
Case #WM_LBUTTONDOWN ;Si le bouton droit est enfoncé, on met FillCross à #True
FillCross = #True
Case #WM_LBUTTONUP ; Si le bouton droit est relaché, on met FillCross à #False
FillCross = #False
Code : Tout sélectionner
; Remplissage des cases si FillCross = #True et que la case n'est pas -1, -1
;
If FillCross = #True And CrayonCrossX > -1 And CrayonCrossY > -1
Cross(CrayonCrossX, CrayonCrossY)\Sprite = #Cross
EndIf

Comme je disais, il n'y a pas vraiment besoin de la lib Mouse(), tout se passe en fenetré sans avoir besoin de capture la sourie pour emepecher l'utilisateur de sortir de la fenetre. La lib Mouse est surtout utile en plein écran où lorsqu'on veux simplement que le curseur reste sur l'écran.Y'a même plus de InitMouse(), tout se fait en zappant la lib mouse, ni même de gestion de collisions.
Au contraire! C'est du pure PureBasicC'est presque plus du Purebasic là !

Un redim aurait été mieu car là j'alloue un espace plus grand que necessaire. Un tableau de #Max_Cross * #Max_Cross maximum alors qu'un utilisateur peut juste faire des tableau de 5 * 5 s'il en a envie. Mais bon c'est pas enorme non plus voir meme négligeable pour 125 octets non utilisésPas de doutes aussi, pour les tableaux plutôt qu'une liste, je suis convaincu. J'y avais pensé mais je bloquais sur les limites de "Redim" (que tu n'utilises même pas d'ailleurs, je me suis cherché la complication pour rien !)

Code : Tout sélectionner
; On calcul sur quelle case est le crayon
CrayonCrossX = Round((CrayonX - 200) / 12 + MaxCrossX / 2, 1) - 1
CrayonCrossY = Round((CrayonY - 200) / 12 + MaxCrossY / 2, 1) - 1
Code : Tout sélectionner
; on calcul la postion en x/y de la case
Cross(x, y)\x = 200 + ((x - MaxCrossX / 2) * 12)
Cross(x, y)\y = 200 + ((y - MaxCrossY / 2) * 12)
Voila l'idée globalement. On aurait pu faire comme ça mais le hic c'est que le nombre de case est variable!
Dans le 2eme block, on veux placer les cases de 0 à MaxCrossX et MaxCrossY (c'est à dir le nombre max de cases qu'un utilisateur A choisi, et non #Max_Cross qui lui definit le nombre max de case qu'un utilisateur PEUT choisir). Pour les placer on pourait partir du centre (200; 200) et on ajouter X * la taille d'une case mais elle serait en la partie sud-est de l'ecran seulement (X * Taille d'une case sera toujours positif (à part si la taille est negative mais bon...

C'est pas facil à expliquer...

Dans le 1er block, c'est toujours le meme principe : On soustrait 200 à la position du curseur pour avoir l'origine en 0; 0, puis on divise par la taille d'une case car l'ecran peut etre remplis de n * taille d'une case. Et là, comme tout a l'heure, si on parcourt pas de -MaxCrossX / 2 à +MaxCrossX / 2 la premiere case ne va pas se trouver au nord-ouest mais au sud-est.
Le round(.., 1) - 1 c'est simplement que pour un tableau de 5 x 5 on aura MaxCrossX = 5 et MaxCrossY = 5 mais en realité on parcoura le tableau de 0 à 4 (l'element 0 etant pris en compte, de 0 à 4 il y a bien 5 éléments).
Code : Tout sélectionner
Mais ça a l'air de ressembler à ce que je faisais avec mes variables MargeX et MargeY

Je sais pas si j'ai été clair dans mes explications (a vrai dir c'est pas vraiment mon truc lol) mais si tu comprends toujours pas, je te ferais un schémas

@Dobro :
Je viens d'écouter ton interpretation, c'est super! J'ai meme applaudis a la fin, mais je pense que t'a pas entendu car c'etait tout noir apres
