본문 바로가기

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

[Computer Craft] 3. 비밀번호 문 예제

주절주절

하나하나 알려주는것보다 샘플 소스를 통해서 따라 치면서 배우게 하는게 어떨까 싶어서 중간 과정 싹 잘라내고 강좌를 하기로 변심했어요.



1. 변수를 지정하자.

음. 어린애들도 본다고 가정해서 변수의 의미를 쉽게 설명해볼게요.

초등학교때 배우는 산수문제중에서

1+□=5

이런 문제가 있잖아요?

□ 는 4가 되겠지만, 답을 구하고자 하는게 아니고 □ 에 넣을수 있는 어떤 임의의 수를 변수라 할수 있어요.

□+□=10 이러면 □ 에는 다양한 숫자를 넣을수 있죠?

변수는 즉, 임의의 값을 넣을수 있는 어떠한 값이라고 개념을 정하도록해요..


컴퓨터크래프트에서는 local 을 붙여서 변수를 정할수 있어요.


local password = 'chick' -- password 라는 변수에 문자열 chick 를 대입
local delay = 5 -- delay 라는 변수에 상수 5 를 대입
local side = 'right' -- side 라는 변수에 문자열 right  대입


위에서 대입 이라는 말을 썼지만, 틀린말이 아닙니다.

수학적으로 보면 같다 라는 의미가 있겠지만, 프로그래밍에서는 대입이라는 말을 씁니다.

프로그래밍에서는 같다를 표현할떄는 '==' 를 씁니다.


예를 들자면 5 == 5 이런게 같다 라는 의미로 쓰이죠. 참고하세요.


2. 무한 반복을 하자.

lua 언어에서는 for while repeat 세가지의 반복적인 업무를 수행할수 있는데 저는 while 문을 쓸게요


while 문은 아래처럼 쓸수 있어요.

while (조건문) do

[수행코드]

end


while 에는 항상 do 와 end 를 넣어야해요. 


우리는 무한 반복을 해야하므로 true 를 쓰도록하죠.


while true do

[수행코드]

end

이렇게요 :D


3. 터미널을 제어하자

term.clear() : 화면을 깨끗하게 청소 하는 기능이에요. 컴퓨터에서 clear 명령어를 치면 이 기능이 수행되죠.

term.setCursorPos(1,1) : 커서의 위치를 재 조정하는것인데요. 좌측상단 쪽으로 커서를 이동 시켜주는 기능입니다. 여기서는 x,y를 1, 1로 옮기게 해두었죠.



4. 메시지를 출력하자.

컴퓨터 크래프트는 메시지를 출력하는게 있는데요 하나씩 알아가볼게요

write("text") : write 는 문자열을 출력할수 있는데, 사용하고나면 새로운 줄로 내려가지 않아요.


예를 들어

write("Hello") 라고 치면 화면에선

Hello 라는 글이 나오고 o 뒤에 커서가 깜박이게 되죠.


print("text") : print는 write와 사용방법은 같은데 차이점은 문자를 출력하면 새로운 줄로 바꿔주는 기능이 있어요. c 에서는 \n 와 같죠.


print("Chick fly!!!") 라는 것을 사용하면

Chick fly!!!

_

이렇게 커서가 아래로 내려가게 됩니다.. 둘의 차이점은 확실하니까 꼭 익혀두세요.


5. 키입력을 받자.

컴퓨터크래프트는 키입력 문자열을 받기위해서는 read() 라는 함수를 사용해요.

  local input = read()

이렇게 쓰면 input 이라는 변수에 우리가 타이핑하는 문자열로 저장해요.

주의하실점은 숫자1을 입력했다고 해서 그 값은 숫자1이 아니라 문자열 '1' 로 취급한다는점이죠.

즉, read() 함수는 문자열로 받는다고 보시면 됩니다.



6. 주석을 달자.

C에는 // 와 /* */

PHP에는 // 와 /* */ 처럼 C와 같죠...

lua에서는 -- 를 쓰면 주석으로 쓸수 있습니다.

주석은 컴퓨터가 해석을 하지 않는부분으로써, 우리가 메모할때 많이 쓰게 되요.


사용 예:

-- i don't know

local i = 0 -- this is a number.



7. 완성된 소스의 예제 ( 참고 하시라고 주석 달아뒀습니다)


local password = 'chick' -- password 라는 변수에 문자열 chick 를 대입
local delay = 5 -- delay 라는 변수에 상수 5 를 대입
local side = 'right' -- side 라는 변수에 문자열 right  대입


while true do -- 무한 반복문 시작 (참고로 true 는 참 이라는 의미가 있습니다.
  term.clear() -- 화면을 청소한다
  term.setCursorPos(1,1) -- 커서를 왼쪽위(1,1)로 올린다.
  write("Password : ") -- Password : 라는 메시지를 출력한다. 새 줄로 넘어가지 않는다.
  local input = read() -- input 변수에 키보드 입력을 대기중이다.
  term.clear() -- 화면을 청소한다.
  term.setCursorPos(1,1) -- 커서를 왼쪽위(1,1)로 올린다.
  if password == input then -- 조건문입니다. 변수 password 와 input 변수가 같으면 아래 명령어 end 나 else 구문이 나오기 전까지 계속 수행합니다.
    print("Open the door")
    redstone.setOutput(side,true)
    os.sleep(delay)
    redstone.setOutput(side,false)
  else -- if 에 있는 조건과 맞지 않을때 수행합니다.
    print("Sorry, try again")
    os.sleep(delay)
  end -- 조건문을 종료합니다.
end -- 반복문을 종료합니다.



8. 마크안의 화면 이미지.




9. 시연영상





10. 문제점

현 비밀번호의 문제점은 비밀번호가 노출된다는 점입니다.

다음강좌에서는 비밀번호를 가리는 기법을 간단히 소개 하도록 하겠습니다.



11. 부록 (복붙용 소스)

local password = 'chick'
local delay = 5
local side = 'right'

while true do
  term.clear()
  term.setCursorPos(1,1)
  write("Password : ")
  local input = read()
  term.clear()
  term.setCursorPos(1,1)
  if password == input then
    print("Open the door")
    redstone.setOutput(side,true)
    os.sleep(delay)
    redstone.setOutput(side,false)
  else
    print("Sorry, try again")
    os.sleep(delay)
  end
end