Reputation: 501
I have started to learn Ruby. I have a small project to build a game and tried to create a function that receives user input and handles it accordingly.
def Game.listener
print "> "
while listen = $stdin.gets.chomp.downcase
case listen
when (listen.include?("navigate"))
puts "Navigate to #{listen}"
break
when ($player_items.include?(listen))
Items.use(listen)
break
end
puts "Not a option"
print "> "
end
end
However, the case statement is unable to detect I have typed navigate. Is there a way to fix this or if I'm totally off can someone point me in the right direction?
I have found this way to solve my problem, is it a safe and reliable way?
while listen = $stdin.gets.chomp
case listen.include?(listen)
when listen.include?("navigate")
puts "Navigate to #{listen}"
when listen.include?("test")
puts "test"
when $player_items.include?(listen)
puts "Using the #{$player_items[listen]}"
break
else
puts "Not a option"
end
print "> "
end
Upvotes: 15
Views: 14831
Reputation: 41
You can also use :
AAA_TYPES = ["A", "B", "C"]
BBB_TYPES = ["D", "E", "F"]
case type_code
when *AAA_TYPES
#.....
when *BBB_TYPES
#.....
else
#.....
end
Upvotes: 0
Reputation: 107037
If you want to use a case
instead of an if-elsif
block, then you can write it like this (note the blank space after the case
):
while listen = $stdin.gets.chomp
case
when listen.include?('navigate')
puts "Navigate to #{listen}"
when listen.include?('test')
puts 'test'
when $player_items.include?(listen)
puts "Using the #{$player_items[listen]}"
break
else
puts "Not an option"
end
print "> "
end
Upvotes: 21
Reputation: 3073
In your case use a if elsif
if listen.include?("navigate")
# ...
elsif $player_items.include?(listen)
# ...
end
Upvotes: 0