2013-07-14 2 views
-1

방에서 방으로가는 작은 게임을 만들려고합니다. 그러나 내가 의도 한 문자열 대신 다음 방의 값을 반환하려고 할 때 뭔가를 얻습니다. 그것은 다음과 같습니다클래스에서 값을 반환하고 설명 할 수없는 결과를 얻습니다.

#<Roseroom:0x007fe40984c778> 

대신

"skullroom" 

나는 $ 전역 변수를 사용하거나 아마도 내가 생에 대한거야 "문자열"

를 반환하려고 여부를이 문제가 발생 완전히 잘못된 것입니다. 그렇다면 감사할만한 제안이 있다면.

여기 내 코드입니다. 문제는 클래스 Roseroom이 "스컬 룸"을지도 클래스 (주자)에게 다시 보내지 않는 것입니다. http://codepad.org/AlpkRIGb

감사 : 그 도움이된다면

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

나는 codepad에 여기있다!

+0

"방에서 방으로가는 작은 게임을 만들려고합니다."이 게임의 작동 방식을 자세히 설명해 주시면 구조에 대해 알려 드리겠습니다. –

답변

1

"skullroom"을 반환 할 Roseroom 클래스에는 아무 것도 없습니다 ... 초기화의 마지막 줄이 return "skullroom"이므로 Roseroom.new에서 반환 된 "skullroom"을 볼 수는 있지만 인상적이지는 않습니다. 무슨 일이 ... Roseroom을하고있어 .New는 항상 새로운 Roseroom 객체를 반환 할 것이다.

당신이 도움이

def enterRose 
    i_am_here = Roseroom.new 
    i_am_here.next_room 
end 

희망 ... 당신이 할 때 그런 다음 "skullroom"

class Roseroom 
def next_room 
    return "skullroom" 
end 

을 반환 Roseroom 내에서 next_room 방법을 정의하는 더 나을 것입니다.