Question

I'm trying to make a small game where you go from room to room but when I try to return the value for the next room instead of being the string I intended I get something that looks like this:

 #<Roseroom:0x007fe40984c778>

instead of

  "skullroom"

This happens whether I use a $global variable or try to return "a string"

Perhaps I'm going about this completely wrong, so if you have any suggestions that would be appreciated as well.

Here is my code, the problem is with class Roseroom not being about to send "skullroom" back to the map class (which is the runner).

$next_room = ''

class Engine

def initialize(stage)
    @stage = stage
    puts "succesfully initialized game"
    @map = Map.new(@stage)
end
end

class Map
def initialize(start)
    @start = start
    @rooms = {"roseroom" => method(:enterRose),
            "skullroom" => method(:enterSkull)
        }
    runner(@rooms, @start)
end

def runner(map, start)
    $next_room = start
    while true

        room = map[$next_room]
        puts $next_room
        $next_room = room.call()
        #method(:enterSkull).call() #This work if I call it directly

    end
end

def enterRose()
    @roseroom = Roseroom.new
end

def enterSkull()
    @skullroom = Skullroom.new
end

end

class Roseroom
def initialize
    puts "succesfully initialized roseroom"
    #$next_room = "skullroom"
    return "skullroom"

end

def exit

end
end

class Skullroom
def initialize
    puts "succesfully initialized skullroom"
    Process.exit(1)
end
end

game = Engine.new("roseroom")

I have it here on codepad if that helps: http://codepad.org/AlpkRIGb

Thanks!

Was it helpful?

Solution

There is nothing in Roseroom class that would return "skullroom"... you may be under the impression that because the last line in initialize is return "skullroom" you would then see "skullroom" returned on a a Roseroom.new but that's not what happens... doing Roseroom.new will always return a new Roseroom object.

you'd be better off defining a next_room method within Roseroom that returns "skullroom"

class Roseroom
def next_room
  return "skullroom"
end

Then when you do...

def enterRose
  i_am_here = Roseroom.new 
  i_am_here.next_room
end

Hope this helps.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top