본문 바로가기
프로젝트

c언어를 이용한 슈팅게임#4(c언어 슈팅게임)-적 구현

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

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

#3에서 플레이어의 총알 구현을 하였고 이번에는 적들의 생성과 적들의 움직임을 구현해보겠다.

https://dongkyung.tistory.com/17

 

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

[C언어를 이용해서 슈팅게임을 만들어보자] #2에서 캐릭터의 움직임을 구현해보았는데 이번에는 스페이스바를 누를시 총알이 날아가는 기능을 구현해보겠다. https://dongkyung.tistory.com/16 C언어를

dongkyung.tistory.com

 

[#4-1 적들 출현시키기]

함수 구현에 앞서 적들에 대한 구조체를 선언을 먼저하자.

또한 Enemyunit[] 배열을 통해 적의 생김새를 구현해보았다. 많이 못생겼다....

○ exist 는 적의 존재 여부를 확인하기 위한 변수이다

x,y는 적의 x,y 좌표값 변수이다

move는 적의 이동경로 변수이다. 1이면 오른쪽으로 -1이면 왼쪽으로 움직이게 설정할 것이다

type은 적의 생김새를 결정하는 변수이다. type의 숫자에 따라 Enemyunit의 배열의 적이 나타나게 된다

#define MAXENEMY 6

struct {
	int exist;
	int x, y;
	int number;
	int move;
	int type;
}Enemy[MAXENEMY];

char* Enemyunit[] = { "⊙★⊙","@▒@","♨▣♨","◐▼◑" };

 

 

 

 

 

 

[#4-2 showenemy()함수 구현하기]

○ 난수를 설정해 랜덤한 위치에 적을 위치시킬 것이다

○ location은 move에 영향을 준다. 1이면 move에 1을(오른쪽 이동)  1이 아니라면 move에 -1을(왼쪽으로 이동)

○ 적들의 설정값들을 설정하고 적의 유형을 설정해서 존재여부를 TRUE 시켜준다

void showenemy() {
	int i, location, direct, hieght;
	location = rand() % 2;
	direct = 5 + rand() % 55;
	hieght = 1 + rand() % 8;
	for (i = 0; i < MAXENEMY && Enemy[i].exist == TRUE; i++) {}
	if (i != MAXENEMY) {
		if (location == 1) {
			Enemy[i].x = direct;
			Enemy[i].y = hieght;
			Enemy[i].move = 1;
		}
		else {
			Enemy[i].x = direct;
			Enemy[i].y = hieght;
			Enemy[i].move = -1;
		}
		Enemy[i].type = rand() % 4;
		Enemy[i].exist = TRUE;
	}
}

 

[#4-3 Enemymove()함수 구현하기]

○ Enemy[i].type==-1 이 경우는 적이 나의 총알에 맞아 죽었을 때를 나타내는 설정인데 나중에 충돌구현에서 

    다루도록 하겠다. 간단히 얘기해 적이 총에 맞아 죽었으면 화면에서 지워줘야한다. 그러므로 printf("공백")으로

    적을 지워주고 존재여부를 FALSE 시킨다.

○ 여기서 적이 이동을하게되는데 벽에 부딪히면 반대로 가는 움직이는 것을 구현했다.

    x좌표가 맵보다 크다면 move를 상반시켜 반대로 움직이게 해주었다.

○ 맵 밖으로 나가지 않았다면 printf(Enemyunit[Enemy[i].type])으로 적을 출력시켜준다.

void Enemymove() {
	int i;
	for (i = 0; i < MAXENEMY; i++) {
		if (Enemy[i].exist == TRUE) {
			if (Enemy[i].type == -1) {
				gotoxy(Enemy[i].x - 1, Enemy[i].y);
				printf("          ");
				Enemy[i].exist = FALSE;
				continue;
			}
			if (Enemy[i].x > 52) {
				Enemy[i].x -= 1;
				Enemy[i].move = -1;


			}
			else if (Enemy[i].x <= 3) {

				Enemy[i].move = 1;
				Enemy[i].x += 1;
				gotoxy(Enemy[i].x, Enemy[i].y);
				printf(" ");
			}
			else {
				Enemy[i].x += Enemy[i].move;
				gotoxy(Enemy[i].x, Enemy[i].y);
				printf(Enemyunit[Enemy[i].type]);
				printf(" ");
			}
		}
	}
}

 

 

 

적들 움직임 구현

 

 

[#마무리]

이번 내용까지 완성하였다면 캐릭터의 움직임, 총알발사 , 적의 생성, 적의 움직임 까지 구현되는 것을 

확인할 수 있을 것이다. 

다음 내용에서는 적들의 총알을 구현해보겠다.

 

 

반응형

댓글