Etant joueur de fléchettes (501 double out pour les initiés) et en ayant marre d'écrire et de compter les résultats, je me décide à réaliser un fichier Excel pour le comptage des points de manière assez sympa.
J'ai récupéré à droite et à gauche des bouts de code mais pour l'instant, je suis bloqué sur la manière d'opérer.
Pour ceux qui ne connaisse pas ce jeu, la cible est divisé en 20 parties numérotées de 1 à 20 plus le centre rouge qui vaut 50 points et le centre vert qui vaut 25 points. Chaque partie numérotée est elle-même divisée en 4 parties, 2 qui valent le nombre indiqué, 1 qui vaut le double et enfin une dernière qui vaut le triple.
Dans mon fichier, j'ai créé un USF avec une image de la cible, lorsque je clique sur l'image, un point apparait au niveau du pointeur et les coordonnées de ce point sont enregistrés dans la feuille 1.
J'en arrive à ma problématique :
- Comment, avec ces coordonnées récupérer le nombre de points marqués dans la zone cliquée ?
- Y a-t-il une manière simple de le faire pour toutes les zones de la cible ?
- Est-il possible de changer le pointeur de la souris par une image de fléchette comme sur la feuille1 ?
Public Const Pi = 245850922 / 78256779 ' Sin(Pi) = 1,22460635382238E-16
' Tandis que Sin(3.14159265358979) = 32,3108510433268 E-16
Et de ça :
VB:
Function Atn2(ByVal X As Double, ByVal Y As Double, Optional ByVal ParDéfaut As Double = 0) As Double
Dim A As Double
If X = 0 And Y = 0 Then
Atn2 = ParDéfaut
Else
If Y < 0 Then X = -X: Y = -Y: A = 1 Else A = 0
If X < Y Then Y = Y - X: X = X + Y: Y = Y - X: A = A + 0.5
If Y <= X Then Atn2 = A * Pi + Atn(Y / X) _
Else Atn2 = (A + 0.5) * Pi - Atn(X / Y)
End If
End Function
Atn2(X, Y) vous renverra l'angle en radians du rayon contenant le point X,Y par rapport au centre 0,0.
Il ne restera qu'a multiplier par le nombre de secteurs et diviser par Pi pour avoir déjà l'information angulaire permettant de taper dans un tableau de points gagnés. Pour l'autre indice dans ce tableau vous calculez d'après le rayon Sqr(X * X + Y * Y)
Remarquez si vous préférez le calculer en formules, la fonction ATAN2 existe dans Excel.
Visiblement VBA (et VB6) ne prennent en charge les fichier .cur (curseur) qu'en noir et blanc
Il faut leur donner un fichier .ico pour avoir de la couleur, mais dans ce cas on ne peut pas définir la pointe de la fléchette en active...
une version noir et blanc plus lisible
Avec X et Y les coordonnées du point atteint par rapport à celles du centre de la cible.
Il ne restera plus qu'à fixer le score de la fléchette à l'aide d'affectations dans un Select Case Sqr(X * X + Y * Y) suivi de plusieurs Case Is < r: pour chaque valeur de r marquant une limite, le 1er r étant le rayon du disque central, le suivant de la couronne qui l'entoure, ensuite les autres zones où il suffira d'y affecter S multiplié par le facteur, doublement ou triplement.
nb :
les formules sont cachées derrière le bouton...
Vba ne sert que pour l'interactivité et archivage
je ne suis pas arrivé à appliquer le fond transparent aux images des fléchettes...
Même avec BackStyle 0 - fmBackStyleTransparent ?
Remarque: en copiant l'image que j'avais joint et en la collant dans Microsoft Photo Editor, je m'aperçois que le fond transparent à disparu…
Je le re-joins zippé à tout hasard.
Voila.
Fait avec Photo Editor, qui à disparu des version récentes de Windows je crois. C'était sans doute trop bien de la part de son auteur vu son niveau qui dégringole à vu d’œil.