2017-09-30 3 views
0

Y a-t-il un moyen de coder dans Ruby pour que le terminal présente deux options parmi lesquelles l'utilisateur doit sélectionner en utilisant les touches fléchées et confirmer avec Enter?Questionnaire à choix multiples dans Ruby via le terminal

Code Pseudo:

p "What is the capital of Scotland? 
user_select = gets.chomp 
p "Edinburgh" 
p "Glasgow" 
if user_select == "Edinburgh" etc etc 

Je veux savoir si cela peut être réalisé sans que l'utilisateur ait à taper dans leur réponse. Le terminal peut-il se comporter comme une interface graphique?

Répondre

1

Sinon, vous pouvez utiliser ATS :: rapide. Il vous permettra d'utiliser les touches fléchées.

Exemple de code

require 'tty-prompt' 

prompt = TTY::Prompt.new 
greeting = 'What is the capital of Scotland?' 
choices = %w(Edinburgh Glasgow) 
answer = prompt.select(greeting, choices) 
'do something' if answer == choices[0] 

Résultat

$ ruby quiz.rb 

What is the capital of Scotland? (Use arrow keys, press Enter to select) 
‣ Edinburgh 
    Glasgow 
+0

Salut Nikk, ai-je besoin de gem installer autre chose que tty-invite ici? Il ne me laisse pas utiliser les touches fléchées, il affiche simplement comme: Quelle est la capitale de l'Ecosse? ‣ Édimbourg, Glasgow –

+0

Salut James! Vous n'avez pas besoin d'installer autre chose que tty-prompt. J'ai fait une faute de frappe dans la notation% w. J'ai mis à jour la réponse, veuillez réessayer. – NikK

+0

Oui, je l'ai essayé et ça a marché! –

0

Vous pouvez utiliser quelque chose comme Highline, mais qui ne vous laissera pas utiliser les touches fléchées:

→ ruby test.rb 
1. Edinburgh 
2. Glasgow 
What is the capital of Scotland? 
→ 1 
Correct! 

code (juste pour avoir une idée):

require 'highline' 

cli = HighLine.new 

cli.choose do |menu| 
    menu.prompt = "What is the capital of Scotland?" 
    menu.choice("Edinburgh") { cli.say "Correct!" } 
    menu.choice("Glasgow") { cli.say "Wrong!" } 
end 

Pour plus d'une interface graphique, essayez d'utiliser quelque chose comme MRDialog.

Exemple:

require 'mrdialog' 

dialog = MRDialog.new 
dialog.clear = true 
dialog.title = "Quiz" 

question = "What is the capital of Scotland?" 
answers = [['E', 'Edinburg'], ['G', 'Glasgow']] 

height = 0 
width = 0 
menu_height = 2 

selected_item = dialog.menu(question, answers, height, width, menu_height) 

puts "Selected item: #{selected_item}" 

Résultat:

enter image description here

+0

Merci! C'est utile :) –

+0

Dans ce cas, vous devriez voter et/ou accepter la réponse (prenez votre temps pour l'accepter pour voir ce que les autres disent, j'essaie juste d'expliquer l'étiquette de base de StackOverflow). –

+0

J'ai fait upvote, mais mon représentant n'est pas assez élevé pour qu'il soit compté J'ai peur –