컴퓨터크래프트 강좌

[컴퓨터크래프트] 15. Player Detector

오랜만에 글올리네요

사실 이젠 기본적인걸 다 해서 쓸게 없어요

그래서 고민하던중에 이번엔 Player Detector을 써보겠습니다. (Misc Peripherals 모드 필요)

Block Player Detector (Misc Peripherals).png

이렇게 생긴 블럭입니다.

이 블럭을 우클릭하면 컴크를 이용해 플레이어의 닉네임을 읽는데 사용할수 있습니다.

이렇게 닉네임으로 도어락도 가능하죠. (나만 들어갈수 있는 완벽한 도어락!)

일단 이렇게 셋업을 해 줍니다.

그리고 밑에 컴퓨터에서 프로그래밍을 해주시면 됩니다.

도어락을 하려면, 일단 무안루프는 필수입니다. 계속 작동해야하기 때문이죠.

그럼 첫번째 줄엔 while true do,

그다음엔 컴퓨터를 저 player detector이랑 연결해야합니다.

그럼 Peripheral API를 사용하게 되는데요, 컴퓨터와 연결된 다른 블럭들, 예를들어 모니터랑 연결할때 사용하실수 있습니다.

사용 방법은 [부가기능블럭이름 설정] = peripheral.wrap("방향")입니다.

위의 사진 같은 경우에는

Player Detector을 줄여서 pd, 그리고 방향은 컴퓨터 위에 있으닌까 top이라고 했습니다.

그다음에 컴퓨터가 Player Detector의 신호를 받아야 합니다. Player Detector은 player이란 이벤트 이름으로 메세지를 보냅니다.

그 메세지를 기다리게 하려면, OS API중 os.pullEvent()를 사용해야 합니다.

이 명령은 아무 이벤트를 받을때까지 기다리는겁니다.

이걸 특정한 이벤트를 기다리게 하려면, os.pullEvnet("key") - 키보드 입력 기다리기같이 사용하실 수 있습니다.

그리고 위에 Player Detector은 player이란 이벤트로 보낸다고 했죠. 그러면 os.pullEvent("player")을 하시면 됩니다.

하지만, 여기서 더 할게 있습니다. 이제 받은 메세지를 정리해야합니다.

Player Detector은 두 줄의 메세지를 보냅니다. 이벤트 (플레이어), 그리고 플레이어 이름이죠.

저 메세지에다가 이름을 붙어주시면 됩니다.

하시는 방법은 아까 os.pullEvent("player") 앞에 event, pn = os.pullEvent("player")

이렇게 하시면 player이란 이벤트에서 받은 메세지를 첫번째꺼는 event, 두번째꺼는 pn이란 이름으로 저장을 합니다.

이렇게 하시면 됩니다.

그리고 지금까지 해본걸 실험해 보겠습니다.

이렇게 했습니다.

그리고 실행해서 플레이어 디텍터를 우클하면..

네 잘 되네요

여기까지 플레이어 디텍터였습니다.

이 다음부턴 도어락을 만들어볼껀데, 도어락은 필요 없어! 내가 알아서 할꺼야! 하시는 분들은 안보셔도 됩니다.

도어락을 하려면 플레이어 이름을 먼저 비교해야겠죠.

그럼 if를 써서 하면 됩니다.

여기서부턴 그냥 비번 도어락이랑 다른게 없으므로 스킵하겠습니다.

이렇게 했습니다.

이제 그냥 코드에 설명해드릴게요.


while true do -- 무한루프 시작

  pd = peripheral.wrap("top") -- 컴퓨터의 위에 있는 애드온에 연결

  event, pn = os.pullEvent("player") -- player이란 이벤트에서 받은 메세지를 event, pn으로 정리

  if pn == "okok99haha" then -- 만약 pn이 okok99haha이라면

    redstone.setOutput("left", true) -- 레드스톤 신호를 왼쪽에 보낸다

    sleep(1) -- 1초동안 슬립

    redstone.setOutput("left", false) -- 그리고 레드스톤 신호를 끈다

   else --만약 pn이 okok99haha가 아니라면,

    print("You are not okok99haha!") --You are not okok99haha!라고 프린트한다.

 end -- if 루프 끝내기

end -- 무한루프 끝내기


다른 닉네임이 없어서 실험해보지는 못했지만, 제데로 하신다면 이렇게 되야합니다.