Vous êtes ici:

Menu

Projet Pocket-Cible

Stacks Image 3496
Il y a quelques années, de 2007 à 2008, j'avais développé une application sous mobile windows en visual-basic. Cette application permettait la saisie des points lors de mes entraînements de tir à l'arc. Malheureusement, la stratégie de Microsoft et l'obsolescence rapide des windows Phone de l'époque, m'a décidé à abandonner le projet.
L'arrivée de Livecode dans sa version Community m’a donné le goût de reprendre mon projet. Dans un premier temps, je dois m'approprier ce langage très littéral et assez déroutant au début. Le projet sera porté sur Mac, Linux et Windows dans un premier temps. Puis certainement sur Android, j'en connais une qui attends cela depuis longtemps. Et enfin, en fonction de mes moyens, sur iMachine car il faut une version payante de Livecode.
Je vais vous présenter mon premier projet très modeste. Celui-ci va servir de base à un projet plus ambitieux que je vais enrichir dans les prochains mois. Je vais aborder la saisie simplifiée d'une feuille de marque d'entraînement de tir à l'arc.
Pour débuter, nous partirons sur un entraînement de deux séries de six volées de six flèches ce qui correspond à un tir Fédéral ou FITA. Pour plus de renseignements sur la pratique du tir à l'arc, voir le site de la F.F.TA.

Présentation du projet

Notre programme ne comportera pas encore de base de données. Nous utiliserons un tableau multidimensionnel pour stocker la saisie des impacts de flèches.
Tableau des impacts de flèches
Nom du Tableau Série Volée Flèche
1ère dimension 2 ème dimension 3 ème dimension
gArrayImpact 1 à 2 1 à 6 1 à 6
Pour l'instant, nous opterons pour un entraînement de deux séries comprenant chacune six volées de six flèches.

Nous utiliserons de simples objets button pour la saisie des impacts. Des field seront utilisés pour afficher le résultat.

Création de la pile (mainstack) volee.livecode

La pile comportera une carte (card) nommée SaisieBlason. Créez les boutons correspondants à la saisie des impacts sur le blason, les label fields correspondants à valeurs des impacts de flèches, les trois scroolbars représentant de haut en bas : la série, la volée et les flèches. Le bouton M représente un manqué, une flèche hors du blason. Le bouton AC permet d'annuler toute la volée. Le bouton suivant permet d'accéder à la volée suivante. Il sera visible seulement lorsque la saisie se trouvera sur la dernière flèche du blason.
Stacks Image 3511
la carte saisie blason

Fonctionnement du programme

L'initialisation du programme

On centralisera le code au maximum dans le handler de la carte SaisieBlason, celui-ci contiendra les déclarations de variables, les événements (command handler), les commandes personnalisées et les fonctions de notre programme. On commencera par l'initialisation du tableau gArrayImpact et des objets de la pile. Pour plus de souplesse, déclarons notre tableau en portée global.

global gArrayImpact

Nous allons utiliser l'événement preopenstack pour faire l'initialisation des variables et objets. A chaque chargement de la pile, on appliquera l'initialisation. Pour initialiser le tableau, on utilisera une commande personnalisée avec le passage du tableau en argument.

on preopenstack
#initialisation du tableau gArrrayImpact
initialisation_tableau gArrayImpact

#initialisation des scrollbars
set the endValue of Scrollbar "ScrollNumFleche" to 6
Set the thumbPosition of Scrollbar "ScrollNumFleche" to 1
set the endValue of Scrollbar "ScrollNumSerie" to 2
Set the thumbPosition of Scrollbar "ScrollNumSerie" to 1
set the endValue of Scrollbar "ScrollNumVolee" to 6
Set the thumbPosition of Scrollbar "ScrollNumVolee" to 1

#initialisation bouton volée suivante
Set the visible of button "BtnSuivant" to false

#remise à zéro de l'affichage
Affiche_Volee
end preopenstack

Voici la commande personnalisée Affiche_Volee. On peut la comparer à une procédure. On récupère la position de notre volée avec les scrollbars. On identifie la flèche courante pour la saisie en affichant le texte du label field en rouge. Une commande personnalisée trie_volee nous permettra d"'afficher les valeurs de la volée triées en commençant par la valeur la plus forte. Nous terminerons par le calcul de la somme.

on Affiche_Volee
# Déclaration des variables
local tNumSerie, tNumVolee, tNumFleche, tArrayTri

# récupération de la position dans le tableau Série, Volée, Flèche
put the thumbPosition of scrollbar "ScrollNumSerie" into tNumSerie
put the thumbPosition of scrollbar "ScrollNumVolee" into tNumVolee
put the thumbPosition of scrollbar "ScrollNumFleche" into tNumFleche

# focus en rouge de la flèche active
set the textColor of Field "LblImpact1" to black
set the textColor of Field "LblImpact2" to black
set the textColor of Field "LblImpact3" to black
set the textColor of Field "LblImpact4" to black
set the textColor of Field "LblImpact5" to black
set the textColor of Field "LblImpact6" to black
switch tNumFleche
case 1
set the textColor of Field "LblImpact1" to red
break
case 2
set the textColor of Field "LblImpact2" to red
break
case 3
set the textColor of Field "LblImpact3" to red
break
case 4
set the textColor of Field "LblImpact4" to red
break
case 5
set the textColor of Field "LblImpact5" to red
break
case 6
set the textColor of Field "LblImpact6" to red
break
end switch

# affectation des valeurs des impacts de flèche dans les label field
put gArrayImpact[tNumSerie][tNumVolee][1] into Field "LblImpact1"
put gArrayImpact[tNumSerie][tNumVolee][2] into Field "LblImpact2"
put gArrayImpact[tNumSerie][tNumVolee][3] into Field "LblImpact3"
put gArrayImpact[tNumSerie][tNumVolee][4] into Field "LblImpact4"
put gArrayImpact[tNumSerie][tNumVolee][5] into Field "LblImpact5"
put gArrayImpact[tNumSerie][tNumVolee][6] into Field "LblImpact6"

# tri de la volée du plus fort au plus faible (convention des feuilles de marque)

#affectation d'un tableau provisoire
put gArrayImpact[tNumSerie][tNumVolee][1] into tArrayTri[1]
put gArrayImpact[tNumSerie][tNumVolee][2] into tArrayTri[2]
put gArrayImpact[tNumSerie][tNumVolee][3] into tArrayTri[3]
put gArrayImpact[tNumSerie][tNumVolee][4] into tArrayTri[4]
put gArrayImpact[tNumSerie][tNumVolee][5] into tArrayTri[5]
put gArrayImpact[tNumSerie][tNumVolee][6] into tArrayTri[6]

#commande personnalisée de tri
trie_volee tArrayTri

# Calcul de la volée
put 0 into Field "LblVolee"
repeat with count = 1 to 6
add gArrayImpact[tNumSerie][tNumVolee][count] to Field "LblVolee"
end repeat

end Affiche_Volee

La procédure de tri trie_volee utilise des particularité du langage Livecode récupéré sur le forum de Livecode.

on trie_volee @tArray
#récupération des clés du tableaux dans la variable spéciale it
get the keys of tArray
#tri des clés en fonction des valeurs du tableau
sort lines of it numeric descending by tArray[each]
#conversion en array du resultat
split it by return
#affichage par rapport au tableau trié it
put tArray[it[1]] into Field "LblImpactGroupe1"
put tArray[it[2]] into Field "LblImpactGroupe2"
put tArray[it[3]] into Field "LblImpactGroupe3"
put tArray[it[4]] into Field "LblImpactGroupe4"
put tArray[it[5]] into Field "LblImpactGroupe5"
put tArray[it[6]] into Field "LblImpactGroupe6"
end trie_volee



La saisie des impacts

Chaque bouton sera pourvu d'un événement dans son handler. Pour les boutons 10 à 1, le chiffre correspond à la valeur de l'impact.

on mouseUp
Saisie_impact
10
end mouseUp

la valeur bouton 10+ est 10 et pour le bouton M la valeur sera 0.

La commande personnalisée Saisie_impact sera stockée dans le handler de la carte.

on Saisie_impact NbValue
local tNumSerie, tNumVolee, tNumFleche
put the thumbPosition of scrollbar "ScrollNumSerie" into tNumSerie
put the thumbPosition of scrollbar "ScrollNumVolee" into tNumVolee
put the thumbPosition of scrollbar "ScrollNumFleche" into tNumFleche
put NbValue into gArrayImpact[tNumSerie][tNumVolee][tNumFleche]
if the thumbPosition of Scrollbar "ScrollNumFleche" < 6 then
add 1 to tNumFleche
Set the thumbPosition of Scrollbar "ScrollNumFleche" to tNumFleche
else
if tNumSerie < 2 and tNumVolee < 6 then
Set the visible of button "BtnSuivant" to true
end if
end if
Affiche_Volee
end Saisie_impact

A chaque nouvelle saisie nous recalculons les impacts de flèches. On détermine si nous nous positionnons sur la dernière flèche l'affichage ou non du bouton volée suivante.

Le déplacement avec les scroolbars

Le programme permet de se positionner automatiquement sur n'importe quel impact du tableau. On utilisera l'événement scrollbarDrag dans chaque handler des scrollbars.

on scrollbarDrag newValue
Affiche_Volee
end scrollbarDrag

Nous appellerons la commande personnalisée Affiche_Volee en utilisant les nouvelles valeurs des scrollbars.

L'annulation d'une volée

Pour annuler une volée, nous utiliserons l'handler du bouton AC

on mouseUp
annule_volee
end mouseUp

Nous appellerons une commande personnalisée nommé annule_volee stockée dans le handler de la carte.

on annule_volee
local tNumSerie, tNumVolee, tNumFleche

put the thumbPosition of scrollbar "ScrollNumSerie" into tNumSerie
put the thumbPosition of scrollbar "ScrollNumVolee" into tNumVolee
put 0 into gArrayImpact[tNumSerie][tNumVolee][1]
put 0 into gArrayImpact[tNumSerie][tNumVolee][2]
put 0 into gArrayImpact[tNumSerie][tNumVolee][3]
put 0 into gArrayImpact[tNumSerie][tNumVolee][4]
put 0 into gArrayImpact[tNumSerie][tNumVolee][5]
put 0 into gArrayImpact[tNumSerie][tNumVolee][6]
Set the thumbPosition of Scrollbar "ScrollNumFleche" to 1
Affiche_Volee
end annule_volee

Volée suivante

Le bouton > permettra de passer à la volée suivante lorsque le bouton est visible.

on mouseUp
Nouvelle_Volee
end mouseUp

Nous appellerons une commande personnalisée nommé Nouvelle_volee stockée dans le handler de la carte.

on Nouvelle_Volee
local tNumSerie, tNumVolee, tNumFleche
put the thumbPosition of scrollbar "ScrollNumSerie" into tNumSerie
put the thumbPosition of scrollbar "ScrollNumVolee" into tNumVolee
put the thumbPosition of scrollbar "ScrollNumFleche" into tNumFleche
if the the thumbPosition of Scrollbar "ScrollNumVolee" < 6 then
add 1 to tNumVolee
put 1 into tNumFleche
else
add 1 to tNumSerie
put 1 into tNumVolee
put 1 into tNumFleche
Set the thumbPosition of Scrollbar "ScrollNumSerie" to tNumSerie

end if
Set the thumbPosition of Scrollbar "ScrollNumVolee" to tNumVolee
Set the thumbPosition of Scrollbar "ScrollNumFleche" to tNumFleche
Set the visible of button "BtnSuivant" to false
Affiche_Volee

end Nouvelle_Volee

Conclusion

Et voici comment réaliser une petite application fonctionnelle en très peu de temps. Bon, c'est vrai, il m'a fallu quelques heures de travail pour s'approprier la syntaxe et trouver les solutions de tri mais avec l'expérience je devrais m'améliorer.
Voici le code source, vous pouvez l'améliorer, j'en suis sur ! n'hésitez pas à poster vos améliorations ou vos questions. Prochaine étape, le graphisme...
comments powered by Disqus
 Vous êtes ici: