SlideShare ist ein Scribd-Unternehmen logo
1 von 55
C++과 Lua Script
연동하기
NHN NEXT 이선협
넌 누구냐?!
아이엠 그라운드 자기소개하기
• Python, Ruby같은 스크립트 언어
• 다른 스크립트 언어보다 가볍다.
• 프로그램에 내장되는 스크립트이다.
• 프로그램과 통신이 가능하다.
• 데이터 교환
• API 상호 호출
• C, C++언어에 이식하기 편하다.
• 가비지 컬렉터가 있다.
• 쉽다.
너 뭐하는 애니?
• 와우에서 루아 스크립트를 사용한다는 얘기는 이미 유명하다.
• 사용자 인터페이스 (UI)
• 캐릭터 애니메이션
• 월드맵 조정
• 네버윈터 나이츠, ToME, 원숭이 섬으로부터 탈출, 앵그리버드
등 ... 게임 제작에 많이 쓰임..!
게임 개발에 자주 쓰입니다!
널 왜 사용할까?
코딩 빌드기획 테스트
코딩 빌드기획 테스트
코딩량이 많아지면...
코딩 빌드기획 테스트
코딩량이 많아지면... 장난아니게 오래걸림...
코딩 빌드기획 테스트
코딩량이 많아지면... 장난아니게 오래걸림... 또 수치를 변경해야하면...
코딩 빌드기획 테스트
코딩량이 많아지면... 장난아니게 오래걸림... 또 수치를 변경해야하면...빡 침!
코딩 빌드기획 테스트
코딩량이 많아지면... 장난아니게 오래걸림... 또 수치를 변경해야하면...빡 침!
이럴때 필요한 것은?
• 외부의 데이터를 기반으로 프로그램을 제작하는 아키텍처
데이터 주도 프로그래밍
게임
게임
*.ini
게임 환경 설정
게임
*.ini
게임 환경 설정
*.xml
수치 데이터
게임
*.ini
게임 환경 설정
*.xml
수치 데이터
*.lua
게임 로직
게임
*.ini
게임 환경 설정
*.xml
수치 데이터
*.lua
게임 로직
*.fx
게임 이펙트
게임
*.ini
게임 환경 설정
*.xml
수치 데이터
*.lua
게임 로직
*.fx
게임 이펙트
외에도 프로그래머가 직접
데이터 파일을 만들 수 있다.
ex) 0,1로 이뤄진 맵파일..ㅋㅋ
코딩 빌드기획 테스트
이런 개발 과정이..
스크립트 코딩기획 테스트
이렇게 변했습니다!
결론
저는 게임의 가장 핵심이되는 ‘로직’부분을
스크립트로 처리 가능합니다.
• Windows용 설치 파일
• https://code.google.com/p/luaforwindows/
루아 설치하기
• 설치된 폴더의 lua.exe 실행
루아 써보기 - 1
• 루아의 변수는 기본적으로 전부 전역 변수이다.
• 스크립트 전체에서 접근 가능하며 끝날 때까지 유지된다.
• 지역변수는 ‘local’ 키워드를 사용하여 사용 가능하다.
• 가능한 곳에서는 지역변수를 사용하는 것이 좋다.
• ex)
• a = 2 // 전역변수
• local a = 2 // 지역변수
루아 - 변수
• nil
• 다른 언어의 NULL과 유사하다.
• 변수에 nil을 대입하면 삭제된다.
• boolean
• 다른 언어처럼 true, false 값만 가짐
루아 - 변수
• string
• 다른 스크립트 언어처럼 문자열 처리에 강하다.
• 역슬래시를 이용하여 특수문자 사용 가능 (줄바꿈, 탭, 따옴표 등)
• 수치와 문자열을 자동으로 상호 변환
• ex) “8”+8 -> 16, “8+8” -> “8+8”, “hello”+8 -> ERROR
• number
• 루아는 정수와 소수를 구분 하지 않고 모든 숫자를 실수형으로 처리한
다.
루아 - 변수
• table
• C++의 std::map, Python의 dict와 유사하다.
• number형과 string형을 모두 인덱스 할 수 있다. (nil은 제외)
• 크기가 고정되어 있지 않다. (Array가 아님)
• 값, 변수가 아닌 객체이다.
• 다른 언어와 달리 0이 아닌 1부터 시작한다.
루아 - 변수
• 산술 연산자
• +, -, *, /
• 관계 연산자
• <, >, <=, >=, ==, ~=
• 논리 연산자
• and, or, not
루아 - 연산자
• if (조건식) than (실행문)
else if (조건식) than (실행문)
else (실행문)
end
루아 – 명령문 (if)
• while (조건식) do
(실행문)
end
루아 – 명령문 (while)
• C++의 do ~ while과 유사
• repeat
(실행문)
until (조건식)
루아 – 명령문 (repeat)
• for (초기화), (조건식), (증감) do
(실행문)
end
• 증감을 생략하면 자동으로 1씩 증가
루아 – 명령문 (numeric for)
• table의 요소를 한 번에 하나씩 접근할 때 주로 사용
• pairs() / ipairs() 함수와 함께 사용
• ex)
• days = {“Sunday”, “Monday”, ... “Saturday”}
• for index, value in pairs(days) do
print(index, value)
end
• result)
• 1 Sunday
2 Monday
...
루아 – 명령문 (generic for)
• function 함수이름(인자)
함수내용..
return 반환값
end
루아 – 함수
• arg라는 table을 만들어서 가변 인수를 담음
• 가변 인수는 마침표 세개(...)로 구분
• arg.n에 가변 인수의 개수를 저장
• function 함수이름(a, b, ...)
print(a[1])
end
루아 – 함수
• 루아의 함수는 결과를 여러 개 반환 가능
• function 함수이름()
return 1, 2, “asdf”
end
루아 – 함수
더 자세한 정보는
assert, dofile, math, tonumber, tostring, string., table.
등 다양한 기본 라이브러리 함수
assert, dofile, math, tonumber, tostring, string., table.
등 다양한 기본 라이브러리 함수
더 자세한 정보는
• 환경은 Windows / Visual Studio 2013
• Visual Studio 프로젝트 Directory 설정
• Include
• C:Program FilesLua5.1include
• Link
• C:Program FilesLua5.1lib
• C:Program Files (x86)Lua5.1lib 디렉토리에서
dll파일 프로젝트에 복사
C++과 루아 스크립트 연동
• lib파일과 header파일을 include한다.
• 루아는 C로 만들어졌기 때문에 extern “C”를 지정해준다.
C++과 루아 스크립트 연동
• 다음 코드는 lua.exe를 실행시킨 것 처럼 루아를 사용할 수 있게 해준다.
C++과 루아 스크립트 연동
• 출처 : http://sweeper.egloos.com/viewer/2821116
C++과 루아 스크립트 연동
• 스크립트 파일을 작성하고 C++에서 열고 실행시킬 수 있다.
C++과 루아 스크립트 연동
• C++에서 Lua의 함수를 호출 시킬 수 있다.
C++과 루아 스크립트 연동
• 역으로 Lua에서 C++ 함수를 호출 할 수 있다.
C++과 루아 스크립트 연동
• Lua를 좀 더 쉽게 연결할 수 있도록 도와주는 C++ 라이브러리
• MIT 라이센스
• boost 라이브러리가 필요하다.
• 설치
• http://sourceforge.net/projects/luabind/
• 압출을 푼뒤 빌드한다.
• 정적 라이브러리로 빌드 (Visual Studio 2013 기준)
• 이 과정에서 boost, lua 라이브러리 필요
• 디버그, 릴리즈 둘 다 빌드
• 나온 결과물을 프로젝트에 포함한다. (lib)
luabind
• 이제 사용하면된다.
• 자세한 사용 방법은 doc 디렉토리를 찾아보면 나와있다.
• 각종 example도 압축 파일 내부에 존재한다
luabind
주의할 점
• 배보다 배꼽이 더 커질 수 있다.
• 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가
작업시간이 더 오래 걸릴 수 있음
• 스크립트에 대해서 잘 모른다면 C++에서 작성하는게 좋을 수
있다.
• 여러 C++의 함수를 Lua로 바인드하기 위해서는 시간이 들고 소스 코
드가 복잡해질 가능성이 있다.
• 디버깅이 어렵다.
• 전문 개발 툴이 없다.
• 로딩과 실행 속도가 느리다.
주의할 점
• 배보다 배꼽이 더 커질 수 있다.
• 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가
작업시간이 더 오래 걸릴 수 있음
• 스크립트에 대해서 잘 모른다면 C++에서 작성하는게 좋을 수
있다.
• 여러 C++의 함수를 Lua로 바인드하기 위해서는 시간이 들고 소스 코
드가 복잡해질 가능성이 있다.
• 디버깅이 어렵다.
• 전문 개발 툴이 없다.
• 로딩과 실행 속도가 느리다.
제대로 사용하려면 팀원 각각의 역활 수행을 제대로 해야한다.
ex)
코어 프로그래머 -> 몬스터 FSM을 루아로 바인드함
컨텐츠 프로그래머, 기획자 -> 바인드된 함수를 이용하여 몬스터 AI 제작
http://www.gamedevforever.com/12
(박민근 교수님이 쓰신 루아 사용에 대한 비판 글)
• http://www.gamedevforever.com/12 (알콜코더 민군교수님의 자료)
• http://sweeper.egloos.com/viewer/2821116
• http://sweeper.egloos.com/viewer/2821919
• http://www.gpgstudy.com/forum/viewtopic.php?t=5738&sid=
38357b68a309f7e7bf296445828c1874
• http://bombfox.tistory.com/45
• http://andromedarabbit.net/wp/cplusplus_cli_lecture_2009_06/
• http://hoidu.tistory.com/
• http://blog.naver.com/PostList.nhn?blogId=sunxodid79
참고 자료
감사합니다

Weitere ähnliche Inhalte

Was ist angesagt?

MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델Seungmo Koo
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012devCAT Studio, NEXON
 
NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할Hoyoung Choi
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화Jaeseung Ha
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법Chris Ohk
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지강 민우
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019devCAT Studio, NEXON
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)MinGeun Park
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가Seungmo Koo
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건강 민우
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들MinGeun Park
 
[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐MinGeun Park
 

Was ist angesagt? (20)

MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
 
[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐
 

Ähnlich wie C++과 Lua script연동

이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초Yu Yongwoo
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017devCAT Studio, NEXON
 
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Eunchong Yu
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaLazy Ahasil
 
Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기Joonsung Lee
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon
 
A tour of C++ : the basics
A tour of C++ : the basicsA tour of C++ : the basics
A tour of C++ : the basicsJaewon Choi
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차HyunJoon Park
 
github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기newdeal2
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기NAVER D2
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅Youngmin Koo
 
[2021 오픈소스 컨트리뷰션 아카데미] Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)
[2021 오픈소스 컨트리뷰션 아카데미]  Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)[2021 오픈소스 컨트리뷰션 아카데미]  Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)
[2021 오픈소스 컨트리뷰션 아카데미] Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)DaeHyun Sung
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기Minho Lee
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기changehee lee
 

Ähnlich wie C++과 Lua script연동 (20)

Lua script
Lua scriptLua script
Lua script
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
 
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
 
Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
A tour of C++ : the basics
A tour of C++ : the basicsA tour of C++ : the basics
A tour of C++ : the basics
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차
 
github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 
[2021 오픈소스 컨트리뷰션 아카데미] Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)
[2021 오픈소스 컨트리뷰션 아카데미]  Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)[2021 오픈소스 컨트리뷰션 아카데미]  Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)
[2021 오픈소스 컨트리뷰션 아카데미] Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기
 

Mehr von 선협 이

웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격선협 이
 
MongoDB 이해하기
MongoDB 이해하기MongoDB 이해하기
MongoDB 이해하기선협 이
 
Deep dive into Vue.js
Deep dive into Vue.jsDeep dive into Vue.js
Deep dive into Vue.js선협 이
 
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막선협 이
 
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017선협 이
 
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2ndVue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd선협 이
 
Reactive Programming With Swift
Reactive Programming With SwiftReactive Programming With Swift
Reactive Programming With Swift선협 이
 
Tour of Vue.js
Tour of Vue.jsTour of Vue.js
Tour of Vue.js선협 이
 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift선협 이
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례선협 이
 
왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?선협 이
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법선협 이
 
MSBuild + Git + Jenkins
MSBuild + Git + JenkinsMSBuild + Git + Jenkins
MSBuild + Git + Jenkins선협 이
 
Post Effect 테스트
Post Effect 테스트Post Effect 테스트
Post Effect 테스트선협 이
 

Mehr von 선협 이 (16)

웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격
 
MongoDB 이해하기
MongoDB 이해하기MongoDB 이해하기
MongoDB 이해하기
 
Deep dive into Vue.js
Deep dive into Vue.jsDeep dive into Vue.js
Deep dive into Vue.js
 
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
 
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
 
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2ndVue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
 
Reactive Programming With Swift
Reactive Programming With SwiftReactive Programming With Swift
Reactive Programming With Swift
 
Tour of Vue.js
Tour of Vue.jsTour of Vue.js
Tour of Vue.js
 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 
왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
 
C++11
C++11C++11
C++11
 
MSBuild + Git + Jenkins
MSBuild + Git + JenkinsMSBuild + Git + Jenkins
MSBuild + Git + Jenkins
 
Post Effect 테스트
Post Effect 테스트Post Effect 테스트
Post Effect 테스트
 
C++과 TDD
C++과 TDDC++과 TDD
C++과 TDD
 

C++과 Lua script연동

  • 3. 아이엠 그라운드 자기소개하기 • Python, Ruby같은 스크립트 언어 • 다른 스크립트 언어보다 가볍다. • 프로그램에 내장되는 스크립트이다. • 프로그램과 통신이 가능하다. • 데이터 교환 • API 상호 호출 • C, C++언어에 이식하기 편하다. • 가비지 컬렉터가 있다. • 쉽다.
  • 5.
  • 6. • 와우에서 루아 스크립트를 사용한다는 얘기는 이미 유명하다. • 사용자 인터페이스 (UI) • 캐릭터 애니메이션 • 월드맵 조정 • 네버윈터 나이츠, ToME, 원숭이 섬으로부터 탈출, 앵그리버드 등 ... 게임 제작에 많이 쓰임..! 게임 개발에 자주 쓰입니다!
  • 10. 코딩 빌드기획 테스트 코딩량이 많아지면... 장난아니게 오래걸림...
  • 11. 코딩 빌드기획 테스트 코딩량이 많아지면... 장난아니게 오래걸림... 또 수치를 변경해야하면...
  • 12. 코딩 빌드기획 테스트 코딩량이 많아지면... 장난아니게 오래걸림... 또 수치를 변경해야하면...빡 침!
  • 13. 코딩 빌드기획 테스트 코딩량이 많아지면... 장난아니게 오래걸림... 또 수치를 변경해야하면...빡 침! 이럴때 필요한 것은?
  • 14. • 외부의 데이터를 기반으로 프로그램을 제작하는 아키텍처 데이터 주도 프로그래밍
  • 18. 게임 *.ini 게임 환경 설정 *.xml 수치 데이터 *.lua 게임 로직
  • 19. 게임 *.ini 게임 환경 설정 *.xml 수치 데이터 *.lua 게임 로직 *.fx 게임 이펙트
  • 20. 게임 *.ini 게임 환경 설정 *.xml 수치 데이터 *.lua 게임 로직 *.fx 게임 이펙트 외에도 프로그래머가 직접 데이터 파일을 만들 수 있다. ex) 0,1로 이뤄진 맵파일..ㅋㅋ
  • 24. 저는 게임의 가장 핵심이되는 ‘로직’부분을 스크립트로 처리 가능합니다.
  • 25. • Windows용 설치 파일 • https://code.google.com/p/luaforwindows/ 루아 설치하기
  • 26. • 설치된 폴더의 lua.exe 실행 루아 써보기 - 1
  • 27. • 루아의 변수는 기본적으로 전부 전역 변수이다. • 스크립트 전체에서 접근 가능하며 끝날 때까지 유지된다. • 지역변수는 ‘local’ 키워드를 사용하여 사용 가능하다. • 가능한 곳에서는 지역변수를 사용하는 것이 좋다. • ex) • a = 2 // 전역변수 • local a = 2 // 지역변수 루아 - 변수
  • 28. • nil • 다른 언어의 NULL과 유사하다. • 변수에 nil을 대입하면 삭제된다. • boolean • 다른 언어처럼 true, false 값만 가짐 루아 - 변수
  • 29. • string • 다른 스크립트 언어처럼 문자열 처리에 강하다. • 역슬래시를 이용하여 특수문자 사용 가능 (줄바꿈, 탭, 따옴표 등) • 수치와 문자열을 자동으로 상호 변환 • ex) “8”+8 -> 16, “8+8” -> “8+8”, “hello”+8 -> ERROR • number • 루아는 정수와 소수를 구분 하지 않고 모든 숫자를 실수형으로 처리한 다. 루아 - 변수
  • 30. • table • C++의 std::map, Python의 dict와 유사하다. • number형과 string형을 모두 인덱스 할 수 있다. (nil은 제외) • 크기가 고정되어 있지 않다. (Array가 아님) • 값, 변수가 아닌 객체이다. • 다른 언어와 달리 0이 아닌 1부터 시작한다. 루아 - 변수
  • 31. • 산술 연산자 • +, -, *, / • 관계 연산자 • <, >, <=, >=, ==, ~= • 논리 연산자 • and, or, not 루아 - 연산자
  • 32. • if (조건식) than (실행문) else if (조건식) than (실행문) else (실행문) end 루아 – 명령문 (if)
  • 33. • while (조건식) do (실행문) end 루아 – 명령문 (while)
  • 34. • C++의 do ~ while과 유사 • repeat (실행문) until (조건식) 루아 – 명령문 (repeat)
  • 35. • for (초기화), (조건식), (증감) do (실행문) end • 증감을 생략하면 자동으로 1씩 증가 루아 – 명령문 (numeric for)
  • 36. • table의 요소를 한 번에 하나씩 접근할 때 주로 사용 • pairs() / ipairs() 함수와 함께 사용 • ex) • days = {“Sunday”, “Monday”, ... “Saturday”} • for index, value in pairs(days) do print(index, value) end • result) • 1 Sunday 2 Monday ... 루아 – 명령문 (generic for)
  • 38. • arg라는 table을 만들어서 가변 인수를 담음 • 가변 인수는 마침표 세개(...)로 구분 • arg.n에 가변 인수의 개수를 저장 • function 함수이름(a, b, ...) print(a[1]) end 루아 – 함수
  • 39. • 루아의 함수는 결과를 여러 개 반환 가능 • function 함수이름() return 1, 2, “asdf” end 루아 – 함수
  • 40. 더 자세한 정보는 assert, dofile, math, tonumber, tostring, string., table. 등 다양한 기본 라이브러리 함수
  • 41. assert, dofile, math, tonumber, tostring, string., table. 등 다양한 기본 라이브러리 함수 더 자세한 정보는
  • 42.
  • 43. • 환경은 Windows / Visual Studio 2013 • Visual Studio 프로젝트 Directory 설정 • Include • C:Program FilesLua5.1include • Link • C:Program FilesLua5.1lib • C:Program Files (x86)Lua5.1lib 디렉토리에서 dll파일 프로젝트에 복사 C++과 루아 스크립트 연동
  • 44. • lib파일과 header파일을 include한다. • 루아는 C로 만들어졌기 때문에 extern “C”를 지정해준다. C++과 루아 스크립트 연동
  • 45. • 다음 코드는 lua.exe를 실행시킨 것 처럼 루아를 사용할 수 있게 해준다. C++과 루아 스크립트 연동
  • 46. • 출처 : http://sweeper.egloos.com/viewer/2821116 C++과 루아 스크립트 연동
  • 47. • 스크립트 파일을 작성하고 C++에서 열고 실행시킬 수 있다. C++과 루아 스크립트 연동
  • 48. • C++에서 Lua의 함수를 호출 시킬 수 있다. C++과 루아 스크립트 연동
  • 49. • 역으로 Lua에서 C++ 함수를 호출 할 수 있다. C++과 루아 스크립트 연동
  • 50. • Lua를 좀 더 쉽게 연결할 수 있도록 도와주는 C++ 라이브러리 • MIT 라이센스 • boost 라이브러리가 필요하다. • 설치 • http://sourceforge.net/projects/luabind/ • 압출을 푼뒤 빌드한다. • 정적 라이브러리로 빌드 (Visual Studio 2013 기준) • 이 과정에서 boost, lua 라이브러리 필요 • 디버그, 릴리즈 둘 다 빌드 • 나온 결과물을 프로젝트에 포함한다. (lib) luabind
  • 51. • 이제 사용하면된다. • 자세한 사용 방법은 doc 디렉토리를 찾아보면 나와있다. • 각종 example도 압축 파일 내부에 존재한다 luabind
  • 52. 주의할 점 • 배보다 배꼽이 더 커질 수 있다. • 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가 작업시간이 더 오래 걸릴 수 있음 • 스크립트에 대해서 잘 모른다면 C++에서 작성하는게 좋을 수 있다. • 여러 C++의 함수를 Lua로 바인드하기 위해서는 시간이 들고 소스 코 드가 복잡해질 가능성이 있다. • 디버깅이 어렵다. • 전문 개발 툴이 없다. • 로딩과 실행 속도가 느리다.
  • 53. 주의할 점 • 배보다 배꼽이 더 커질 수 있다. • 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가 작업시간이 더 오래 걸릴 수 있음 • 스크립트에 대해서 잘 모른다면 C++에서 작성하는게 좋을 수 있다. • 여러 C++의 함수를 Lua로 바인드하기 위해서는 시간이 들고 소스 코 드가 복잡해질 가능성이 있다. • 디버깅이 어렵다. • 전문 개발 툴이 없다. • 로딩과 실행 속도가 느리다. 제대로 사용하려면 팀원 각각의 역활 수행을 제대로 해야한다. ex) 코어 프로그래머 -> 몬스터 FSM을 루아로 바인드함 컨텐츠 프로그래머, 기획자 -> 바인드된 함수를 이용하여 몬스터 AI 제작 http://www.gamedevforever.com/12 (박민근 교수님이 쓰신 루아 사용에 대한 비판 글)
  • 54. • http://www.gamedevforever.com/12 (알콜코더 민군교수님의 자료) • http://sweeper.egloos.com/viewer/2821116 • http://sweeper.egloos.com/viewer/2821919 • http://www.gpgstudy.com/forum/viewtopic.php?t=5738&sid= 38357b68a309f7e7bf296445828c1874 • http://bombfox.tistory.com/45 • http://andromedarabbit.net/wp/cplusplus_cli_lecture_2009_06/ • http://hoidu.tistory.com/ • http://blog.naver.com/PostList.nhn?blogId=sunxodid79 참고 자료