본문 바로가기
프로젝트

c언어를 이용한 슈팅게임#6(c언어 슈팅게임)-충돌구현

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

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

#5에서 적의 총알을 구현해보았고 이번에는 적의 총알과 플레이어의 총알의 충돌구현을 해보겠다.

2022.03.15 - [프로젝트] - c언어를 이용한 슈팅게임#5(c언어 슈팅게임)

 

c언어를 이용한 슈팅게임#5(c언어 슈팅게임)

[C언어를 이용해서 슈팅게임을 만들어보자] #4에서 적을 출현시켰고 이번에는 적의 총알을 구현해보겠다. 2022.03.14 - [프로젝트] - c언어를 이용한 슈팅게임#4(c언어 슈팅게임) c언어를 이용한 슈팅

dongkyung.tistory.com

 

 

 

[#6-1 적이 내 총알에 맞았을 때 상황 구현하기]

void Enemyfall() {
	int i;
	for (i = 0; i < MAXENEMY; i++) {
		if (Enemy[i].exist == FALSE || Enemy[i].type == -1)
			continue;
		if (Enemy[i].y == Bullet[i].y && abs(Enemy[i].x - Bullet[i].x) <= 7) {
			gotoxy(Bullet[i].x, Bullet[i].y);
			printf("   ");
			Bullet[i].exist = FALSE;
			Enemy[i].type = -1;
			score += 10;
			break;
		}
	}
}

○ Enemy[i].exist가 FALSE 거나 Enemy[i].type이 -1이라면 countinue문을 써서 넘어간다.

 

○ 적이 내 총알에 맞았다면 적의 y좌표와 내 총알의 y좌표가 같아야 할 것이다.

 

적의 x좌표 - 내 총알의 x좌표 가 절댓값 7보다 작다면(적의 양옆 길이 생각) 충돌했다고 판단하자.

 

그럼 총알의 위치로 가서 printf(" ")문을 통해 총알을 지워주자

 

적이 내 총알에 맞앗으므로 Enemy[i].type=-1을 해주자 적을 구현할 떄 type이 -1이라면 Enemymove() 함수에서

 

    .exist가 FALSE로 구현하고 적을 지워줬던 것을 기억하자

 

○ 전역변수 score을 추가해주고 적을 죽였으니 점수 10점을 추가해주자

 

 

[#6-2 내가 적의 총알에 맞았을 때]

void playerfall() {
	int i;
	for (i = 0; i < MAXENEMYBULLET; i++) {
		if (EnemyBullet[i].exist == FALSE)
			continue;
		if (EnemyBullet[i].y == newy && abs(EnemyBullet[i].x - newx) <= 3) {
			EnemyBullet[i].exist = FALSE;
			gotoxy(EnemyBullet[i].x, EnemyBullet[i].y);
			printf("    ");
			heart--;
		}
	}
}

○ EnemyBullet[i].exist 가 FALSE 라면 continue를 통해 넘어가자

 

○ 내가 적의 총알에 맞았으니 적의 총알의 y좌표와 나의y좌표가 같아야한다.

 

○ 적의 총알 x좌표 - 나의x좌표  가 3보다 작거나 같다면(나의 크기 고려해서) 맞았다고 판정하자

 

○ 적의 총알은 FALSE가 되어 사라지게 해주고 전역변수 heart를 선언해 목숨을 1개 --해주자

 

 

[#6-3 점수와 하트 출력하기]

void info() {
	textcolor(YELLOW2, BLACK);
	textcolor(WHITE, BLACK);
	gotoxy(45, 48); printf("점수: %d", score);
	gotoxy(15, 48);
	printf("목숨:");
	if (heart >= 4) {
		heart = 4;
		gotoxy(20, 48); printf("       ");
		gotoxy(20, 48); printf("♥♥♥♥");
	}
	else if (heart == 3) {
		gotoxy(20, 48); printf("       ");
		gotoxy(20, 48); printf("♥♥♥");
	}
	else if (heart == 2) {
		gotoxy(20, 48); printf("       ");
		gotoxy(20, 48); printf("♥♥");
	}
	else if (heart == 1) {
		gotoxy(20, 48); printf("       ");
		gotoxy(20, 48); printf("♥");
	}
	else {
		gotoxy(20, 48);
		printf("  ");
	}

}

○ gotoxy문 노가다를 사용해 점수와 heart를 출력해주자  

 

○ heart=3으로 전역변수로 선언하였지만 4일때는 아이템을 먹었을 경우이다. 아이템은 다음 글에서 구현하겠다.

 

 

[#6-4 gamestart함수에 추가하기]

○ 정보를 출력하는 함수와 충돌을 확인하는 함수들은 시간마다 확인하는게 아니라 계속 확인해야 하므로

    if문에 넣지 않고 while문 바로 아래 계속 확인하도록 한다.

 

 

[#마무리]

충돌구현까지 구현해보았다.

다음에는 게임 내 사용되는 아이템들에 대해 구현해보도록 하겠다.

 

반응형

댓글