2013-07-14 62 views
-1

我試圖做一個小遊戲,你從一個房間到另一個房間,但是當我嘗試返回下一個房間的值而不是字符串時,我打算獲得一些東西看起來像這樣:從班級返回值,並獲得莫名其妙的結果

#<Roseroom:0x007fe40984c778> 

,而不是

"skullroom" 

出現這種情況我是否使用$全局變量或者嘗試返回「字符串」

也許我會約THI這是完全錯誤的,所以如果你有任何建議,也將被讚賞。

這裏是我的代碼,問題是類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

謝謝!

+0

「我試圖做一個小遊戲,你從一個房間到另一個房間」,你能否詳細說明這個遊戲是如何工作的,我會試着給你一些關於結構的指導。 –

回答

1

Roseroom類沒有什麼能夠返回「skullroom」......你可能會覺得因爲初始化的最後一行是return "skullroom",你會看到「skullroom」在Roseroom.new上返回,但那不是發生什麼......做Roseroom.new將始終返回一個新的Roseroom對象。

你最好的方法是定義中Roseroom一個next_room方法,當你這樣做會返回 「skullroom」

class Roseroom 
def next_room 
    return "skullroom" 
end 

則...

def enterRose 
    i_am_here = Roseroom.new 
    i_am_here.next_room 
end 

希望這有助於。