본문 바로가기

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

[Computer Craft] 17. <부록?> 지양해야할 프로그래밍 - 간단한 예제들

LUA 프로그래밍 하다보면, 어느 구간에 다가가면 엄청난 렉을 유발하는 경험이 있잖아요.

원인은 무한반복을 하는 프로그래밍 때문이죠.

물론 코드만 잘 짜여져 있다면 무한반복을 하더라도 아무런 탈이 없습니다.


아래의 여러가지 샘플 소스를 통해서 문제점을 적도록 하겠습니다.


샘플소스 1

while true do

  turtle.dig()

end


터틀이 무한으로 채광을 하는것인데요.

블럭이 있던 없건간에 터틀의 1회 채광행위가 빠르지 않아 문제점은 없어보입니다.

터틀의 이동 및 채광 함수는 속도가 빠르지 않아 큰 문제는 없습니다만, 딜레이 함수를 걸어주는게 매우 좋습니다.


샘플소스 1 - 수정

while true do

  turtle.dig()

  os.sleep(0.05)

end

딜레이를 0.05초를 걸어주면 해결됩니다.


= = = =


샘플소스 2

while true do

  print("Hello")

  os.sleep(0.001)

end


딜레이를 주었기 때문에 아무 문제가 없어 보입니다.

하지만, 컴퓨터 크래프트는 0.05초를 최소 단위로 씁니다. 0.01~0.05 는 모두 0.05초로 취급하죠.

0.001초는 당연히 0초 처리하기때문에 잘못 처리하면 엄청난 렉을 유발합니다.


샘플소스 2 - 수정

while true do

  print("Hello")

  os.sleep(0.05)

end


= = = =


샘플소스 3

local type = read()

if type > 1 then

  print('type :'..type..' > 1')

end


type 변수에 숫자를 입력해서 다른 값과비교하는 조건문입니다.

이론상으로는 문제가 없어보이지만 결과는 엉뚱한게 나오게 됩니다.

type 는 문자열로 취급하기 때문이죠.

해결방법은 tonumber함수를 써야됩니다.


샘플소스 3

local type = read()

if tonumber(type) > 1 then

  print('type :'..type..' > 1')

end


= = = =


생각나는건 여기까지이고  더 생각나면 추가로 작성할게요.