2014-03-19 7 views
1

현재 루아를 사용하여 '숫자를 추측하는'게임을하고 있습니다. TouchLua +라고하는 iPad의 앱을 통해 프로그래밍하고 있습니다. 게임 모드 중 하나는 번호를 추측 할 수있는 일정한 시간이 있다는 것입니다. 나는 이것을하기 위해, 주어진 시간에서 카운트 다운하는 코 루틴을 만들 것이라고 생각했다. 어떤 이유로 코 루틴이 실행되는 동안 숫자를 입력 할 수 없습니다. 누구든지 도와 줄 수 있습니까? 여기까지 내가 지금까지 가지고있는 것이있다.루아 코 루틴 오류

target = math.random(1, 100) 
    coroutine.resume(coroutine.create(function() 
    for i = 1, roundTime do 
     sleep(1000) 
     sys.alert("tock") 
    end 
    lose = true 
    coroutine.yield() 
    end)) 
    repeat 
    local n = tonumber(io.read()) 
    if (n > target) then 
     print("Try a lower number.\n") 
    elseif (n < target) then 
     print("Try a higher number.\n") 
    else 
     win = true 
    end 
    until (lose or win) 
    return true 

답변

2

coroutine은 협업 멀티 스레딩의 한 형태입니다. 따라서 코 루틴이 실행되는 동안 다른 것은 실행되고 있지 않습니다. 코 루틴 (coroutine)은 호출자에게 제어권을 되돌려주기위한 것이고, 호출자는 코 루틴을 다시 시작하여 코 루틴이 산출 된 위치에서 계속할 수 있습니다. 이것이 어떻게 병렬 처리로 보이는지 알 수 있습니다.

그래서 귀하의 경우에 당신이 작은 수면 시간 후, 루프 내부에서 양보 할 것 : 불행하게도

co = coroutine.create(function() 
    for i = 1, roundTime do 
     sleep(1) 
     sys.alert("tock") 
     coroutine.yield() 
    end 
    lose = true 
end) 

, 당신은) (io.read 방해하지 수있는 위의 의미입니다 사용하지 마십시오. 다음 작업을 수행 할 수 있도록 이상적으로 당신은 "io.peek"기능을 원하는 것 :

while coroutine.status(co) ~= "dead" do 
    coroutine.resume(co) 
    if io.peek() then -- non-blocking, just checks if a key has been pressed 
     ... get the answer and process ... 
    end 
end 

내가 루아에서 비 블로킹 키보드 IO 인식하지입니다. TouchLua +가 C 확장을 지원한다고 가정하면 Lua에 C non-blocking keyboard input 중 일부를 노출시키는 C 확장을 만들 수 있습니다. iOS 앱이라는 점을 감안하면 의심 스럽습니다.

시간 루프 나 콜백 등이 없어 문서를 찾을 수 없습니다. 사용자가 답변을 입력 할 수있는 텍스트 상자를 만들 수있는 옵션이있는 경우 수락을 클릭해야만 소요 시간을 측정 할 수 있습니다. 시간 루프가 있으면 시간을 확인하고 시간이 만료되면 메시지를 표시 할 수 있습니다. 이 모든 것은 Corona에서 매우 쉽습니다. TouchLua +에서는 가능하지 않을 수도 있습니다.

관련 문제