0

我用红宝石制作了口袋妖怪周末发现者。这需要很多话。你能建议编写这段代码有点漂亮和复杂吗?

菜单如下。

puts "Which type of Pokemon do you want to know weaknesses? 

Menu

  1 Normal
  2 Fire
  3 Water
  4 Electric
  5 Grass
  6 Ice
  7 Fighting
  8 Poison
  9 Ground
  10 Flying
  11 Psychic
  12 Bug
  13 Rock
  14 Ghost
  15 Dragon
  16 Dark
  17 Steel
  18 Fairy

然后我获得用户的响应并打印出他们选择的弱点。

  type = gets.to_i

  case type 
  when 1 #Normal
    puts "Fighting"
  when 2  #Fire
    puts "Ground, Rock, Water"
  when 3 #water
    puts "Fire, Ground, Rock"
  when 4 #Electric
    puts "Ground"
  when 5 #Grass
    puts "Bug, Fire, Flying, Ice, Poison"
  when 6 #Ice
    puts "Fighting, Fire, Rock, Steel"
  when 7 #Fighting
    puts "Fairy, Flying, Psychic"
  when 8 #Poison
    puts "Ground, Psychic"
  when 9 #Ground
    puts "Grass, Ice, Water"
  when 10 #Flying
    puts "Electric, Ice, Rock"
  when 11 #Psychic
    puts "Bug, Dark, Ghost"
  when 12 #Bug
    puts "Fire, Flying, Rock"
  when 13 #Rock
    puts "Fighting, Grass, Ground, Steel, Water"
  when 14 #Ghost
    puts "Dark, Ghost"
  when 15 #Dragon
    puts "Dragon, Fairy, Ice"
  when 16 #Dark
    puts "Bug, Fairy, Fighting"
  when 17 #Steel
    puts "Fighting, Fire, Ground"
  when 18 #Fairy
    puts "Poison, Steel"
  else
    puts "Error"
  end
4

1 回答 1

2

我认为您可以从游戏数据的结构化开始:

game_data = {
  1 => ["Normal", "Fighting" ],
  2 => ["Fire", "Ground, Rock, Water"],
  3 => ["Water", "Fire, Ground, Rock"],
  4 => ["Electric", "Ground"],
  5 => ["Grass", "Bug, Fire, Flying, Ice, Poison"],
  6 => ["Ice", "Fighting, Fire, Rock, Steel"],
  7 => ["Fighting", "Fairy, Flying, Psychic"],
  8 => ["Poison", "Ground, Psychic"],
  9 => ["Ground", "Grass, Ice, Water"],
  10 => ["Flying", "Electric, Ice, Rock"],
  11 => ["Psychic", "Bug, Dark, Ghost"],
  12 => ["Bug", "Fire, Flying, Rock"],
  13 => ["Rock", "Fighting, Grass, Ground, Steel, Water"],
  14 => ["Ghost", "Dark, Ghost"],
  15 => ["Dragon", "Dragon, Fairy, Ice" ],
  16 => ["Dark", "Bug, Fairy, Fighting"],
  17 => ["Steel", "Fighting, Fire, Ground"],
  18 => ["Fairy", "Poison, Steel" ]
}

现在你可以使用它了:

puts "Which type of Pokemon do you want to know weaknesses?\nMenu"
game_data.each { |point, data| puts "#{point} #{data.first}" }
type = gets.to_i
return "Error" unless game_data.has_key?(type)
puts game_data[type].last

对未来的建议,如果 case 语句变得太大,最好考虑使用Hash

于 2020-02-26T21:47:55.680 回答