2016-05-17 19 views
-2
class Dungeon 
    attr_accessor :player 

    def initialize(player_name) 
    @player = Player.new(player_name) 
    @rooms = [] 
    end 

    def add_room(reference, name, description, connections) 
    @rooms << Room.new(reference, name, description, connections) 
    end 

    def start(location) 
    @player.location = location 
    show_current_description 
    end 

    def show_current_description 

    puts find_room_in_dungeon(@player.location).full_description 
    end 

    def find_room_in_dungeon(reference) 
    @rooms.detect { |room| room.reference == reference} 
    end 

    def find_room_in_direction(direction) 
    find_room_in_dungeon(@player.location).connections[direction] 
    end 

    def go(direction) 
    puts "You go " + direction.to_s 
    @player.location = find_room_in_direction(direction) 
    show_current_description 
    end 

    class Player 
    attr_accessor :name, :location 

    def initialize(name) 
     @name = name 
    end 
    end 

    class Room 
    attr_accessor :reference, :name, :description, :connections 

    def initialize(reference, name, description, connections) 
     @reference = reference 
     @name = name 
     @description = description 
     @connections = connections 
    end 

    def full_description 
     @name + "\n\nYou are in " + @description 
    end 
    end 

end 

# Create the main dungeon object 
my_dungeon = Dungeon.new("Freed Bloggs") 

# Add rooms to the Dungeon 
my_dungeon.add_room(:largecae, "Large Cave", "a large cavernous cave", {:west => :smallcave}) 
my_dungeon.add_room(:smallcave, "Small Cave", "a small, claustrophobic cave", {:east => :largecave}) 

# Start the dungeon by placing the player in the large cave 
my_dungeon.start(:largecave) 

答えて

1

は最終的に、あなたの問題は、タイプミスになる:

my_dungeon.add_room(:largecae, "Large Cave", "a large cavernous cave", {:west => :smallcave}) 

あなたは:largecaeという名前の部屋を添加し、次いで最初の名前に欠けている「V」 - 注my_dungeon.start(:largecave)と呼ばれてきました。

あなたはnilfull_descriptionを呼び出しているのでshow_current_descriptionが、結果はnilあるfind_room_in_dungeon(@player.location)呼び出します。

$ ruby /tmp/test.rb 
/tmp/test.rb:19:in `show_current_description': undefined method `full_description' for nil:NilClass (NoMethodError) 
     from /tmp/test.rb:15:in `start' 
     from /tmp/test.rb:69:in `<main>' 

注エラーがfull_descriptionnilため、ないRoomのために定義されていないことを伝えるされていること:魚する人を教える

、単にコードを実行し、完全なエラーを見ていると、答えにつながります。

関連する問題