[C언어를 이용해서 슈팅게임을 만들어보자]
#5에서 적의 총알을 구현해보았고 이번에는 적의 총알과 플레이어의 총알의 충돌구현을 해보겠다.
2022.03.15 - [프로젝트] - c언어를 이용한 슈팅게임#5(c언어 슈팅게임)
[#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문 바로 아래 계속 확인하도록 한다.
[#마무리]
충돌구현까지 구현해보았다.
다음에는 게임 내 사용되는 아이템들에 대해 구현해보도록 하겠다.
'프로젝트' 카테고리의 다른 글
라즈베리파이를 이용한 스마트 룸 시스템 (0) | 2022.04.05 |
---|---|
c언어를 이용한 슈팅게임#7(c언어 슈팅게임)-아이템구현 (0) | 2022.03.17 |
c언어를 이용한 슈팅게임#5(c언어 슈팅게임)-적 총알구현 (0) | 2022.03.15 |
c언어를 이용한 슈팅게임#4(c언어 슈팅게임)-적 구현 (0) | 2022.03.14 |
c언어를 이용한 슈팅게임 #3(c언어 슈팅게임)-총알구현 (0) | 2022.03.13 |
댓글