지난 시간에는 캐릭터 이동까지 구현했다.
투사체 코드
오늘은 이 캐릭터가 총알을 쏘는 것을 구현할 것이다.
1
2
3
4
5
6
7
8
|
//탄막 정보 구조체
typedef struct bullet {
int x, y;
bool Active;
}Bullet;
Bullet Bullet_info[MAXBULLET];
|
cs |
일단 총알 하나당 x,y의 위치와 이 총알이 현재 화면에 있는지 확인하기 위해 bool 변수를 선언한다.
이후 총알이 여러개니까 배열로 선언해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
void Bullet_Shoot(Bullet* pBullet, plane* pPlane) {
//총알 이동
for (int i = 0; i < MAXBULLET; i++) {
if (pBullet[i].Active) {
pBullet[i].y--;
mapData[pBullet[i].y * Map_X_MAX + pBullet[i].x] = '*';
if (pBullet[i].y < 1) {
pBullet[i].Active = false;
}
}
}
const int a = pPlane->x;
const int b = pPlane->y;
//총알 발사
if (GetAsyncKeyState(VK_SPACE)) { //SPACE
if (b_index > 10)return;
pBullet[b_index].x = a;
pBullet[b_index].y = b;
pBullet[b_index].Active = true;
b_index++;
}
}
|
cs |
여기서 핵심은
pBullet.x = pPlane.x를 바로 해버리면, 캐릭터의 움직임에 총알도 영향을 받기 때문에
a,b 와 같은 새 변수를 선언해준뒤 넣어준다.
이제 스패이스를 누르면 총알이 나가는 것을 구현 완료 했다.
그런데 총알을 10개로 제한했는데 알길이 없어서 표현해야겠다.
UI 코드
UI는 전에 작성했던 DrawSprite 함수를 전적으로 이용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//맵 데이터를 수정하는 함수
void EditMap(int x, int y, char str) {
if (x > 0 && y > 0 && x - 1 < Map_X_MAX - 1 && y - 1 < Map_Y_MAX - 1)
mapData[(y - 1) * Map_X_MAX + x - 1] = str;
}
//텍스트를 이미지화 하여 출력하는 함수
void DrawSprite(int x, int y, int size_x, int size_y, char spr[]) {
for (int i = 0; i < size_y; i++) {
for (int j = 0; j < size_x; j++) {
EditMap(x + j, y + i, spr[i * size_x + j]);
}
}
}
|
cs |
Unity 해보신분은 이미지 sprite를 아실텐데, 이미지를 만드는 함수라고 생각하면된다.
시작점과, 이미지의 크기, 이미지를 만들 텍스트 문자열이 있으면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
void ShowOption() {
DrawSprite(1, 39, 7, 1, "총알 : ");
for (int i = 0; i <= 10; i++) {
if (b_index - 1 >= i) {
EditMap(10+i, 39, '/');
}
else {
EditMap(10 + i, 39, '0');
}
}
DrawSprite(60, 37, 18, 1, "조작 : 상,하,좌,우");
DrawSprite(60, 38, 12, 1, "공격 : Space");
DrawSprite(60, 39, 13, 1, "재장전 : Ctrl");
}
|
cs |
이후 코드를 이렇게 짜 준다.
인덱스가 있을때를 참고하여 총알이 있는것을 표현한다.
여기서 주의할점은 한글 및 특수문자들은 콘솔의 두칸을 차지한다. 그래서 그것을 따지면서 이미지 크기를 설정해야한다.
ex) "총알 : " 문자열의 길이 = 7(한글 한글자당 2칸)
아래에 이쁘게 잘 표현이 되었다! ㅎㅎ
오늘은 여기까지~
Reference
'코딩 > C, C++' 카테고리의 다른 글
C언어로 게임 만들기(7) - 완성. (코드, 구현 영상) (0) | 2023.06.02 |
---|---|
C언어로 게임 만들기(5) - 게임 씬 추가(getch함수, exit함수) (0) | 2023.05.28 |
C언어로 게임 만들기(4) - 적 구현(rand함수, srand함수, time함수) (1) | 2023.05.20 |
C언어 게임 만들기(2) - 캐릭터 출력 및 이동 (1) | 2023.05.14 |
C언어로 게임 만들기(1) - (콘솔창 세팅, window.h, conio.h) (6) | 2023.05.13 |