본문 바로가기

논문

안드로이드 플랫폼용 슈팅 게임 프로그램 개발

창의와 사사(Journal of Creativity and Mentorship)

Vol 11. 2013.

 

 

안드로이드 플랫폼용 슈팅 게임 프로그램 개발

 

 

 

연구생 : 김강현, 강슬기, 박영훈, 박진우, 김신형, 박현민

지도교수 : 정민수

 

 // 안보이는 사진들 때문에 원본 논문을 첨부하겠습니다. //

 

 

초 록

 

최근 스마트 폰은 현대인의 생활 깊숙이 자리 잡고 있다. 웹 검색 뿐 만 아니라 다양한 생활 서비스를 스마트 폰의 어플리케이션으로 해결하고 수시로 SNS에 접속하여 메시지를 전달하고 생성한다. 또한 다양한 멀티미디어 데이터를 활용하며 모바일 SNS를 기반으로 하는 게임을 수시로 즐기고 있다. 이러한 스마트한 소프트웨어 환경에서 시장 점유율을 절반 이상을 차지하는 안드로이드 플랫폼에 주목하였으며 모바일 어플리케이션 개발 기술의 연구기 매우 필요하다고 판단하였다. 또한 어플리케이션 개발 기술의 집약 형태인 게임 프로그래밍 기술을 연구하면 보다 성능 높은 어플리케이션 개발 기술을 향상 시킬 수 있다. 따라서 이번 논문에서 안드로이드 플랫폼용 슈팅 게임 프로그램을 설계 개발하였다. 본 논문을 통해 프로그래밍 기술의 다양한 기법을 연구하였으며 다양한 슈팅 알고리즘의 종류 중에서 적합한 알고리즘을 선택할 수 있었고 안드로이드 게임 어플리케이션 개발에 적용할 수 있었다.

 

 

 김강현 경남대학교 과학영재센터 정보과학 사사과정 (마산동중학교 3년 재학)

강슬기 경남대학교 과학영재센터 정보과학 사사과정 (진영여자중학교 2년 재학)

박영훈 경남대학교 과학영재센터 정보과학 사사과정 (마산중학교 2년 재학)

박진우 경남대학교 과학영재센터 정보과학 사사과정 (마산중학교 2년 재학)

김신형 경남대학교 과학영재센터 정보과학 사사과정 (마산창신중학교 2년 재학)

박현민 경남대학교 과학영재센터 정보과학 사사과정 (마산해운중학교 2년 재학)


. 서 론

 

 

최근 스마트 폰은 현대인의 필수품이 되었다. 웹 검색을 비롯하여 다양한 소셜 네트워크 서비스를 통한 소통이 이루어지고 있으며 교통안내, 음원 및 동영상 등의 멀티미디어 자료 다루기 등 필요한 정보를 보다 다양한 스마트 폰의 어플리케이션을 통하여 서비스 받고 있다. 이러한 스마트 기기의 환경에서 정보과학의 시각으로 스마트 폰을 기반으로 하는 소프트웨어 기술에 대해 매우 깊은 관심을 가지게 되었으며 이러한 기술들에 대한 연구의 필요성 또한 매우 높아지고 있다. 특히 스마트 폰 소프트웨어 플랫폼 중 특정 하드웨어에 제한적인 iOS와 달리 다양한 하드웨어를 지원하고 소프트웨어 플랫폼 자체가 오픈 소스인 안드로이드는 근래 몇 년간 엄청난 속도로 스마트 폰 시장을 절반 이상 점유하고 있으며 기술 또한 발전하고 있다. 오픈 소스 특성으로 스마트 환경에 필요한 다양한 기술들이 장착되고 있으며 이러한 안드로이드 소프트웨어 플랫폼 기반의 어플리케이션 개발이 활발히 이루어지고 있다

하지만 안드로이드는 다양한 하드웨어 지원이 어플리케이션 개발에 있어 장점일 수 있으나 하드웨어에 의존되는 기능들의 개발에는 단점으로 나타나고 있고 어플리케이션 컴퍼넌트인 액티비티 관리 등 어플리케이션 개발 시 고성능 어플리케이션 개발 시 고려해야 할 부분들이 많이 지적되고 있다.

따라서 이번 프로젝트 논문을 통하여 스마트 폰 소프트웨어 환경의 주류를 이루고 있는 안드로이드 플랫폼 프로그래밍 기술을 훈련하고 이를 바탕으로 프로그래밍 기술의 집약체인 게임 프로그램을 개발하여 안드로이드 게임 프로그래밍 기술에 대해 연구하였다.

 

 

 

. 관련연구

 

 

(1) 모바일 플랫폼의 주류인 안드로이드

 

안드로이드는 모바일 소프트웨어 플랫폼을 제공하는 것을 목적으로 하는 기술 그룹과 모바일 회사인 개방 핸드셋 연합에 의해 제공되는 Open-Source 소프트웨어 스택이다. 안드로이드 플랫폼은 작동 시스템, 미들웨어 그리고 어플리케이션을 포함하며 어플리케이션 프레임워크 재사용, 통합된 브라우저, 최적화된 그래픽, 미디어 지원, 네트워크 기술 등과 같은 최근에 발견된 일반적 특징인 모바일 장치 플랫폼을 포함한다.

그림 1의 안드로이드 아키텍처 구조는 다섯 개의 층으로 구성된다. 리눅스 커널을 기반으로 Native-Labrary, 실시간 영역, 어플리케이션 프레임워크, 어플리케이션이다.

 

그림 1에서 표현된 안드로이드 소프트웨어 아키텍처는 리눅스 커널을 기반으로 하드웨어 추상 계층, 네이티브 라이브러리와 실시간 실행 계층, 자바 계층인 어플리케이션 프레임 워크 라이브러리 계층, 어플리케이션 계층으로 구성된다. 커널에 해당되는 영역은 리눅스 커널을 사용한다. 라이브러리 계층은 C/C++로 구현되어 있는데 기존의 리눅스 혹은 다른 플랫폼에서 사용하던 라이브러리 중 C로 된 것은 약간의 수정을 거쳐서 그대로 사용했다. 이는 안드로이드가 기존의 여러 프로젝트를 통합하여 개발되었고, 라이브러리 대부분은 C로 구현된 것이기 때문이다. 어플리케이션 프레임워크는 자바로 구현되어 있고 프레임워크와 라이브러리 사이에는 자바와 C/C++사이의 연결고리 역할을 하는 JNI(Java Native Interface)가 존재한다. 하드웨어 추상화 계층은 해당 규격이 잘 되어 있어 응용 프로그램에서 사용할 때는 API형태로 보이게 되어 있다



안드로이드는 또한 어플리케이션을 구성하는 4가지 컴퍼넌트를 제공하고 있다. 어플리케이션 개발자는 이러한 컴퍼넌트를 클래스로 구성하여 어플리케이션 기능을 구현한다. 4가지 컴퍼넌트는 화면 구성을 담당하는 액티비티, 백그라운드 작업을 위한 서비스, 공유 데이터의 접근과 관리를 위한 컨텐츠 프로바이더, 그리고 정보의 수신을 위한 브로드 캐스트 리시버이다. 이 중 기본적인 화면을 구성하는 액티비티가 어플리케이션의 가장 기본적인 단위이고 액티비티에 화면 UI를 위한 각종 뷰 클래스를 구성한다. 이러한 각 컴퍼넌트들은 각각 프로그램 구동에 있어 생명주기를 가지게 된다.

 

(2) 게임 프로그래밍

 

일반적인 프로그램의 기본 흐름은 입력, 처리, 출력으로 단순화 할 수 있다. 일반적인 업무용 프로그램은 입력과 출력이 중요하므로 그 처리과정은 전혀 문제가 되지 않는 경우가 많다. 하지만 게임 프로그램은 업무용 프로그램과 달리 비주얼한 그래픽과 사운드, 시스템의 하드웨어, 메모리 요구량, 처리 속도 등 복잡하고 구체적인 부분까지 고려하여 프로그래밍 되어야 한다. 또한 게임의 스토리 보드가 있어야 하고 자신이 생각한 아이디어를 구현할 수 있는 능력이 있어야 할 뿐 아니라 전체적인 흐름을 체계화해서 표현하는 기술적으로 많은 노하우가 필요하므로 프로그래밍 기술의 종합적인 예술이라고도 볼 수 있다. 이러한 게임 프로그램은 비주얼하고 동적인 표현도 중요하고 사용자 인터페이스를 잘 설계하여 사용자로 하여금 사용 욕구를 불러일으키도록 프로그래밍 되어야 한다.

안드로이드에서 게임을 개발하려면 다음과 같은 기본적인 지식이 필요하다.

자바 언어에 대한 기초 지식, 안드로이드의 액티비티와 뷰 클래스에 대한 이해, 자바 언어의 쓰레드와 핸들러 구현, 사용자 입력인 키와 터치 이벤트 핸들러, 이미지 처리, 자료 구조, 게임 룰과 다양한 센서 등의 신호 처리를 위한 수학적인 기초 지식, 사운드를 비롯한 멀티미디어 데이터 처리, 파일 입출력 및 점수 관리 등을 위한 데이터베이스 관리, 웹 서버와의 통신 처리기술, 캐릭터 및 화면 디자인 기술 등이다.

 

(3) 슈팅 게임 프로그래밍의 충돌 알고리즘


게임에는 액션,어드벤처,시물레이션,역할수행,롤플레잉 게임 등으로 장르를 나눌 수 있다. 이 중 슈팅 게임은 액션 게임의 대표적인 세부 장르로, 단순하게 총이나 포를 쏘는 빠른 진행의 게임이다. 주인공은 주로 비행기나 인물이다. 대표적인 슈팅게임으로 이전 도스 환경의 갤러그라는 게임프로그램을 들 수 있으며 최근 SNS와 연동되어 있는 드래곤플라이트도 예를 들 수 있다. 이 게임 프로그램은 세부적으로 FPS(FPS; First-Person Shooter)장르에 속하는데 한글로 풀이하자면 1인칭 슈팅 게임이라 할 수 있다.

슈팅 게임 프로그램의 핵심은 포나 미사일 등이 슈팅되어 주인공 또는 적과 충돌되어 게임이 구동된다. 이 때 해당 항목들이 그래픽 요소로 구현되어 이러한 그래픽 요소들의 충돌 알고리즘 기법이 게임 프로그램의 성능에 영향을 미치게 된다. 충돌 알고리즘에는 대표적으로 AABB(Axis Alinged Bounding Box), OBB(Oriented Bounding Box), Sphere() 기법이 있다.

먼저 AABB(Axis Alinged Bounding Box)는 빨간 박스 X축 범위가 3~10 파란박스 X축 범위가 6~20 일때 좌표값은 (3, 10)(6, 20)이다. 이렇게 빨간박스의 10이 파란박스의 6보다 작고 Y축도 검사해서 둘 다 참일 경우 충돌을 검출하는 원리이다. 장점은 계산시간이 매우 빠르며, 단점은 물체가 사각형이 아닐 경우 충돌 처리가 정확하지 않은 단점이 있다.

다음은 OBB(Oriented Bounding Box) 기법이 있는데 AABB와 달리 X축과 Y축이 아닌 벡터를 이용하여 거리를 계산하는 알고리즘이다. 이 기법의 장점으로는 AABB보다 더 정확한 판단을 할 수 있고 회전체여도 경계 설정을 다시 할 필요가 없으나 AABB보다 계산량이 증가되는 단점이 있다.


마지막으로 Sphere() 알고리즘이 있는데 이는 두 구의 중심 간의 거리가 두 구의 반지름의 합보다 크면 충돌하지 않게 처리되는 알고리즘이다. 비교적 쉽고 간단하며 계산 시간이 매우 빠르지만 물체가 구나 원 이여만 한다.

 

 

 

. 본 론

 

 

(1) 안드로이드 게임 프레임워크 설계

 

게임 프레임워크는 게임 프로그램의 중추가 되는 클래스로서 기본적인 게임 루프 처리 등을 지원하거나 게임 프레임워크를 만든 뒤에는 제작할 게임에 따른 요소와 로직만 추가해주면 게임이 제작 가능하도록 하는 구조를 말한다.

즉 빠른 속도로 게임 개발이 가능해지며 게임의 베이스 역할과 동시에 게임 개발의 다양한 변환을 지원할 수 있다. 주로 게임 프레임워크로는 게임 상태를 나타내는 클래스와 게임의 큰 레이아웃과 화면 구성의 레이아웃을 위한 클래스, 이미지 처리를 위한 클래스, 게임의 핵심 룰을 결정할 수 있는 바탕이 되는 클래스 등을 구현 할 수 있다.

본 논문에서 개발된 게임 프레임워크에는 게임 상태를 제어하는 클래스, 이미지 처리를 위한 클래스, 그리고 슈팅 게임의 핵심인 충돌 처리를 위한 클래스로 구성하여 설계하였다. 이 중 충돌 관리를 위한 클래스의 기법은 다음과 같이 구현되었다.

-----------------------------------

public class Collision {

public static boolean CollisionCheckPointToBox(float px,float py,int bleft,int btop,int bright,int bbottom){//

if(bleft<px && bright > px && btop < py && bbottom > py) //AABB충돌처리

return true; //true 반환

 

return false; //아니면거짓

}

-------------------------------------

위의 소스에서 만약 bleft 값이 px보다 크고 btoppy 보다 작고 bbottom py보다 클 때에만 true를 반환한다.

또한 충돌 관리를 위한 구현 소스는 다음과 같다.

---------------------------------------

public class CollisionManager {

public static boolean CheckBoxToBox(Rect _rt1,Rect _rt2){ //체크박스,가상의사각형을생성한다.

if(_rt1.intersect(_rt2)) //만약_rt1 rt2 가충돌하면true를 반환한다.

return true;

return false;

}

}

---------------------------------------

CheckBoxToBox 라는 가상의 사각형을 _rt1 _rt2 로 씌워주고 만약 _rt1_rt2 객체가 겹칠 때 true를 반환한다. , 충돌 여부를 알아보는 부분이다.

 

(2) 슈팅 게임 프로그램 설계

본 논문에서 개발한 전체 슈팅 게임 프로그램의 순서도는 다음과 같다.

 

게임의 기본적인 룰은 주인공 캐릭터를 중심으로 화면 드래그 이벤트를 이용하여 주인공이 화면 하단의 수평으로 이동하고 주인공 캐릭터에 대한 터치 이벤트가 일어나면 주인공 미사일이 발사된다. 적 캐릭터는 랜덤으로 3종류로 화면 상단에서 나타나며 각 종류별로 점수나 이동 속도가 다르게 된다. 또한 적 캐릭터에서 자동으로 랜덤하게 미사일이 발사되므로 주인공 캐릭터는 이를 피하기 위해 드래그 이벤트를 통하여 움직이게 된다. 각기 미사일이다 적과 주인공 캐릭터의 충돌이 일어나는 것을 AABB 충돌 알고리즘의 구현을 통해 충돌 체크를 하게 되며 충돌 시에 점수나 주인공 목숨 값이 변경된다.

주인공 클래스와 적 클래스는 기본적으로 캐릭터 애니메이션을 위한 스프라이트 클래스에서 파생되어 구현되었으며, 게임 상태를 관리하는 어플리케이션 매니저 클래스를 구현하여 게임 프로그램의 상태를 관리한다. 또한 그래픽 오프젝트를 관리하는 클래스를 게임 프레임워크로 구현하고 이 클래스에서 파생되어 동적으로 동작하는 배경 클래스를 구현하였다.

구현된 안드로이드 슈팅 게임 프로그램의 주요 클래스 구성은 다음 아래 그림과 같다.

 

주인공과 아이템이 SpriteAnimation.java 클래스 안에서 애니메이션 효과를 만들어 주며 움직인다. IState.java에서 실시간으로 게임의 상태를 체크하여 생동감 있게 효과를 그려준다. IState.java는 다른 움직이는 모든 것을 갱신하고 움직이는 애니메이션을 계속 할 수 있게 해준다.

 

(3) 슈팅 게임 프로그램의 UI를 위한 이미지 디자인

 

게임 어플리케이션은 일반 어플리케이션과 비교하여 특히 그래픽 이미지처리가 빈번하다. 또한 안드로이드 플랫폼을 사용하는 다양한 하드웨어 기기의 화면 크기에 맞추어 이미지의 크기가 늘어나거나 줄어들게 되면 이미지의 품질이 낮아질 수 있다. 따라서 화면 디스플레이의 하드웨어 해상도에 따라 어플리케이션의 UI를 구성하고 있는 이미지를 안드로이드에서 지원하고 있는 나인 패치 이미지로 제작하여 이미지의 크기가 변화하더라도 이미지 품질에 영향을 덜 받도록 한다. 아래의 그림은 일반 PNG 이미지를 나인패치 이미지로 변환하는 툴인 draw9patch를 이용하여 제작하였다.

 

 

 

. 실험 환경

 

 

(1) 안드로이드 게임 어플리케이션 개발 환경 구축

 

안드로이드 어플리케이션 개발 환경은 개발과 실행이 다른 환경에서 이루어지는 크로스 개발 환경이다. 기본적으로 개발 환경 구축을 위하여 자바 SDK가 먼저 설치되어야 하고, 안드로이드 SDK, 그리고 소스 편집과 디버깅을 위한 통합 개발 환경을 제공하는 Eclipse와 안드로이드 개발 환경을 연동시켜주는 ADT(Android Development Tookit) 플러그인이 Eclipse에 설치되어야 한다.

본 슈팅 게임 프로그램 개발을 위한 환경은 다음과 같이 구축되었다.

설치 순서

설치 프로그램

1

Java SDK 1.7

2

Eclipse (Juno)

3

Android Development Toolkit version 21

4

Android 4.3 (젤리빈) - API version 18

5

Android Emulator


 

 

(2) 안드로이드용 슈팅 게임 프로그램 구현

 

안드로이드 ADT를 이용한 에뮬레이터 테스트 화면은 다음과 같다.

 

 

. 결론 및 향후과제

 

 

본 논문은 슈팅 게임의 AABB 충돌 알고리즘을 적용하여 구현하였다. 이러한 이론적 알고리즘을 구현하고 테스트 연구하여 보다 구현이 쉽고 효과적인 개발 기법에 대한 연구를 진행 할 수 있었다. 또한 기존의 슈팅 게임에 확장성 있는 아이디어의 캐릭터 디자인을 작성 진행할 수 있었으며, 화면 해상도에 따른 배경 이미지의 나인패치 이미지로 전환을 이용하여 이미지의 확대 축소의 효율적인 비율 전환을 꾀하였다. 하여 게임의 재미가 많아 질 것 이다. 그리고 게임 스토리 작성을 바탕으로 어플리케이션 컨텐츠의 중요성을 익히게 되었으며 게임 프로그램 설계에 영향을 줄 수 있으며, 게임 프레임워크 설계를 통하여 구조적인 게임 프로그래밍을 할 수 있었다.

앞으로 현재 본 논문에서 설계, 구현, 테스트한 슈팅 게임 프로그램의 완성도를 보다 높이고 안드로이드 어플리케이션 개발 기술의 다양한 센서를 이용한 사용자 인터페이스 활용 등 추가적인 기술의 개발과 또한 적용한 충돌 처리 알고리즘을 좀 더 연구하여 보다 성능이 뛰어난 게임 프로그램 개발을 진행하는 것이 우리의 향후 목표가 될 수 있을 것이다.

 

참 고 문 헌

 

[1] Android, “Home page,” Jan. 2010. [Online]. Available: http://www.android.com/

[2] O. H. Alliance, "Home page", Jun, 2010. [Online]. Available:http://www.openhandsetalliance.com/

[3] 양정수, “Android”, 안드로이드 포럼, September. 2009. [Online]. Available: http://www.kandroid.org

[4] 류창수, 허창우, “안드로이드 기반의 게임서비스 아키텍처 설계 기법에 관한 연구”, 한국정보통신학회논문지 제16권 제11, pp 2563-2568. 2012.

[5] 서정만, 한상훈, 이 호, “사각형 충돌알고리즘을 사용한 슈팅 게임 구현”, 한국 컴퓨터정보학회 논문집, pp 187-192, 2006. 7.



 

report.hwp