クラスを配列として設定してみてください...
player_classes = ["warrior", "thief", "archer", "wizard"]
そして、プレイヤーが有効なクラスに入ったかどうかを確認したい場合...
while ! player_classes.include? player_class
代わりは。
単一の単語には、さらに優れたイディオムを使用できます...
%w(warrior thief archer wizard)
生成する
["warrior", "thief", "archer", "wizard"]
前進する
プレーヤー クラスをハッシュに入れることで、このアプローチを一歩進めることができます。
例えば:
player_classes = {
'warrior' => {:message => "Yay a warrior!", :stats => {:strength => 20} },
'thief' => {:message => "Ooh a thief!", :stats => {:dexterity => 20} },
'archer' => {:message => "Cool! an archer" },
'wizard' => {:message => "Sweet! a wizard" }
}
次に、次のようなことができます。
while ! player_classes.key? player_class
一致が得られたら、次のようにハッシュから値を引き出すことができます。
selected_class = player_classes[player_class]
stats.merge selected_class[:stats] if selected_class[:stats]
そのプレーヤー クラスのハッシュに統計がない場合は何も起こりません。ある場合はマージされます。
たとえば、これをテストするには...
selected_class = player_classes['warrior']
stats.merge selected_class[:stats] if selected_class[:stats]
# stats is now {:strength=>20, :dexterity=>10, :charisma=>10, :stamina=>10}
selected_class = player_classes['wizard']
stats.merge selected_class[:stats] if selected_class[:stats]
# stats is now {:strength=>10, :dexterity=>10, :charisma=>10, :stamina=>10}
次に、次のようにメッセージを表示できます。
puts player_classes[player_class][:message]
これにより、プレイヤー クラスの入力をキャプチャしてからハッシュを処理するロジックが削減されます。
元のコードの修正
ハッシュを使用して単純なデータ モデルとして機能します。
次のようなコードになります。
#!/usr/bin/env ruby
stats = { :strength => 10, :dexterity => 10, :charisma => 10, :stamina => 10 }
player_classes = {
'warrior' => {:message => "Yay a warrior!", :stats => {:strength => 20} },
'thief' => {:message => "Ooh a thief!", :stats => {:dexterity => 20} },
'archer' => {:message => "Cool! an archer" },
'wizard' => {:message => "Sweet! a wizard" }
}
puts "Welcome brave adventurer, what is your name?"
player_name = gets.chomp.capitalize
puts "Well, #{player_name}, you are certainly brave! Choose your profession. (Choose from Warrior, Wizard, Archer, or Thief)."
player_class = gets.chomp.downcase
while ! player_classes.key? player_class
puts "I do not recognize #{player_class} as a valid class. Please choose between Warrior, Wizard, Archer, or Thief."
player_class = gets.chomp.downcase
end
selected_class = player_classes[player_class]
stats.merge selected_class[:stats] if selected_class[:stats]
puts selected_class[:message]
これは読みやすくもなりますが、ゲームを拡張すると、このようなコードを簡単に操作できないことがわかります。次に、関数を使用してコードをさまざまなルーチンに分割する方法について学習する必要があります。配列、ハッシュ、コレクションでできることは他にもあります。
また、Ruby の理想的な使い方である、オブジェクト指向スタイルでの Ruby のプログラミングについて、できるだけ早く学び始める必要があります。
Tutorials Point は、Ruby についてさらに学習するための非常に適切なサイトです。