본문 바로가기

마인크래프트(Minecraft)/Computer Craft

[Computer Craft] 5. 키보드입력을 받아보자.

이번강좌는 Os.pullEvent 중 하나인 키보드 입력이에요. 키보드외에도 많으니 이벤트를 좀더 보시고 싶으시면

http://computercraft.info/wiki/Os.pullEvent

위 링크로 가서 보실수 있어요.


1. 강제종료를 막아보자.

여태까지 문들은 CTRL+T(강제종료) 키나 CTRL+S(시스템종료) CTRL+R(시스템 재부팅)을 통해서 프로그램을 종료 시키고 소스를 볼 수 있었죠?

이소스는 강제종료를 막아주는 강력한 기능을 수행해요.


본 필자도 왜 이게 막히는지 아직 잘 몰라요. 그냥 이걸 넣으면 강제 종료를 막을수 있다는것만 알아두세요.

os.pullEvent = os.pullEventRaw


위 소스는 시스템종료나 시스템재부팅은 막지 못하지만, 나중에 그것도 막는 방법을 꼭 알려드릴게요



2. 키보드 입력을 인식해보자.


여태까지 비밀번호는 read() 함수를 통해서 기입해서 그 값을 전송하는 기법을 썼었지만, 이번에는 이전과 달리 키보드누르는대로 입력되는 기법이에요.

os.pullEvent() 이벤트중 하나인데요.

위키의 정보에 따르면 키보드 입력은 1개의 파라미터를 가지는것으로 나와있어요.

그래서 event, param = os.pullEvent() 로 정의해두는거죠.

참고사항 : event 와 param 은 변수명입니다


event 에는 발생한 이벤트 데이터가 저장되요. 종류가 좀 다양한데, 우리는 키보드 입력한 신호를 받아야하니 key 라는 값을 쓰도록해요.

param 은 키보드를 누른 신호값인데요. 이 코드는 param 값에서 확인이 가능하지만, 번거로우니까. 이미지 첨부할게요.




3. 완성소스 예제





4. 시연영상





5. 부록 ( 복붙용 소스 )

local i = 0
local side = "right"
local delay = 3
term.clear()
term.setCursorPos(1,1)
print("First Password")
while true do
  os.pullEvent = os.pullEventRaw
  event, param = os.pullEvent()
  if event == 'key' then
    if i == 0 and param == 200 then
      i = i+1
      print("Second Password")
    elseif i == 1 and param == 208 then
      i = i+1
      print("Thrid Password")
    elseif i == 2 and param == 203 then
      i = i+1
      print("Final Password")
    elseif i == 3 and param == 205 then
      i = 0
      print("Open the door!")
      redstone.setOutput(side,true)
      os.sleep(delay)
      redstone.setOutput(side,false)
      term.clear()
      term.setCursorPos(1,1)
      print("First Password")
    elseif param == 16 then
      term.clear()
      term.setCursorPos(1,1)
      print("Shut down system")
      break
    else
      i = 0
      print("Sorry, try again!")
      os.sleep(delay)
      term.clear()
      term.setCursorPos(1,1)
      print("First Password")
    end
  end
end