DX라이브러리 : C언어로 GUI 게임 만들기

나종우·2022년 5월 21일
4
post-thumbnail

들어가며

C언어로 검은 화면에 흰 글씨만 출력하는 건 이제 질렸다. 좀 더 재밌는 것을 만들어 볼 수 없을까?

우리나라에서 컴퓨터공학과에 입학하면 처음으로 보통 C언어를 배우게 된다. 본인도 C언어를 배우며 콘솔 프로그램을 주구장창 코딩했던 기억이 난다. 다른건 몰라도 별찍기는 아직도 기억이 난다.

C언어 콘솔 프로그래밍도 재밌었지만, 계속 검은 화면에 흰 글씨만 출력하다보니 조금 칙칙했다. 좀 더 화려한 GUI 게임을 만들어보고 싶었다.

하지만 내가 아는 것은 오직 C언어뿐, 찾아보니 게임을 만들기 위해서는 Windows API, DirectX, Unity 같은 어려운 것을 공부해야 한다고 한다.

그렇지만 한번 당시의 C언어 지식만으로 빠르게 GUI 게임을 만들어보고 싶었다. 그때 찾아낸것이 바로 DX라이브러리이다.

DX라이브러리

DxLib 홈페이지 : https://dxlib.xsrv.jp/ (구글 번역기 필수)

DX라이브러리는 DirectX를 쉽게 사용할 수 있도록 래핑한 C++ 라이브러리이다. 간단한 미니게임부터 본격적인 상업용 게임까지, 다양한 게임을 만들 수 있다.

다소 생소한 라이브러리이지만, 2001년에 처음 만들어진 후 20년 넘게 업데이트되며 잘 지원되고 있다. 일본에서 만들어진만큼 일본 내에서는 꽤 쓰이고 있으며, 쉽게 배우고 쉽게 쓸 수 있어서 인디 게임에 많이 사용되고 있다.

게임 예제

한번 DX라이브러리로 개발된 게임들을 구경해보자. 공식 홈페이지에 소개되어있는 게임들이다.

다음은 본인이 DX라이브러리를 처음 배우고 간단히 만들었던 게임이다. 오락실 게임 태고의 달인을 모작하여 만든 게임으로 집에서 오락실 태고 맛좀 보고 싶어서 개발했다. 타이밍을 맞춰서 키보드로 북을 치는 리듬게임이다.

DX라이브러리의 특징

C언어 지식만 있으면 가능

DX라이브러리의 가장 큰 특징이다. 내부적으로 DX라이브러리는 C++ 기반에 Windows API, DirectX, DirectSound 등 복잡한 요소를 사용한다. 하지만 사용하는 입장에서는 C++도 몰라도 되고 C언어 문법만 알면 사용할 수 있다. 게임에 필요한 모든 함수를 추상화하여 편리하게 제공해주기 때문이다.

게임 프로그래밍 및 GUI 프로그래밍 경험도 전혀 없어도 된다. 라이브러리 사용법만 배우면 필요한걸 모두 알게 된다. 이렇게 C언어 지식만으로 게임을 만들 방법은 DX라이브러리를 쓰지 않고는 찾아보기 힘들다. 비슷한 라이브러리로 SDL이 있지만 꽤나 복잡하다.

여담으로 실제로는 Windows API라는 것을 사용하는 코드를 아주 조금 쓰긴 해야 하나, DX라이브러리 사용시 공통적으로 들어가는 코드라서 겁먹지 말고 복붙을 한번 해주면 된다. 그 다음부터는 전혀 신경 안 써도 된다. C언어 지식만 준비하고 오면 된다.

C#으로 개발할 수 있는 라이브러리도 제공하고 있으니 원하면 쓸 수 있다.

학습과 사용법이 간단

DX라이브러리는 튜토리얼과 공식 문서정도만 읽어보면 충분히 다 배울 수 있다. 쉽게 배우고 쉽게 쓰기 위한 라이브러리라서 사용법이 간단하고 API도 간소화되어있다. 레퍼런스 문서를 다 읽어보는 것도 얼마 걸리지 않는다. 예를 들어 DX라이브러리로 이미지를 화면에 그리는 코드는 정말 간단하다.

LoadGraphScreen(800, 400, "image.png", TRUE);

코드 한 줄만 작성해주면 화면에 image.png가 그려진다!

사운드 재생도 매우 간단하다. 코드 한 줄이면 된다.

PlaySoundFile("music.mp3", DX_PLAYTYPE_NORMAL);

C/C++라는 점을 생각하면 진짜 간단한 편이다. 유사 라이브러리와 비교해봐도 쉬운 편이라고 생각한다. 물론 라이브러리 사용법을 모르고 보면 코드의 의미가 이해되지 않을 수도 있다. 실제로 사용해보면 매우 쉽게 쓸 수 있다.

로우레벨 라이브러리

DX라이브러리는 상대적으로 로우레벨인 라이브러리다. 라이브러리의 추상화 수준이 그렇게 높지 않다. 라이브러리 설명에도 단순히 DirectX를 사용하기 쉽게 정리한 라이브러리라고 나와있다. 간단히 말하면 DirectX를 사용하는 각종 헬퍼 함수를 제공해준다고 할 수 있다.

라이브러리는 헬퍼 함수를 제공해줄 뿐이고, 이러한 함수들을 응용하여 프로그램을 설계하는 것은 여러분의 몫이다. 이런 특징으로 인해 생산성은 좀 떨어질 수 있어도, 그만큼 자유도가 높고 원리를 학습할 때 도움이 된다고 생각한다.

그리고 DX라이브러리는 라이브러리 자체의 색깔이 옅다. DX라이브러리를 통해 쌓은 게임 프로그램 기법은 보편적인 기법이기에 다른 개발 환경으로 옮겨도 통용된다.

예를 들어 더블버퍼링(DX라이브러리 문서에서 아주 중요하게 다뤄진다), 입출력 처리, 가변프레임 처리, 수직동기화, 메모리 관리, 에셋 관리, I/O 최적화 등을 DX라이브러리를 통해 배울 수 있다.

All-in-one

게임을 만들기 위해서는 그래픽, 사운드, 입력장치, 네트워크, 파일 입출력 등 생각보다 많은 요소가 필요하다. DX라이브러리는 이 모든게 포함되어 있는 올인원 라이브러리이다. 관리인이 요청을 받으면 수시로 기능을 추가해줘서 진짜 별별 기능이 다 있다.

DX라이브러리는 단순한 그래픽 라이브러리가 아니라 게임 라이브러리이다. 다른 라이브러리를 추가로 사용하지 않아도 게임을 만들 수 있다.

3D, Live2D

DX라이브러리는 무려 3D, Live2D까지 지원한다! 3D 모델을 불러오는 기능을 지원하는데, MMD를 이용하여 지원된다. Live2D는 Live2D Cubism 4를 이용하여 지원한다.

근데 아무리 DX라이브러리라도 3D 게임 개발은 2D보다 많이 어렵긴 하다. 수많은 API를 제공해주긴 하는데 게임 엔진 없이 3D 게임을 만들면 작성할 코드가 너무 많다. 쉽게 배우고 쉽게 쓰기 위한 목적에는 잘 맞지 않는 것 같다.

하지만 일단 가능하다는게 중요한 것 같다. 최소한 DirectX를 쌩으로 사용하는 것보다는 훨씬 편하게 만들 수 있다. DX라이브러리로 3D 게임을 만든 사례도 많으니 참고해보면 좋다.

다양한 플랫폼

공식 문서 상에 나와있는 지원 플랫폼이 Windows, Android, iOS, Nintendo Switch™, PlayStation®4, PlayStation®Vita로 꽤나 다양하다. Windows 이외의 다른 플랫폼들은 DirectX가 아닌 OpenGL을 사용하여 대응되고 있다. 언어는 동일하게 C/C++이다.

Windows 게임 개발에 주로 사용되긴 하나 다른 플랫폼 개발도 큰 무리는 없다. 플랫폼별 API나 개발 방법도 비슷해서 거의 동일한 코드로 멀티 플랫폼 게임 개발이 가능하다.

DX라이브러리의 아쉬운 점

일본어로 된 문서

일본에서 개발된 라이브러리라 문서가 전부 일본어로 나와있다. 영어 문서는 없다. 그래도 일본어는 한국어로 번역률이 꽤나 높기에, 구글 번역기를 돌리면 무리없이 문서를 읽을 수 있다. 번역해보면 영어보다 읽기 쉬운 것 같기도 하다.

본인도 매번 번역기를 돌려서 봤다. 딱히 무리는 없었지만, 그래도 영어 문서가 없는 건 아쉽긴 하다.

특수한 그래픽 표현의 어려움

DX라이브러리로 실제로 게임을 개발했을 때 가장 아쉬운 부분이었다. 애니메이션, 게임 이펙트, 물리 연산 같은 특수한 그래픽 표현을 하기가 어렵다.

애니메이션은 MMD 모델의 모션을 지원하기는 하나 그 외에는 쉽게 개발할만한 방법이 부족한 것 같다. 이미지 수백장을 돌려가며 출력해서 애니메이션을 구현해야 된다. 주로 스프라이트 형태의 애니메이션으로 구현하게 된다.

게임 이펙트도 직접 구현해줘야 되는 부분이 많다. DX라이브러리에서 이미지의 변형, 합성, 출력까지는 정말 잘 해주지만 이런 것들로 연속적인 특수 효과를 만들어내는 것은 직접 해야된다.

물리 엔진도 기본적으로는 지원하지 않는다. MMD 사용시 각 모델 개별적인 물리 연산은 되는데 모델 간의 충돌 처리는 힘들다. 물리 엔진이 필요하면 유니티와 같은 게임 엔진을 사용하는게 생산성에 좋다.

강의 자료

DX라이브러리 공식 문서만 보고도 게임을 만들 수는 있지만 강의 자료를 찾아보면 좀 더 쉽게 만들 수 있다. DX라이브러리 강좌로는 다음 링크를 추천한다.

DxLib 강좌 : https://dixq.net/g/ (구글 번역기 필수)

게임 프로그래밍 기초부터 응용까지 잘 정리되어 있다. 차근차근 읽어보며 게임을 만들어보자. 일본어라 구글 번역기를 돌려서 봐야하지만 이해하는데 별 어려움은 없다.

한국어 자료가 필요하면 다음 링크도 참고해보면 좋다.

DxLib 강좌 2 : https://blog.naver.com/noksek0615/221696295811

마치며

DX라이브러리는 토이 프로젝트로 게임을 만들어보기 좋은 도구라고 생각한다. 하지만 게임 개발 현업에서는 안타깝게도 잘 쓰이지는 않는다. 일본은 소규모 회사에서 종종 쓰이긴 하지만 한국에서는 쓰는 곳이 있는지 잘 모르겠다.

하지만 DX라이브러리는 초보자도 게임을 쉽게 만들 수 있게 해주는 유용한 툴이라고 생각한다. DX라이브러리로 게임을 밑바닥부터 설계해보는 경험은 후일 다른 게임 엔진으로 작업할때도 큰 도움이 될 것이라 생각한다.

게임 개발은 CS 학습에 있어서도 흥미를 불러일으켜 준다고 생각한다. C언어를 막 배웠다면 나만의 게임을 한번 만들어 보며 재미를 느껴봐도 좋지 않을까. C언어만 알아도 DX라이브러리와 함께라면 게임을 만들 수 있을 것이다.

profile
점진적 학습을 추구하는 개발자

4개의 댓글

comment-user-thumbnail
2022년 5월 22일

로버트 흥미로운 내용이네요 ㅎㅎ 잘 봤습니다.

1개의 답글
comment-user-thumbnail
2022년 6월 28일

이 글을읽고 취미로 게임을 만들어보고싶다는 의욕이 생겼습니다. 대학시절 컴과에서 배운 C 언어 지식만으로 가능할지 모르겠네요.

1개의 답글