-1

我正在尝试制作一个小游戏,您可以从一个房间到另一个房间,但是当我尝试返回下一个房间的值而不是我想要的字符串时,我得到的东西看起来像这样:

 #<Roseroom:0x007fe40984c778>

代替

  "skullroom"

无论我使用 $global 变量还是尝试返回“字符串”,都会发生这种情况

也许我完全错了,所以如果你有任何建议也将不胜感激。

这是我的代码,问题在于 Roseroom 类不会将“skullroom”发送回地图类(即跑步者)。

$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")

如果有帮助,我在键盘上有它:http: //codepad.org/AlpkRIGb

谢谢!

4

1 回答 1

1

Roseroom 类中没有任何内容会返回“skullroom”......您可能会有这样的印象,因为初始化的最后一行是return "skullroom"您会看到“skullroom”在 Roseroom.new 上返回,但事实并非如此......执行 Roseroom.new 将始终返回一个新的 Roseroom 对象。

你最好在 Roseroom 中定义一个返回“skullroom”的 next_room 方法

class Roseroom
def next_room
  return "skullroom"
end

那么当你做...

def enterRose
  i_am_here = Roseroom.new 
  i_am_here.next_room
end

希望这可以帮助。

于 2013-07-15T03:25:26.957 回答