2017-03-09 2 views
2

저는 Ruby에 대해 처음이므로 제안 할 수있는 조언을 제공해주십시오. 고맙습니다. 오늘 나는 거의 끝났습니다. 결국 간단히 다시 끝내고 싶습니다. 사용자가 다시 게임을하고 싶어하는지 묻습니다. 나는 If Else 문을 수행하는 방법을 알고 있지만 게임이 시작되는 코드 줄로 돌아갈 방법은 모르겠다. 나는 약간의 연구를했고 goto라고 불리는 것을 발견했지만 그것을 사용해서는 안된다는 것을 발견했다. 어쨌든 모든 것을 망쳐 놓지 않고 특정 코드 행으로 갈 수 있습니까? 모든 도움에 감사드립니다.특정 코드 행으로 건너 뛰는 방법

의 예는 다음과 같습니다

print "Would you like to play again?" 
puts "Yes or no" 
again = gets.chomp! 
again.capitalize! 

if again == "Yes" 
(Code to send back to line 9) 
end 
+0

루비는 실제로 'goto' 문을 가지고 있지 않으며 실제로 원하지 않습니다. 코드를 즉시 유지 보수 할 수 없게 만듭니다. Ruby가 문제에 접근하는 방법을 설명 할 수 있도록 수행하려는 작업에 대한 구체적인 예를 들려 줄 수 있습니까? – tadman

+0

대부분의 게임은 사용자 또는 다양한 인게임 타이머에 의해 시작된 작업이 처리되는 [* 이벤트 루프 *] (https://en.wikipedia.org/wiki/Event_loop) 개념을 중심으로 구성됩니다. 각 이벤트는 일반적으로 순서대로 개별적으로 처리됩니다. 여기서 이벤트는 버튼을 누르거나 마우스를 움직일 수 있습니다. 특정 코드 행으로 되돌아 갈 필요가 없습니다. 왜냐하면 핸들러가 끝나면 단지 루프백되고 의도적으로 다른 일을하기 때문입니다. – tadman

+0

'loop do .... end' 루프에 코드를 넣으십시오. 그것은'break' 또는'break x' ('x'는 반환 값)가 발생할 때까지 반복됩니다. 어떤 것은'while (true) ... end'를 사용하지만,'loop do'을 가장 선호합니다. 간단한 예제를 포함하여 자세한 내용은 [Kernel # loop] (http://ruby-doc.org/core-2.3.0/Kernel.html#method-i-loop)를 참조하십시오. –

답변

1

당신이 만족스러운 답변을 얻을 때까지 당신이 뭔가를 반복 할 수있는 곳의 요지는 loop 접근 방식을 사용하고 있습니다 :

def play_again? 
    loop do 
    print "Would you like to play again? Y/N" 
    again = gets.chomp.capitalize 

    case (again) 
    when 'N' 
     return false 
    when 'Y' 
     return true 
    else 
     puts "Huh? I don't know what that means." 
    end 
    end 
end 

는 그런 다음에이 통합 할 수 있습니다 당신의 주 프로그램 :

begin 
    run_game 
end while play_again? 

계속 실행됩니다. play_again?false을 반환 할 때까지 게임을 시작합니다.이 경우 "N"을 입력해야합니다.

+0

도움 주셔서 감사합니다. 실행시에만 run_game은 정의되지 않은 변수입니다. 무엇이라도 설정해야합니까? 당신의 응답을 주셔서 감사합니다. – Alex

+0

그건 게임이하는대로 넣을 수있는 스텁입니다. 당신은 당신이 좋아하는 무엇이든 그것을 부를 수 있습니다, 또는 바로 게임 코드를 거기에 넣을 수 있습니다. 메소드 안에 넣어두면 프로그램의 전반적인 구조가 더 분명해진다. – tadman

+0

고맙습니다. 지금은 잘 작동하고 있습니다. 도와 줘서 고마워. – Alex

관련 문제