-
1. 콘솔 화면 구성 & 플레이어의 이동 구현하기C,C++로 만드는 간단한 프로젝트/Invaders(Galaga) 게임 만들기 2021. 3. 25. 20:54
게임의 기본 구성은 아래의 별 피하기 게임과 유사하다.
프로젝트의 개발 환경은 Visual Studio 2008 에서 구현을 하도록 한다.
designatedroom87.tistory.com/349?category=913294
아래의 Console 헤더 파일과 소스 파일의 내용은 위의 별 피하기 게임에서 이미 진행한 내용과 같으므로
추가적인 설명은 생략하도록 한다.
그리고 가로는 x축이고 세로는 y축으로, y값이 커질수록 위가 아닌 밑으로 내려간다.
즉, 콘솔 화면 창의 원점은 좌측상단점으로 x값이 커질수록 오른쪽으로 이동하고 y값이 커질수록 아래로 이동한다.
< Console.h >
< Console.c >
지금부터 진행하는 내용은 모두 main.c 소스 파일에서 정의한다.
아래는 플레이어에 관한 내용인데, 이에 대해 설명할 것이 있다.
플레이어의 정보에 x, y 위치는 조금 다르게 생각을 해야 한다.
결론부터 말하면, x와y는 화면으로 사용할 이차원 배열에서의 위치이다.
이와 같이 둔 이유는 화면으로 사용할 이차원 배열에 모든 내용을 저장한 하고
화면에 출력할 때, 이 이차원 배열의 각 행에 있는 정보들을 출력할 것이기 때문이다.
( 이 이차원 배열의 각 행의 맨 마지막 자리에는 NULL문자가 반드시 삽입될 것이므로,
움직일 수 있는 모든 오브젝트들의 위치 업데이트는 이를 반드시 생각해야 한다. )
즉, 위와 같이 플레이어의 위치를 설정했다는 의미는 이차원 배열에서의 19행 39열의 위치라는 의미.
그리고 이 플레이어의 x는 PlayerUnit배열의 중심을 의미할 것이다.
즉, 플레이어의 위치가 위와 같다면
플레이어의 왼쪽 날개의 x는 Player.x - PLAYER_SIZE / 2가 될 것이고
플레이어의 오른쪽 날개의 x는 Player.x + PLAYER_SIZE / 2가 될 것이다.
아래의 함수들을 하나씩 만들고 설명을 하도록 한다.
1. InitialObject 함수
이차원 배열에 배치할 수 있는 모든 오브젝트들을 이 함수 내에서 초기화를 진행하도록 하자.
2. PlayerAction 함수
네 방향키의 입력에 따라 플레이어 캐릭터가 이동을 하도록 업데이트를 하면 된다.
위,아래 이동은 이차원 배열에서 행과 관련이 있고 좌,우 이동은 이차원 배열에서 열과 관련이 있다.
그리고 이 위치들을 업데이트하고 나서, 맵 밖을 벗어났는지 확인하고 예외처리를 해주도록 하자.
그리고 위의 PlayerAction 함수 내에 아래의 문장이 있는데, if 내의 if문 내에 Player.y = HEIGHT - 2라고 적혀있는데,
Player.y = HEIGHT - 1 로 두어도 된다.그 이유는 이차원 배열 맵의 위, 아래로 이동할 수 있는 범위는 0행에서 HEIGHT - 1 까지 이동 가능하기 때문이다.
3. DrawPlayer 함수
이차원 배열에 플레이어를 저장하면 된다.
그리고, 위의 DrawPlayer 함수 내의 for 문에 아래의 if 조건이 있는데,
이 if 조건은 없어도 되며, 있어도 WIDTH가 아닌, WIDTH - 1이 되어야 한다. 그 이유는
이차원 배열의 각 행의 맨 마지막 자리( WIDTH - 1 )에는 NULL문자가 들어올 위치이기 때문이다.
if조건이 없어도 되는 이유는 플레이어가 움직일 수 있는 범위를
이미 PlayerAction 함수에서 예외처리를 했기 때문이다.
4. Draw 함수
이차원 배열의 내용을 초기화를 하고, 이차원 배열에 있는 내용을 콘솔 화면 창에 렌더를 하는 함수이다.
5. main 함수
아래는 구현 영상
헤더 파일 & 소스 파일
'C,C++로 만드는 간단한 프로젝트 > Invaders(Galaga) 게임 만들기' 카테고리의 다른 글
5 - (2). 에너미를 클래스화 하기 (0) 2021.03.26 5 - (1). 플레이어를 클래스화 하기 (0) 2021.03.26 4. 총알과 오브젝트의 충돌 체크 & 게임 종료 만들기 (0) 2021.03.26 3. 플레이어와 에너미의 총알 만들기 (0) 2021.03.26 2. 에너미의 움직임 만들기 (0) 2021.03.25