본문 바로가기
GameMaker강좌[GMS2]/액션게임강좌

[게임메이커 강좌-액션][GMS2]봄버맨 만들기-5 : 게임오버와 클리어

by 타락카얀 2022. 2. 4.
728x90

 

 

 

 

 

이번 강좌에서는 게임 클리어 이벤트를 구성해봅시다.

 

 

 

 

 

◈ 게임 시작

 

 

먼저 게임 시작 알림을 표시해봅시다.

 

(▲ 게임 시작 표시)

 

게임 시작 이미지를 스프라이트로 추가하고, 중심점을 가운데로 맞춥니다.

 

(▲ 게임 시작 이미지)

 

오브젝트를 하나 만들고, 이미지를 지정합니다.

 

(▲ 게임 시작 표시 오브젝트)

 

이 오브젝트는 몇 초정도 표시하고, [알람 이벤트]를 통해 파기할 거에요.

 

[Create 이벤트]를 추가하고, [알람 이벤트]를 호출합니다.

 



     ● obj_gamestart - Create 이벤트
     
     alarm[0] = 90;

 

[알람 이벤트]를 추가하고, 오브젝트를 파기하면 됩니다.

 



     ● obj_gamestart - Alarm 0 이벤트
     
     instance_destroy( );

 

게임 시스템 오브젝트에 [Room Start 이벤트]를 추가하고, 게임 시작 오브젝트를 생성해주면 완성됩니다.

[Room Start 이벤트]는 룸이 시작할 때마다 실행되는 이벤트 입니다.

 



     ● obj_game_system - Room Start 이벤트
     
     instance_create_depth( room_width*0.5, room_height*0.5, -10000, obj_gamestart );

 

 

 

 

 

◈ 게임 오버

 

 

게임 오버를 구성해봅시다.

 

(▲ 게임 오버 표시)

 

게임 오버 이미지를 스프라이트로 추가하고, 중심점을 가운데로 맞춥니다.

 

(▲ 게임 오버 이미지)

 

오브젝트를 만들고 이미지를 지정합니다.

이 오브젝트는 단순히 표시만을 위한 것으로 이벤트는 없어도 됩니다.

 

(▲ 게임오버 오브젝트)

 

만약 게임 오버 메시지가 뜬 후, 게임을 자동으로 재시작 하고 싶다면, [Create 이벤트]에서

[알람 이벤트]를 대기시간만큼 호출하고,

 

예)

 



     ● obj_gameover - Create 이벤트
     
     alarm[0] = 120;

 

[알람 이벤트]에서 game_restart( ) 함수를 사용하면, 게임 오버 메시지가 뜨고, 지정한

대기시간이 지나면 자동으로 게임을 재시작할 수 있습니다.

 

예)

 



     ● obj_gameover - Alarm 0 이벤트
     
     game_restart( );

 

현재 스테이지만 재시작하고 싶다면 먼저 라이프, 타이머 등 게임에 필요한 변수를 초기화하고,

room_restart( ) 함수를 사용하여 룸을 재시작하면 됩니다.

 

예)

 



     ● obj_gameover - Alarm 0 이벤트
     
     global.game_score = 0;
     global.game_life = 3;
     global.game_time = 60*60*2;
     global.bomb_numb = 1;
     global.bomb_level = 1;
     
     room_restart( );

 

다른 방법으로 게임 오버 메시지가 표시되었을 때, 특정 키를 눌러 재시작하는 방법이 있습니다.

 

예)



     ● obj_gameover - Step 이벤트


     if keyboard_check_pressed( vk_enter ){ //Enter 키를 누르면 룸 재시작


     global.game_score = 0;
     global.game_life = 3;
     global.game_time = 60*60*2;
     global.bomb_numb = 1;
     global.bomb_level = 1;
     
     room_restart( );


     }

 

이제 게임 오버를 표시해야겠지요.

게임 시스템 오브젝트에 [Step 이벤트]를 추가합니다.

게임 오버를 표시하려면 게임오버 조건을 만들어야 합니다.

게임 오버는 라이프가 0일 때, 게임오버 오브젝트를 표시합시다.

 



     ● obj_game_system - Step 이벤트
     
     if global.game_life< = 0{
     if !( instance_exists( obj_gameover ) ){ instance_create_depth( room_width*0.5
     , room_height*0.5, -10000, obj_gameover ); }

     }

 

다음은 게임 타이머 구성입니다.

게임 시작 오브젝트의 [Room Start 이벤트]에 스테이지 시간을 정합니다.

시간은 1스텝(프레임)= 1/게임 속도 입니다.

초단위면 (게임속도)x(초), 분단위면 (게임속도)x(초)x(분)으로 계산하면 쉽습니다.

예를 들어 2분을 정한다면, (게임속도)x(초)x(분)으로 계산해서 60x60x2 로 간단하게

설정할 수 있습니다.

 



     ● obj_game_system - Room Start 이벤트


     global.game_time = 60*60*2;

 

타이머는 [Step 이벤트]와 같은 곳에서 매 스텝마다 감소시키면 됩니다.

타이머가 0이 되면 플레이어는 파기 라이프가 감소합니다.

만약 라이프가 남았다면 추가 시간을 주도록 해요.

 



     ● obj_game_system - Step 이벤트
     
     //타임 오버
     if global.game_time< = 0{
     with( obj_player ){ event_user( 0 ); }//플레이어 파기 이벤트 호출
     if global.game_life>0{ global.game_time = 60*30; }
     }
     
     
     if global.game_time>0{ global.game_time- = 1; }//타이머 작동

 

 

 

 

 

◈ 게임 클리어

 

 

클리어 이벤트를 구성해봅시다.

 

(▲ 클리어 표시)

 

먼저 클리어 이미지를 스프라이트 이미지로 추가하고, 중심점을 가운데로 설정합니다.

 

(▲ 클리어 이미지)

 

오브젝트를 만들고, 이미지를 지정합니다.

 

(▲ 클리어 오브젝트)

 

게임 클리어 상황에서 잠깐동안 클리어 이미지를 화면에 표시하고, 다음 룸으로 이동시킬 것입니다.

[Create 이벤트]를 추가하고, [알람 이벤트]를 호출합니다.

 



     ● obj_gameclear - Create 이벤트
     
     alarm[0] = 90;

 

[알람 이벤트]를 추가하고, 다음 룸으로 이동시킵니다.

특정 룸으로 이동시키려면, room_goto(룸) 으로 이동시키면 됩니다.

 



     ● obj_gameclear - Alarm 0 이벤트
     
     room_goto_next( );

 

클리어 이미지를 표시하려면 게임 클리어 상황을 만들어야 겠죠.

게임 클리어는 처음 구상했던대로 몬스터를 모두 클리어하면 다음 스테이지를

향하는 통로가 열리게 합니다.

그리고 플레이어는 이 통로로 갔을 때 미션을 완수하고 다음 스테이지로 이동할 거에요.

 

(▲ 스테이지 통로)

 

단순하죠.

 

스테이지 통로이미지를 스프라이트 이미지로 추가합니다.

 

(▲ 스테이지 통로 이미지)

 

오브젝트를 만들고, 이미지를 지정합니다.

마스크가 일정하지 않은 경우 그리드 크기의 마스크 이미지를 지정해주세요.

 

(▲ 스테이지 통로 오브젝트)

 

이 오브젝트는 처음에는 안보이다가, 몬스터를 모두 클리어했을 때, 보이도록 할 겁니다.

따라서 처음 오브젝트는 visible을 체크해제합니다.

 

그리고 [Step 이벤트]를 추가하고, 클리어 조건을 구성합니다.

먼저 몬스터가 룸에 존재하는지 확인하고, 몬스터가 없고, 현재 위치에 벽과 같은

오브젝트들이 없을 때, 플레이어와 충돌하면 클리어 조건에 도달합니다.

 



     ● obj_goal - Step 이벤트
     
     image_speed = 0.2;
     
     if !( instance_exists( obj_enemy_parent ) ){
     if place_free( x, y ){
     
     visible = 1; //오브젝트 보이기


     // 게임 클리어 메시지 표시
     if place_meeting( x, y, obj_player ){
     if !( instance_exists( obj_gameclear ) ){
     
          with( obj_player ){ instance_destroy( ); }//플레이어는 단순 파기
          instance_create_depth( room_width*0.5, room_height*0.5, -10000, obj_gameclear );
     
     }
     }
     // 게임 클리어 메시지 표시
     
     }
     }

 

이 오브젝트를 룸에 배치합니다.

 

(▲ 룸에 배치)

 

오브젝트는 visible을 체크해제했기 때문에 처음에는 보이지 않다가, 클리어 조건에 해당하면

다시 보이게 될 겁니다.

 

여기까지 제대로 작동하는지 테스트해봅시다.

 

 

 

bomberman_04.yyz
0.45MB

 

 

 

 

 

 

300x250

댓글