adsense



[2010.12.13]JAVA로 슈팅게임!? 요시카 스크램블 - 보스전 추가

※도메인 이전 관계로 일부 글을 과거 블로그에서 이전해 왔습니다.

사용자 삽입 이미지

5분만에 그린 보스에 많은 걸 기대하지 마셈.

1. 보스 캐릭터 처리를 위한 기본 조치

public void Init_GAME()에서 보스 캐릭터의 그림을 메모리에 로드합니다.
gamescreen.enemy[1]=makeImage("./rsc/game/enemy1.png");//보스 추가

class GameScreen에서 보스 처리중임을 알리는 변수를 추가합니다.
boolean boss=false;//보스관련 추가
이 변수가 true 값이면 보스 배틀 중인 상태입니다.

보스는 송사리 캐릭터보다 크기가 훨씬 크므로, 총알이 맞는 범위를 다시 설정해 줄 필요가 있습니다.
class Enemy에 총알 판정 범위 관련 변수로 int hitrange; 를 추가합니다.

총알 명중 판정을 할 때, 기존에는 if(dist<1500) 이던 부분이
if(dist<ebuff.hitrange) 로 수정됩니다.


2. 보스 캐릭터의 발생

보스가 어느 시점에 등장하게 할 것인가?
이 게임은 루프를 돌면서 게임 내부에 설정된 레벨이 올라가는 시점이 있습니다.
그 시점에서 보스를 등장시킵니다.

보스를 등장시키는 처리, 그리고 보스가 등장중의 처리는
public void process_GAMEFLOW()에 코딩됩니다.

// 보스 관련 수정사항 추가 <- 이 주석으로부터 시작하는 소스에서
// 보스 관련 수정 끝 <- 이 주석 바로 윗줄까지가 보스 관련 처리를 위해 추가 또는 수정된 내용입니다.

간단히 살펴보면, 원래 level을 올려주는 부분이

// 기존에 레벨만 올려주던 부분에서, 레벨을 올려주면서 보스 캐릭터를 등장시킨다
System.out.println("보스 등장");
gamescreen.boss=true;
Enemy en=new Enemy(this, 1, gScreenWidth*100, 24000, 1, 0);// img 값이 1, kind 값이 1
enemies.add(en);
gamecnt=0;
level++;

이와같이 바뀌어 있습니다. boss 변수를 true로 하여 보스 전투 상태로 바꾸고, 보스 캐릭터(객체)를 생성합니다.
기존의 적 캐릭터 객체와 동일한 클래스를 사용합니다.

그리고 추가된 사항들은, 레벨 2 이상에서 보스전일 경우, 보스와 함께 송사리 캐릭터도 등장하여 난이도를 높이도록 한 것입니다.



 

3. 보스 캐릭터의 움직임

여기서부터는 class ENEMY 를 봅니다.
hitrange 변수가 추가되고, ENEMY 생성자에 보스캐릭터인 경우(kind 값이 1로 전달되면 보스) 라이프나 hitrange를 다시 설정해 줍니다.

이것을 보스로 생각하지 않고, kind값이 1인 경우의 적 캐릭터를 추가했다고 생각해도 무방합니다.

class ENEMY 의 public boolean move() 함수에서는, 공격과 움직임을 함께 처리합니다.

해당 함수에는, switch(kind) 가 두 개 있는데, 첫 번째는 공격을, 두 번째는 움직임을 처리합니다. 우선 두 번째 switch(kind) 부터 봅니다.

case 1: 부터가 보스의 움직임을 처리하는 부분입니다.
주석 처리한 보스 움직임의 시나리오를 보면 됩니다.
처음에는 화면 밖에서 안으로 들어와 오른쪽 끝에 자리 잡습니다.
그리고 플레이어를 따라 상하로 움직이면서 멈춰서 수평으로 총알을 뿌립니다.
시간이 좀 지나면 화면 중앙까지 돌진했다가 물러나면서 사방으로 총알을 뿌립니다.
그리고 보스 타임이 끝나면 화면 바깥으로 돌아 나갑니다.

두 번째 switch(kind) 의 case 1: 아래에서부터는 총알 발사를 제외한 움직임을 처리하고 있습니다.


4. 보스 캐릭터의 공격

그럼 다시 첫 번째 switch(kind) 로 돌아가면,
보스가 총알을 쏘는 것은
-상하로 움직이다 멈췄을 때 (mode 값으로는 7에 해당)
-돌진했다가 물러날 때 (mode 값으로는 5에 해당)
이때로 시나리오 상에 설정되어 있습니다.

그러므로 첫 번째 switch(kind) 의 case 1: 에서는, 송사리 캐릭터처럼 shoottype 으로 총알 발사를 결정하지 않고 mode로 총알 발사를 결정합니다.
switch(mode)에서 case 5:일 경우와 case 7: 일 경우 두 가지만 보면 됩니다.


 

※ 테스트를 위해..

적 총알이 비오듯이 쏟아지므로 보스까지 가기가 쉽지 않다..
적 총알을 줄여도 좋겠지만, 적 총알을 맞아도 라이프가 줄지 않는-무적 상태로 만들면 됩니다.
if(--mylife<=0) {
 status=3;
 gamecnt=0;
}
이 부분을 찾아서 /* */ 로 주석 처리 해 주면 됩니다.


맺음

보스 캐릭터 치고는 그다지 멋도 없고 밋밋합니다만 보스로서의 기본 소양(?)은 나름 갖췄다고 봅니다.
크게 보아서는 보스 캐릭터도 적 캐릭터의 일종입니다.
어떻게 움직이고, 어떻게 공격하도록 할 것인가.
프로그램적으로 처리하는 기술도 중요하지만 그런 설계가 튼실하게 되어 있으면, 실제 구현하는 방법은 어떤 방법이라도 좋습니다.

중요한 것은 머릿속에 이미지를 확고히 하고, 그것을 차분히 기록으로 옮겨서 구체화 하는 것입니다.




덧글

댓글 입력 영역


Books

Geek라이프

메가 드라이브 퍼펙트 카탈로그
마에다 히로유키 저/조기현 역

미소녀 일러스트 테크닉
B-은하, pen스케, 카와이 저/정유진 역

핵심강좌! Cocos2d-x
이재환 저

피규어의 교과서 레진 키트 & 도색 입문 편
후지타 시게토시 저/김정규 역
예스24 | 애드온2
일본서적 전문사이트 NEPIC