800 컴퓨터 게임/803 더길드2 모드 강좌란

중급 스크립트 강좌 - 함수에서 다른 함수 불러오기

yyht 2011. 5. 10. 17:49

스크립트 프로그래밍을 하다보면 같은 기능을 여러 군데에서 불러다 써야 하는 경우가 있습니다.. 예를 들면 아래와 같은 경우입니다.

function Run()

  local result = MsgNews ( 특정값을 받기 )

  if result == 1 then
    A 처리하기
    B 처리하기
  elseif result == 2 then
    A 처리하기
    C 처리하기
  elseif result == 3 then
    A 처리하기
    D 처리하기
  else
    B 처리하기
    C 처리하기
  end

end

위 와 같은 경우 보시면 A가 세 번이 나오고 B와 C가 각각 두 번이 나옵니다.. 같은 루틴이 반복되어 나오는 것이지요.. 뭐.. 소스 자체가 간단한 경우라면 그냥 A, B, C, D등의 원본 소스를 반복해서 붙여줘도 상관이 없습니다만 각각의 루틴이 코드 수가 많아진다고 한다면 좀 문제가 달라지겠지요. 이런 경우에는 A, B, C, D 루틴을 각각 함수처리를 해 주고, 위의 예에서는 그 함수를 불러서 사용을 함으로 간단하게 처리를 할 수가 있습니다.. 아래와 같습니다.

편의상 아래 소스의 파일 이름이 myexample.lua 파일이라고 정의를 해 보겠습니다.

function A_routine()

  procedures...
  procedures...
  procedures...

end

function B_routine()

  procedures...
  procedures...
  procedures...

end

function C_routine()

  procedures...
  procedures...
  procedures...

end

function D_routine()

  procedures...
  procedures...
  procedures...

end

function Run()

  local result = MsgNews ( 특정값을 받기 )

  if result == 1 then
    myexample_A_routine()
    myexample_B_routine()
  elseif result == 2 then
    myexample_A_routine()
    myexample_C_routine()
  elseif result == 3 then
    myexample_A_routine()
    myexample_D_routine()
  else
    myexample_B_routine()
    myexample_C_routine()
  end

end

위 와 같이 구성을 합니다. 그러면 Run 함수의 내부가 간략해져서 전체적인 소스의 흐름을 알아보기가 쉬워지고 또 A_routine() 중 일부를 수정해야 할 일이 생길 때 위의 function A_routine() 함수만 건드려주면 전체가 다 바뀌게 되어서 프로그램의 유지보수도 보다 간결해지게 됩니다..

단.. 함수를 불러 올 때에는

함수의 파일이름_함수이름()

위와 같이 앞에 함수의 파일 이름이 붙는다는 사실을 유의해주세요.

위의 구조는 흑사병 모드와 나이를 먹지 않도록 하는 모드에서 사용을 했습니다.

 

P.S.: 더 길드 2에 대해 더 자세하고 다양한 정보를 얻기 원하시면 네이버의 더길드 카페(http://cafe.naver.com/theguildz2)를 방문해 보세요.