Je regroupe ici, tout ce qui touche à mes geekeries.


[Ruby] Vérifier l'appui d'une touche.

Dans un article précédent, nous avons vu comment enregistrer la saisie clavier d'un utilisateur et comment vérifier si c'est un entier.
Aujourd'hui nous allons voir comment demander l'appui d'une touche et le vérifier.

Appui d'une touche.

Avant toute chose, il faut utiliser un require.

    # Pour pouvoir utiliser STDIN.getch
    require 'io/console'
    

On commence par le début, c'est-à-dire demander l'appui d'une touche et on l'enregistre dans une variable.

    # On enregistre l'appui dans une variable
    variable = STDIN.getch
    

Vérification de l'appui.

Pour vérifier que la touche appuyée est bien la bonne, on peut vérifier la variable avec une condition.
Il faut donc indiquer en unicode la touche que l'on attend.

    # Ici nous avons choisi l'unicode de la touche "N" (en majuscule)
    # On précède l'unicode de \u
    if variable == "\u004E"
      puts "C'est bien un N"
    else
      puts "C'est pas un N"
    end
    

Pour vous aider, voici une page qui résume les touches en unicode.
/!\ À savoir, la touche entrée se dit "carriage return (CR)" et non pas enter. Son unicode est donc 000D.

Pour finir, si l'on veut que l'utilisateur ne puisse pas avancer dans le programme sans avoir saisi la bonne touche, on peut faire un boucle.
Perso je fais comme ça:

    puts "Continuer (c) Nouvelle partie? (N)"

    #amorce de la varibale pour rentrer dans la boucle
    variable = 0

    # Si variable est vide on lance une boucle
    while variable != nil
      variable = STDIN.getch
      # "N"
      if variable == "\u004E"
         puts "nouvelle partie"
          # On purge la variable pour sortir de la boucle
          variable = nil
       # "c"
      elsif variable == "\u0063"
          puts "continuer"
          #on purge variable pour sortir de la boucle
          variable = nil
      end
    end
    

Voila, comme d'habitude ce code perfectible, mais ça fonctionne.

À vous de jouer ;)

Retour à la page d'accueil