Waouh ! c’est fou, le bonheur que ça procure de réaliser sa propre application ! Ce qui encore plus fou c’est que je n’ai pas vu le temps passer. Je me suis surpassé, je suis aller au-delà des obstacles. J’ai même pris le temps de réaliser une deuxième version de ma première application. Une version qui pour moi est la plus aboutie , une version qui me ressemble. Je ne dis pas que c’est la meilleure application, je dis simplement que c’est la meilleure application que moi je peux faire en kotlin actuellement. Lancez-vous en toute confiance, vous verrez, vous serez fiers de vous. Cette deuxième version, ma permis de poursuivre l’apprentissage des connaissances que je vous avais introduites dans l’article “Mes découvertes sur kotlin”. En seulement deux semaines, je commence déjà à assimiler beaucoup de choses. Je ne compte pas m’en arrêter là !
Dans cet article, je vais vous présenter comment j’ai procédé pour réaliser l’application. Je vais vous expliquer les problèmes que j’ai rencontrés et les solutions que j’ai trouvées pour répondre à ces problèmes.
Le juste-prix
le principe
Si vous connaissez la célèbre émission animée par Vincent Lagaffe alors l’application va vous parler. c’est une bonne chose ! L’application reprend le principe du jeu final. Trouvez le plus rapidement le juste prix.
L’application va générer un nombre aléatoire qu’on appellera “juste prix” et l’utilisateur va devoir proposer des propositions de nombre entre 0 et 10000.
– Si l’utilisateur propose un nombre plus grand que le juste-prix, l’application va lui répondre “c’est moins”
– Inversement, i l’utilisateur propose un nombre plus petit que le juste-prix, l’application va lui répondre “c’est plus”
l’utilisateur pourra alors proposer autant de proposition, jusqu’à qu’il trouve le juste prix. Dans ce cas l’application, lui dira “Vous avez trouvé le juste prix” et la partie sera terminée. Il pourra relancer une nouvelle partie en proposant une nouvelle proposition de nombre.
les contraintes
Pour rendre le jeu plus juste . J’ai mis en place une contrainte pour mieux orienter l’utilisateur : L’utilisateur ne peut pas proposer de nombre inférieur à 0 ou supérieur à 10 000.
La réalisation de l’application
Le visuel de l’application
j’ai commencé ma première séance, par le design de l’application. Entre la première version de l’application et la deuxième et il y a une sacrée différence. Il faut être méthodique ! Il faut avoir des idées claires et précises pour réaliser un bon visuel sans perdre du temps. Je me rencontre maintenant que je ne l’étais pas. Ça aurait pu être utile de dessiner le design en amont sur une feuille de brouillon. J’ai perdu du temps à réagencer le visuel plusieurs fois. Un temps que j’ai aussi perdu sur la deuxième version de l’application. Au final, je trouve que j’ai quand même un bon résultat et c’est ça le principale. Voici le visuel des deux applications, dites-moi la version que vous préférez !
Pour la suite de l’article, par souci de meilleure visibilité je ne vais traiter que la version n°2. Cette version est pour moi la version la plus aboutie. Si vous souhaitez que je traite la version n°1 faite le moi savoir en commentaire, je la rajouterai.
Pour commencer facilement on va définir nos linearLayout pour avoir un visuel séparé en couche. Si vous ne voyez pas de quoi, je parle je vous invite à aller voir l’article “Comment créer vos premiers composants graphiques ?”.
J’ai décomposé mon application en 3 linearLayout soit 3 couches. Une première couche pour le titre “Trouvez le nombre…”, une deuxième couche pour la validation de la proposition de l’utilisateur et une troisième couche pour les boutons de propositions.
La première couche
La première couche reste simpliste, une couche avec un titre (un TextView) pour rappeler l’objectif pour l’utilisateur. Si vous avez vu mon précèdent article sur “Comment créer vos premiers composants graphiques ?” vous savez mettre un TextView. En revanche, on va rajouter une petite subtilité. Vous pouvez voir ci-dessous le fichier XML pour la première couche.
Vous pouvez observer qu’il y a un petit changement pour le paramètre “texte” la valeur correspond à “@string/PRIX “. Ici nous avons défini un raccourci vers la valeur de notre paramètre, dans un autre fichier XML (voir l’image ci-dessous).
Mais pourquoi fait tu ça ? bonne question ! placer nos textes dans un autre fichier XML va permettre à notre application d’être indépendant à la langue, à la taille de l’écran ou à l’orientation de l’écran. il serait inutile de créer une application pour chaque langue, ça prendrait du temps. Au lieu de ça, on passera par un fichier XML différent selon un cas précis (langue anglaise par exemple). Nous verrons ça dans un prochain article. Dans notre cas, ça n’a pas d’intérêt c’est seulement pour vous exprimer les possibilités immenses d’une application.
La deuxième couche
La deuxième couche va contenir l’affichage de la proposition de l’utilisateur et le bouton de validation de cette proposition. lorsque l’utilisateur viendra cliquer sur le bouton, l’application viendra comparer le nombre proposé par l’utilisateur au juste-prix généré aléatoirement.
La troisième couche
La troisième couche porte un aspect de grille ou de tableau. Les couches se superposent les unes dans les autres et forment ce clavier tactile . Les boutons permettent de diminuer au d’augmenter le nombre proposer par l’utilisateur. Pour réaliser ce tableau, il faut dans un premier temps placer une couche principale horizontale (linearlayout). Cette couche horizontale va permettre de former les colonnes. Dans ces colonnes on va placer un linearlayout vertical pour former les lignes du tableau. Voilà, la grille est formée ! Pour finir ils vous restent à placer les boutons dans les linearlayout verticales. Les boutons se placeront alors de façon verticale c’est-à-dire les uns en dessous des autres.
Le code de l’application
Le code de l’application reste simple, une classe qu’on appelle activité. Cette classe permet d’interagir avec les composants graphiques de l’application. La fonction OnCreate est à la fonction principale de l’activité c’est elle qui va associer les variables aux composants graphiques de l’application et d’effectuer les appelle aux autres méthodes. Avant de vous présenter la fonction Oncreate, je vais vous parler des variables globales et les autres méthodes que j’ai mises en place.
Les variables globales
Les variables globales sont globales à une classe, elles pourront être appelées par n’importe quel moment dans n’importe quelle méthode de cette classe. Dans mon précèdent article, je vous avais fait part que je rencontrais des problèmes sur mon application. Ces problèmes étaient dus à l’initialisation de certaines variables, notamment les variables liées aux composants graphiques (button, TextView). Je me suis aperçu que la déclaration de ces variables avec leurs initialisations (déclaration avec une valeur par défaut) en dehors de la fonction onCreate, posait problème et faisait crasher l’application. Ces variables particulières on besoin d’être initialisées mais ne peuvent être initialisées seulement dans la méthode onCreate.
Malheureusement, j’ai besoin de déclarer ces variables en dehors d’une fonction pour que je puisse les appeler dans d’autres méthodes. Problématique n’est ce pas ? Après quelle recherche, j’ai finalement trouvé la solution, le mot-clé “lateinit”. Ce mot-clé permet de faire comprendre à l’application que la variable déclarée sera initialisée plus tard. J’ai donc placé ce mot-clé devant mes variables (mon TextView et mon button) et j’ai ensuite initialisé ces deux variables dans la fonction OnCreate. Le tour est joué, l’application fonctionne de nouveau.
La variable monNombre est du type textview elle va me permettre d’interagir sur la valeur du chiffre que proposera l’utilisateur (modifier ou lire le nombre pour le comparer).
la variable ButtonValider est du type Button elle va me permettre d’interagir sur le bouton pour vérifier et avertir l’utilisateur que le juste-prix a été trouvé ou non.
la variable JustePrix est un entier qui contiendra la valeur du chiffre aléatoire qui restera mystérieux jusqu’à la fin de la partie.
la variable prix est un entier elle permettra de stocker la valeur sous la forme d’un entier de notre variable monNombre.
La méthode VerificationPrix
Cette méthode permet de placer la condition suivante : la proposition de nombre faite par l’utilisateur ne peut pas être inférieur à 0 et supérieur à 10000. Si la condition est respectée alors on ajoute l’entier positif ou négatif mis en paramètre à notre variable prix.
La méthode nombreAleactoire
Cette méthode comme son nom l’indique permet d’initialiser la variable justePrix par un nombre aléatoire.
La méthode ModificationPrix
Cette méthode a pour but de modifier la variable prix en fonction de l’identifiant du bouton cliqué. La méthode ModificationPrix demande en paramètre une vue (View). Ce type est une classe, pour être plus précis c’est un objet. Cet objet permet d’appeler un ensemble de méthodes liées à un composant graphique. Pour notre part, l’objet en paramètre sera un de nos boutons. Avec la méthode getId() on va récupérer l’identifiant de ce bouton. À partir de cet identifiant, on va pouvoir déterminer quel bouton a été appelé et venir appeler la méthode VerificationPrix pour modifier notre variable prix. Et pour finir, on met à jour notre textview pour qu’il affiche notre modification.
Exemple : sur cette ligne, on vérifie que l’identifiant du bouton qui vient d’être cliqué correspond bien à l’identifiant du bouton qui enlève 5000. Si les deux identifiants correspondent alors on appelle la méthode VerificationPrix avec un ajout de –5000 à notre variable prix.
La méthode VerifierJustePrix
cette méthode va venir lire le textview, le convertir en entier puis le comparer à la valeur du justePrix. la méthode retournera :
- La valeur 1 (entier de type int) si la valeur du textView est plus petite que le juste prix
- La valeur 2 si la valeur est plus grande
- La valeur 3 si la valeur est égale
La méthode JustePrix
Cette méthode s’appuie sur la méthode vérificationPrix. Lorsque qu’on appelle la méthode JustePrix, la méthode affiche sous la forme d’un pop-up un message à l’utilisateur. Le message change selon la valeur renvoyée par la méthode vérificationPrix.
- Si la valeur est 1 alors le message “C’est plus” s’affichera
- Si c’est la valeur 2 alors le message “C’est moins” s’affichera
- Si c’est la valeur 3 alors le message “Vous avez trouvé le juste Prix” s’affichera et le nombre aléatoire changera pour que l’utilisateur puisse de nouveau rejouer.
La méthode onCreate
La méthode onCreate est la fonction principale de la classe elle est exécuter au lancement de l’application. Son rôle dans cette application, c’est d’appliquer les 6 étapes ci-dessous :
- Appeler la méthode nombreAleactoire pour générer le nombre aléatoire dès la première partie.
- Initialisation mon textview avec son identifiant pour pouvoir interagir avec lui.
- Déclaration et initialisation de l’ensemble de mes boutons.
- Appelle des différentes méthodes setOnClickListener qui vont me permettre d’appeler la méthode JustePrix pour le bouton valider et les méthodes ModificationPrix pour les autres boutons lors d’un clic sur l’un des boutons
- La méthode ModificationPrix va venir modifier la valeur de mon textview
- La méthode JustePrix va venir comparer la proposition de l’utilisateur au juste-prix et lui indiquer si la valeur est plus élevéE, moins élevéE ou si l’utilisateur a trouvé le juste-prix
Merci d’avoir lu cet article ! j’espère que cela vous a aidé et je vous invite à partager cet article sur les réseaux sociaux pour qu’il puisse aider d’autres personnes.
Crédit : photo de victorio marasigan
- 11Partages