게임을 만드는 것에 흥미가 있다면 자바로 게임을 만드는 것은 어떨까? 라는 의문을 품을 수도 있다.
게임제작을 위해 어떤 언어가 가장 좋을까? 라는 질문도 생길 수 있다.
조금은 순진한 질문이지만 본질적인 내용이라고도 할 수 있다.
사실 상업용 게임의 제작에는 단순히 언어를 선택하는 것에서 끝나지 않는다. 게임 제작의 품질과 효율성을 위해서 그보다 우선시되는 것은 어떤 게임 엔진을 사용하는가이다.
이 주제에 대한 통계가 없어서 그런지 예전에 Reddit 에서 한 용자가 직접 스팀에 올라온 6만개의 게임을 분석하여 통계를 만들었다. 결과적으로 반에 가까운 게임이 어떤 게임엔진을 사용했는지 알수가 없었고 언리얼 엔진이 23% 유니티가 11% 사용되었다는 사실을 알 수 있었다.
개인이 스크립트 봇으로 조사를 했으니 한계가 있었다고 해야겟지만 유니티의 비율이 상대적으로 낫다는 것에 많은 사람들이 의문을 품었다. 자료의 조사가 2년 전인 것도 감안해야 겠지만 어쨋든 당시 대중의 인식과는 차이가 있었다.
다른 엔진을 사용한 47%는 아마 세계 여러나라에 있을 자체 게임 제작 엔진일 것 이라고 추정된다.
그럼 Other를 제외하고 세계의 인터넷 커뮤니티에 가장 핫한 게임엔진은 언리얼과 유니티이다.
언리얼 엔진에서 사용하는 언어는 C++ 이고 유니티에서 사용하는 언어는 C#이다.
game-ace.com/blog/best-language-for-game-development/
그렇다면 자바는? 자바에도 게임엔진이 있다. LIGHT WEIGHT JAVA GAME LIBRARY 라는 긴 이름의 오픈 소스 게임 개발 라이브러리이다. 꽤 오래전이지만 마인트래프트도 이 라이브러리를 사용해 제작되었다고 한다
(마인크래프트는 규모가 커지면서 C++ 등 다른 언어를 함께 사용하여 제작되었다)
또 자바는 안드로이드의 어플 개발에 많이 사용되고 안드로이드에는 자바를 계승한 코틀린도 있다.
모발일 게임의 시대에 캐주얼한 모바일 게임을 개발하기에 괜찮은 언어다.
우리가 컴퓨터 게임이라고 하면 분류가 복잡하다. 지금은 게임의 종류가 워낙 발달해서 하나의 큰 틀로 묶어서 정의하는데 무리가 있다. 여기서 말하는 것은 플레이스테이션이나 닌텐도 스위치 같은 콘솔(게임만을 위해 구매한 전용장치)을 제외한 PC와 모바일의 게임이다.
우리나라의 게임 제작사들이 주력하는 시장이다. 한국에 플레이 스테이션 독점 게임을 만드는 회사는 없다.
- AAA게임
대기업같은 대형 엔터테인먼트 제작사에서 수백억 단위로 돈을 투자하여 수백명의 인원과 고가의 장비 연예인등을 기용하여 만드는 게임을 'AAA' 트리플 에이 게임이라고 한다. 특히 모바일 게임이나 MMORPG라면 네트워크에 연결해서 다른 플레이어들과 함께 플레이하도록 되있고 경쟁에 의한 과금 정책도 흔히 볼 수 있다. 돈을 많이 투자해서 만들었으니 서비스를 잘 해서 최대한 유저들의 지갑을 열게해야 게임회사가 성장할 수 있다.
엔씨소프트 넥슨 등 대한민국의 대표 IT기업(게임) 회사가 야심차게 내놓는 리니지2 작품을 AAA게임이라 한다.
해외에서 유명한 GTA5는 한화로 거의 3,000억원 넘게 들여서 누적 매출액이 한화로 7조를 달성한 게임이다.
그 밖에 중소기업들이 만드는 게임도 있고 인디 게임도 있다. 하지만 최근에는 중소기업이 만드는 게임과 대기업이 만드는 AAA게임과는 엄청난 차이가 그 아래는 별로 차별을 두지않는다. 스타듀밸리 처럼 1인 인디 게임 개발자들이 대박을 내는 경우도 아주 가끔 보이기 때문에 더 그렇다.
중소기업은 리스크가 큰 오리지널 게임 개발보다는 카카오 등 대기업의 수주를 받아서 회사를 운영하게 된다. 혹은 유행에 따라 수익이 나는 특정 분야 (모바일 게임)를 열심히 만들게 된다.
www.kakaocorp.com/service/KakaoGames
* 카카오 게임에게 원청을 받아 하청업체가 만드는 게임도 있다.
이처럼 게임 시장은 양극화가 되있다. 게임산업의 태동기인 1990년대나 2000년대 초에는 그렇지 않았을 것이다. 이 산업이 20세기 말에 세상에 처음 등장한 산업이라는 것을 감안하면 게임업계의 모든 것들이 신기하게 보인다,
한편 상업 논리에 휩싸이지 않고 자신들만의 아마추어 게임을 개발하는 커뮤니티도 있다. 게임 개발이 목적이라기 보다 게임 개발을 하면서 알고리즘도 배우고 물리엔진도 좀 다뤄보고 실력향상과 취미로 하는 사람들도 있다. 그들은 게임제작 뿐 아니라 어떤 프로그래밍에도 능한 사람일 가능성이 높다. 프로그래밍을 일이라 생각하지 않고 취미로 즐기기 때문일 것이다.
www.pygame.org/tags/all 20년 역사의 파이게임 커뮤니티는 수천개의 아마추어 게임이 오픈소스로 공개되있다.
게임을 다운로드 받아 실행할 수도 있고, 게임 코드를 분석하는 것도 사용자의 자유다.
이 포스팅의 목적은 아마추어 프로그래밍을 즐기기 위해 작성한다
생계를 걸고 제작하는 게임이라면 즐기면서 할 수 없을 것이다. 어쨋든 게임 시장에서 승부를 봐야 하니까. 그러나 프로그래밍 실력을 향상시키기 위해 순수하게 코딩하는 것은 즐거운 일이다. 게임 프로그래밍도 그 중의 하나이다.
이전의 포스팅 파이썬으로 게임만들기에서는 게임을 좀 더 간단하게 만들 수 있었다. 객체지향의 규칙을 엄격하게 지켜야 하는 자바에서는 조금 더 손이 간다. 코드가 길어지는 것은 자바의 특성이다. 길어진 만큼 더 좋은 개념으로 만들 수 있다면 충분하다.
1. 이클립스, 인텔리제이 등 IDE 를 사용하여 시작한다.
패키지 트리는 위와 같이 할 것이다. 메인 패키지에서 게임을 론칭하고 나머지 객체들을 하위 패키지(폴더)에 만들어 넣는다.
첫번째는 Display 클래스를 만든다. Display 클래스는...
- 스윙의 JFrame 을 사용하여 기본이 되는 게임창(프레임)을 생성하는 일을한다.
* 다음 예제 코드이다.
package com.kay.display;
import javax.swing.*;
public class Display {
private JFrame frame;
private String title;
private int width, height;
public Display(String title, int width, int height) {
this.title = title;
this.width = width;
this.height = height;
createDisplay();
}
private void createDisplay(){
frame = new JFrame(title);
frame.setSize(width, height);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
createDisplay 에서 하는일은 기본 윈도우의 설정을 하는 것이다. 창의 너비, 높이 종료처리 등이 들어간다.
* Display 객체의 생성자는 타이을, 너비, 높이로 되어 있다. 이 객체는 메인 Laucnher 에서 생성할 때 창의 타이틀과 사이즈를 설정할 수 있다.
* 론처의 코드는 간단하게 유지한다. 다른 클래스에서 정의한 내용을 하나씩 여기서 생성할 것이다. 론처의 메인 메소드를 보면 책의 목차 처럼 게임의 흐름을 확인할 수 있다.
package com.kay;
import com.kay.display.Display;
public class Launcher {
public static void main(String[] args) {
new Display("게임타이틀", 300, 300);
}
}
윈도우 창이 정상적으로 열렸다면 성공이다. 초기 셋업을 완료했다. 다음 포스팅에서 내용을 이어 나갈 것이다.