This article is currently in the process of being translated into Korean (~97% done).
In this article series, we're building a complete Snake game from scratch. It makes sense to start with the Introduction and then work your way through the articles one by one, to get the full understanding.
If you want to get the complete source code for the game at once, to get started modifying and learning from it right now, consider downloading all our samples!
들어가는 글
이번 글에 대하여 간략하게 소개를 하자면, 지금부터 고전게임:스네이크를 만들어 보겠습니다. 결과물은 아래와 같습니다.
대부분의 사람들, 특히나 젊은 세대들에게 있어서 게임을 만들어 보는 것이, 프로그래밍을 배우게 되는 주된 이유입니다. 이럴 때 항상 하는 질문이, 도대체 어떻게 배우기 시작하면 좋고, 뭐가 필요하나? 입니다. 당연하게도 C#이나 C++나 다른 유명한 프로그래밍 언어는 말할 것도 없고, 혹여나 자신있는 프로그래밍 언어가 있다면 뭐 달리 필요한건 없습니다. 그냥 모니터 화면 바닥에다가 점 하나 찍기부터 시작하면 언젠가는 돌아가는 게임이 만들어 집니다.
하지만, 대부분의 사람들은 로우 레벨의 작업은 직접 하기는 꺼려합니다. 뭐 어디 라이브러리나 프레임워크가 픽셀 하나 하나 화면에 알아서 찍어주면 게임 잘 만드는거나 신경쓰지 뭐하려고 이런 수작업에 공을 들이겠습니까? 그래서 이런 수작업을 도와주는 프레임워크들이 여럿 시중에 나와 있는데, 그중 하나가 WPF 프레임워크 입니다.
그러하더라도, WPF가 게임을 만드는데 있어서 가장 좋은 선택은 아닐지도 모릅니다. - WPF는 주로 게임이 아닌 다른 사업 분야를 타겟으로 하는 사용자 인터페이스를 만드는 프레임워크입니다. 하지만, 그럼에도 불구하고 WPF는 게임을 만드는데 필요한 다양한 요소를 가지고 있습니다. 그중에서도 중요한 요소를 손꼽아 보자면, 게임 그래픽을 화면에 표시하고, 윈도우 화면창 컨트롤이 가능하다는 점입니다.
그래서 간단한 게임을 하나 만들어 보겠다 한다면, WPF이 사실 나쁜 선택은 아닙니다. 적어도, 윈도우 화면창을 만들거나, 간단한 도형 그리기 등등의 게임을 만들기 위한 기본적인 요소들을 구현하는데는 큰 문제가 없습니다. 만약에 휘황찬란한 3D 그래픽을 뽐내며 빠르게 움직이는 물체들을 구현하고자 한다면 다른 라이브러리나 프레임워크가 필요할지도 모르겠습니다만, 스네이크 같은 간단한 고전게임 정도는 WPF로 충분합니다!
WPF스네이크 (SnakeWPF)
WPF로도 게임을 만드는 것이 가능하다는 것을 보여주기 위해 스네이크 게임을 만들어 보겠습니다. 기본 WPF 윈도우창을 게임 배경으로 잡고, 기본 WPF 컨트롤 / 도형으로 실제 게임을 구현해 보겠습니다. 스네이크를 굳이 고른 이유는, 만들기가 상당히 쉽고 (특히 게임 논리 구현 관점에서) 사각형이나 동그라미 같은 간단한 도형으로도 게임 디자인이 가능하기 때문입니다. 하지만 이렇게 간단해 보일지라도, 게임은 꽤나 재미있습니다!
혹시나 스네이크 게임을 모른다면, 90년대나 2000년대에 출시되었던 노키아폰은 사용해 보신적이 없을것 같습니다. 최초 스네이크 게임은 꽤나 오래전에 출시됬었는데, 인기를 끌기 시작했던것은 노키아가 자사 휴대폰에 스네이크 게임을 탑재하기 시작하고부터입니다.
게임 자체는 배우 단순하고 가지고 놀기 좋습니다. 뱀 한마리를 상하좌우로 움직여서 사냥감을 사냥하는데 (가끔은 사과도 나옵니다), 사과를 먹으면 길이가 늘어납니다. 그리고는 새로운 사과가 화면에 나타납니다. 만약, 벽이나 자기 자신의 몸통에 박으면 게임오버가 되고, 게임을 다시 시작해야 합니다. 사과를 먹을수록 점수가 올라갑니다만, 꼬리가 길어지는 탓에 게임은 점점 더 어려워집니다.
변종도 많습니다. 예를 들면 사과를 먹으면 속도가 빨라져서 더 어려워 지기도 하고, 아니면 벽에 박으면 반대편 벽에서 튀어나오기도 합니다. 그래도 게임마다 달라서, 어떤 버전은 사과를 먹는다고 속도가 빨라지지도 않고, 벽에 박으면 그냥 죽기도 합니다.
우리 WPF스네이크 버전은, 뱀이 벽에 박으면 그냥 죽고, 사과를 먹으면 기하급수적으로 속도가 빨라지도록 만들겠습니다. 뱀의 속도가 어느 정도 붙으면 더 이상 빨리지지는 않습니다.
요약
이제부터 WPF를 사용해서 고전게임: 스네이크 게임을 만들어 보도록 하겠습니다. 게임의 배경을 만드는 것을 시작으로, 마지막에는 WPF를 기반으로 하는 완전한 스네이크 게임을 완성하도록 하겠습니다.
참고로 말씀드리건데, 지금 보고 계시는 웹페이지가 WPF 튜토리얼이라 할지라도, 이제까지 사용했던 C#보다는 좀 더 어려운 수준의 C#을 구사해야만 게임의 논리를 구현할 수 있습니다. 게임을 만들어 가면서 가능한한 자세하게 C# 부분을 설명하고자 하겠습니다만, 혹시 좀 더 자세하게 C#를 배우고자 한다면, 여기 웹사이트에 있는 컴플리트 C# 튜토리얼을 잊지 말아 주시길 바랍니다!