본문 바로가기
프로젝트

c언어를 이용한 슈팅게임 #3(c언어 슈팅게임)-총알구현

by 핫동경 2022. 3. 13.
반응형

[C언어를 이용해서 슈팅게임을 만들어보자]

#2에서 캐릭터의 움직임을 구현해보았는데 이번에는 스페이스바를 누를시 총알이 날아가는 기능을 구현해보겠다.

https://dongkyung.tistory.com/16

 

C언어를 이용해 만든 슈팅게임 #2

[C언어를 이용해서 슈팅게임을 만들어보자] #1에서 배경색, 커서, 초기화면을 만들었다. 이번에는 사용자의 입력을 받아서 움직이는 게임 주인공을 만들어보겠다. https://dongkyung.tistory.com/15 C언어

dongkyung.tistory.com

 

 

[#3-1 gamestart()함수에 총알 날아가는 기능 구현하기]

gamestart()에 기능을 추가하기에 앞서 플레이어의 총알을 나타내는 구조체를 선언해주도록하자

#define MAXBULLET 6//플레이어의 최대 총알 수
#define TRUE 1
#define FALSE 0

struct {
	int exist;
	int x, y;
}Bullet[MAXBULLET];

exist는 총알의 존재여부를 결정하는 변수이고 

x,y는 총알의 위치를 나타내는 좌표이다.

이 구조체의 이름을 Bullet이라고 지었고 구조체의 크기는 6으로 설정하였다.  즉 화면에 나타날 수 있는 플레이어의 

총알 최대 개수는 6개인 셈이다.

 

이제 gamestart()함수에 총알 기능을 구현해보자

속도조절 방식을 사용하여 bulletmove함수를 호출해주면 된다.

#define SPACE 0x20

void gamestart() {
	unsigned char ch;
    int i;
    init_game()
	while (1) {
		if (kbhit() == 1) {
			ch = getch();
			if (ch == SPECIAL1 || ch == SPECIAL2) {
				ch = getch();
				switch (ch) {
				case UP: case DOWN: case LEFT: case RIGHT:
					playermove(ch);
					if (frame_count % p1_frame_sync == 0)
						playermove(0);
					break;
				default:
					if (frame_count % p1_frame_sync == 0)
						playermove(0);
				}
			}
            	if (ch == SPACE) {
				for (i = 0; i < MAXBULLET && Bullet[i].exist == TRUE; i++) {}
				if (i != MAXBULLET) {
					Bullet[i].x = newx +1;
					Bullet[i].y = newy - 1;
					Bullet[i].exist = TRUE;
				}
			}
		}
		else {
			//플레이어 무브 속도조절 함수
		}
       //총알 속도조절 함수
		Sleep(Delay); // Delay 값을 줄이고
		frame_count++;// frame_count 값으로 속도 조절을 한다.
	}
}
void init_game() {
//나중에 게임이 종료되고 게임이 다시 시작될 때
  변수 값들을 초기화 해주는 영역
  //
 system("cls");  //게임이 시작되면 초기화면을 사라지게함
removeCursor();
}

전과 같이 전역변수를 사용하여 속도조절 변수를 선언하고 속도조절 방식을 사용해 함수를 호출

 

 

[#3-2 bulletmove()함수 구현하기]

void DrawBullet(int i) {
	textcolor(GREEN1,BLACK);
	gotoxy(Bullet[i].x, Bullet[i].y); printf("│");
}
void EraseBullet(int i) {
	gotoxy(Bullet[i].x, Bullet[i].y); printf("  ");
}

void bulletmove() {
	int i;
	
		for (i = 0; i < MAXBULLET; i++) {
			if (Bullet[i].exist == TRUE) {
				EraseBullet(i);
				if (Bullet[i].y == 0) {
					Bullet[i].exist = FALSE;
				}
				else {
					Bullet[i].y--;
					DrawBullet(i);
				}
			}
		}
}

만약 Bullet[i].exist 즉 존재한다면   

우선 EraseBullet(i)를 통해 총알을 지운다 

[그 후 총알의 위치를 파악할 필요가 있다. 총알의 위치가 맵 밖으로 나갔다면 총알의 존재여부를 FALSE로하고

총알을 다시 그릴 필요가 없다

하지만 맵 밖이 아니라면 총알의 Y위치를 --해주고(총알이 올라가야하므로) 총알으 다시 그려준다]

 

 

총알 발사 구현

 

[#마무리]

이번 내용까지 완성하였다면 위 그림처럼 총알이 발사되는 것까지 확인할 수 있을 것이다.

다음 내용에서는 적들을 구현하고 적들의 움직임을 구현해보겠다.

 

반응형

댓글