私はRubyにはかなり新しく、私は解決しようとしている練習を終えることができません。これは古典的なゲームオブ・ルームです。ちょっと混乱した後、私にはうまく見えるコードを考え出しました。それは機能しません。プライベートメソッド `select 'が#<Room:0x00000001f6f5f8>(NoMethodError)のために呼び出されました
クラス内の別のメソッドの中からselectメソッドを呼び出そうとしていますが、これは配列(@position)だと確信していますが、上記のエラーメッセージが表示されます。
ここに私のコードのサンプルがあります。なぜそれが.selectが私的であるのかについての考えは歓迎されるでしょう!
class GameofRooms
attr_accessor :position
def initialize
@rooms = [
Room.new("Red",{"s" => "Green", "e" => "Blue"},"it's a red room"),
Room.new("Blue",{"w" => "Red", "e" => "Patio", "s" => "Yellow"},"it's a blue room"),
Room.new("Yellow",{"e" => "Patio", "n" => "Blue", "w" => "Green"},"it's a yellow room"),
Room.new("Green",{"n" => "Red", "e" => "Yellow"},"it's a green room"),
Room.new("Patio",{"s" => "Green", "w" => "Blue"},"lovely garden")
]
@position = @rooms[0]
end
def get_input_move
puts "Where would you like to go?"
@input = gets.chomp
if @position.exits.key?(@input)
roomName = @position.exits[@input]
room = @position.select {|selectedRoom| selectedRoom.name == roomName }
self.class.move(room)
elsif
puts "You can't go in that direction"
end
end
def self.move(room)
@position = room
@position.each do |room|
puts "You have entered the #{name} room. #{text}"
end
end
end
class Room
attr_accessor :name, :exits, :text
def initialize(name,exits,text="")
@name = name
@exits = exits
@text = text
end
end
round = GameofRooms.new
round.get_input_move