작성일 2007.07.16 참고서적 – Programing Game AI by Example Lua Script 1.기초 문법 Lua 5.1.2 버전 작성일 2007.07.16 참고서적 – Programing Game AI by Example 작성자 : 10thP김성재
시작하기 앞서.. 정품이 필요하시다면 알아서 구하시길.. 설치
시작하기 앞서.. 좌측 버튼을 눌러 yohani_1155114543_wowlua.stx (WOW의 lua 스크립트 하이라이팅 출처 : wow.somegate.com ) 추가한 후 확인을 하면 에디트 플러스에서 Lua 스크립트 하이라이팅이 적용된다.
실행 방법(LuaConsole이용) Edit Plus나 메모장 등의 편집기를 이용해 작성한 후 위와 같이 “LuaConsole.exe”를 실행해 위와 같은 방식으로 스크립트 파일을 읽는다. <>가 아니고 () 괄호 입니다. (“rps.lua”) 이게 맞습니다. 지금부터 할 예제들을 하나씩 실행해보면서 익혀봅시다. 꼭!
기초 - 0. 주석 한줄 주석 : -- 여러줄 주석 : --[[ 시작 ~ 끝 ]] 여러줄 주석내에 여러줄 주석이 있으면 Error가 나므로 주의 할것.
기초 – 세미 콜론( ; ) 명령어 끝에 ; 은 붙여도 되고 안 붙여도 된다.
기초 – 1. 자료형 루아는 기본적으로 자료형에 구애 받지 않는다. 루아는 기본적으로 자료형에 구애 받지 않는다. 다만 Cpp에서 사용할때, 명시적인 변환이 요구 되기 때문에 알아두어야 한다. 루아에는 쓰레드 자료형도 있지만 사용해 본 적이 없어서 건너 뛰겠다.
기초 – 1. 자료형의 종류 nil - 그냥 NULL 이다. 변수 초기화 안하면, 이걸로 세팅 된다. number - 내부적으로 double이다. Cpp에서 사용할때 형변환 잘 해야한다. boollean - false아니면 true. (0 아니면 1)
기초 – 1. 자료형의 종류 string - 8bit의 문자열 배열이다. 연결 연산자 '..'를 사용해서 문자들을 연결가능하다. ‘..'은 연결하려는 자료가 문자가 아니면 문자로 변환시킨다. ex) age = 25 print("내나이는 "..age.."랍니다") function - 루아에선 함수도 자료형이다. 그래서 변수에도 저장 될 수 있다.
기초 – 1. 자료형의 종류(함수) 함수 정의에는 두가지 방식이 있다. Add = function(a, b) return a+b end Function Add(a,b) return a+b end Add 라는 이름의 함수 인자값 a, b를 합해서 return 해주고 있다. Ex)
Return 값이 여러개인 함수 return 값이 여러 개인 함수는 위와 같이 return 값을 받아 사용한다.
기초 – 1. 자료형의 종류 Table – 배열과 비슷하게 쓰인다. index를 문자, 문장, 숫자들을 사용 할 수 있다. 시작 index는 0이 아닌, 1 이다.
기초 – 1. Lua Table Table 생성 test_table = {} test_table[1] = 4; test_table[2] = 1.2; test_table[3] = "문장도 되요"; 또는 test_table = {1, 1.2, "문장도 되요"}; 위와 같이 동일한 index 1, 2, 3으로 사용됨
기초 – 1. Associate Table AssociateTable = {} -- 테이블 생성 AssociateTable[“one”] = 1; AssociateTable[“two”] = “둘”; Index 1은 자동적으로 처음에 입력한 값을 가르키는 것이 아니다.
기초 – 1. Table 에러 Table1.lua .위는 Table 정의시 가장 안전한 방법인, 한줄씩 정의하기 이다. .이것을 기준으로 Table 정의시 에러를 몇 가지 살펴보자.
기초 – 1. Table 에러 TableError1.lua
기초 – 1. Table 에러 TableError2.lua . 한번에 정의하는 방식을 나중에 하면, 이전에 정의했던 값들은 사라져버린다. 위에서 “숫자” 부분이 빨간 사각형 위에 써있었다면 숫자가 나올부분도 nil 값이 나왔을 것이다.
기초 – 1. Associate Table 다음과 같은 형태의 Associate Table도 가능하다 lookup={}; -- Table 생성 lookup["rock"] = {} lookup["rock"]["rock"] = "draw" lookup["rock"]["paper"] = "lose" lookup["rock"]["scissors"] = "win“ 행, 열 의 순서로 작성 되었다. (1행 Rock 부분만 설정하고 있음)
기초 – 1. Associate Table 아래와 같은 값 설정 방식도 가능하다 lookup = {} --Table 생성 lookup["rock"] = {rock = "draw", paper = "lose", scissors = "win"} lookup["paper"] = {rock = "win" , paper = "draw", scissors = "lose"} lookup["scissors"] = {rock = "lose", paper = "win" , scissors = "draw"}
기초 – 1. Associate Table 사용 위의 두개의 print문중 아무 방식으로 Table에 접근해도 상관 없다.
기초 – 1. Associate Table 사용 Associate Table로 함수를 가르키고 호출도 가능하다. 또 직접적으로 함수를 정의해줄 수 있다.
기초-2. 논리 연산자 같음 == 같지 않음 ~= 크고, 작고, 같거나 작음, 같거나 큼 등은 (C와 동일함) C / Lua 같음 == 같지 않음 ~= 크고, 작고, 같거나 작음, 같거나 큼 등은 (C와 동일함) C / Lua ! -> not && -> and || -> or
기초-3. 조건문 if if 이후에는 항상 then을 잊지 말것 else if 가 아니고 elseif 임을 잊지 말것 시작은 if로 끝맺음은 end 임. 같지 않음은 != 이 아닌 ~=임
기초-3. 조건문 if 위 표현식은 에러를 유발함 유의하기 바람 이와 같이 사용해야 올바른 실행이 보장됨
기초 – 4. 반복문 (while) 설명이 필요 없으리라 생각한다. break로 구문을 빠져나갈수 있다.
기초 – 4. 반복문 (repeat) 설명이 필요 없으리라 생각한다. break로 구문을 빠져나갈수 있다.
기초 – 4. 반복문 (for) 초기 값, 종료 값, 증가 값 순이다. 따로 변수를 선언해줄 필요 없다. break로 구문을 빠져나갈수 있다.
기초 – 4. 반복문(실수를 허용) 반복문 모두 위와 같은 실수형을 허용한다.
기초 문법 끝내면서… 아래 Random 값을 발생 시키는 아래 문장을 참조하여, 가위 바위 보를 만들어 보자. 관계테이블(Associate Table)및 함수등을 이용해서 연습 해보는 것이 좋을 것이다. (책에서 제공하는 소스를 첨부합니다.)
기초 문법 끝내면서… 기획자 분들은 여기까지만 하셔도 좋습니다. 기획자 분들은 여기까지만 하셔도 좋습니다. Class를 사용할 줄 아신다면, 다음에 올릴 ppt에 ”(3).Script에서 Class 정의하기” 부분을 살펴보시기 바랍니다. 수고하셧습니다 ^^ - 07년 10월 27일 마침.