Vous connaissez certainement le plus ou moins. Vous avez peut être même une petite version qui traîne sur votre ordinateur !
Nous allons mettre ce jeu un peu à jour en le refaisant mais avec une interface graphique. Je vais donc vous faire réaliser la version minimale du jeu, ce sera à vous d’ajouter toutes les options que vous voudrez. Le but ? Obtenir un plus ou moins le plus complet au monde !
Consignes
Bon, les règles du plus ou moins sont très simples. L’ordinateur tire un nombre compris entre 0 et 100 et l’utilisateur doit le trouver. Le programme lui indiquant seulement si le nombre cherché est supérieur ou inférieur que le nombre entré.
Voici la version que je vous conseille de commencer à faire :
Ça ne se voit pas, mais en appuyant sur la touche Entrée, ça fonctionne aussi. De plus, si vous comptez utiliser vous aussi un Gtk.SpinButton
pensez à bien désactiver l’incrémentation par les boutons + et - ! Sinon l’utilisateur a juste à rester appuyé jusqu’à voir la réponse apparaître.
Correction
Et hop, voici la correction de la version basique.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #!/usr/bin/env python3 # coding: utf-8 from gi.repository import Gtk from random import randint def on_validate(widget, label, entry=None): ''' Fonction callback appellée quand l'utilisateur valide un nombre ''' global random_nb # Soit c'est un bouton qui est passé dans l'agument widget, soit le SpinButton # On vérifie : if entry is not None: user_nb = int(entry.get_value()) else: user_nb = int(widget.get_value()) # On change le texte if user_nb > random_nb: label.set_text('La solution est inférieur à {}.'.format(user_nb)) elif user_nb < random_nb: label.set_text('La solution est supérieur à {}.'.format(user_nb)) else: label.set_text('Bravo, vous avez trouvé la bonne réponse !') def build_interface(): ''' Construit toute l'interface et en retourne le layout la contenant ''' # Le layout principal main_layout = Gtk.Grid() # Espacement entre les colonnes et entre les lignes main_layout.set_column_spacing(6) main_layout.set_row_spacing(6) # On autorise l'homogénéité des lignes main_layout.set_column_homogeneous(True) # La zone de texte où l'utilisateur va pouvoir entrer un nombre # Notre adjustement va de 0 à 100 en empechant l'incrémentation adjustment = Gtk.Adjustment(0, 0, 100, 0, 10, 0) # Le label qui affichera l'état de la partie printer = Gtk.Label('Rentrez un nombre et validez !') number_entry = Gtk.SpinButton() number_entry.set_adjustment(adjustment) # On lui assigne l'ajustement number_entry.set_numeric(True) # On accepte seulement les nombres # L'entrée sera passée automatiquement en paramètre pas besoin de le préciser number_entry.connect('value-changed', on_validate, printer) # Le bouton valider ok_btn = Gtk.Button(label='Valider') # Ici l'entrée n'est pas passée automatiquement, on le fait manuellement ok_btn.connect('clicked', on_validate, printer, number_entry) # On les attache tous main_layout.attach(number_entry, 0, 0, 1, 1) main_layout.attach(ok_btn, 1, 0, 1, 1) main_layout.attach(printer, 0, 1, 2, 1) # On retourne le layout principal contenant toute notre interface return main_layout if __name__ == '__main__': window = Gtk.Window() window.set_title('Plus ou moins') # On assigne un titre à notre fenêtre window.set_border_width(10) # Des bordures de 10px pour l'esthétisme window.connect('delete-event', Gtk.main_quit) main_layout = build_interface() window.add(main_layout) # On tire un nombre aléatoire entre 0 et 100 compris random_nb = randint(0, 100) window.show_all() Gtk.main() |
Améliorations
Ce programme est beaucoup trop simple ! Voici quelques idées d’amélioration :
- Un bouton pour recommencer une partie
- Sélecteur de niveau, de 0 à 100 étant le niveau bac à sable !
- Une icône pour le programme
- Un système de score
- Un classement des meilleurs scores
- Une sous fenêtre expliquant les règles
- Faire la version la plus horrible du siècle
Les possibilités sont infinies. Je suis sûr que vous allez réussir à faire quelque chose de super !
J’espère que vous vous serez bien amusé avec ce plus ou moins. Vous pouvez passer désormais passer à la seconde partie.