반응형
[C언어를 이용해서 슈팅게임을 만들어보자]
#6에서 충돌구현을 했고 이번에는 아이템을 만들어보겠다.
2022.03.15 - [프로젝트] - c언어를 이용한 슈팅게임#6(c언어 슈팅게임)-충돌구현
[#7-1 어떤 방법으로 아이템 생성할 것인가]
이전 글들을 봐왔다면 몇초마다 함수를 실행할 것인가와 frame변수를 이용해서 함수 호출의 빈도를 조절해서 플레이어의 속도와 총알의 속도 적의 움직임 속도 등을 제어할 수 잇었다.
[#7-2 아이템 생성하기]
#define ITEM "<H>"
#define SPEEDITEM "<S>"
#define POWERITEM "<P>"
#define MISILEITEM "<M>"
int items[WIDTH][HEIGHT] = { 0 };
int items_count = 0;
int items_use = 35; //아이템 나타나는 시간(목숨 아이템)
int speeditems[WIDTH][HEIGHT] = { 0 };
int speeditems_count = 0;
int speeditems_use = 23; //아이템 나타나는 시간(스피드 아이템)
○ 2차원 배열을 이용해 아이템의 x,y좌표를 설정할 수 있다.
○ items_count로 아이템의 개수설정
○ item_use로 아이템이 몇초마다 생성되게 할 것인지 설정
[#7-3 아이템 생성 및 움직임 함수 구현하기]
void showitem() {
int x, y;
x = 7 + rand() % 40;
y = 2;
textcolor(YELLOW2, BLACK);
gotoxy(x, y);
printf(ITEM);
items[x][y] = 1;
items_count++;
textcolor(YELLOW2, BLACK);
}
void moveitem() {
int x, y, dx, dy, nx, ny;
int newitems[WIDTH][HEIGHT] = { 0 };
if (items_count == 0)
return;
for (x = 0; x < WIDTH-2; x++) {
for (y = 0; y < HEIGHT; y++) {
if (items[x][y]) {
dx = rand() % 3 - 1; // -1 0 1
dy = 1;
nx = x + dx;
ny = y + dy;
if (nx == WIDTH-5) nx = WIDTH - 6;
if (nx < 7) nx = 8;
if (ny < 1) ny = 1;
if (ny > HEIGHT - 1) {
gotoxy(x, y);
printf(" ");
items_count--;
}
else {
gotoxy(x, y);
textcolor(YELLOW2, BLACK);
printf(" "); // erase gold
gotoxy(nx, ny);
printf(ITEM);
newitems[nx][ny] = 1; // 이동된 아이템의
textcolor(YELLOW2, BLACK);
}
}
}
}
memcpy(items, newitems, sizeof(newitems)); // 한번에 gold 위치를 조정한다.
}
○ 아이템의 초기위치 난수로 설정하기
○ 아이템이 맵 맨아래까지 내려갔다면 아이템 없애주기
○ 아니라면 아이템 지우고 새로운 위치에 그려주기
다른 아아템들도 위와같은 방법으로 설정하면 맵에 아이템이 나타나게된다.
void playermove(unsigned char ch) {
int move_flag = 0;
static unsigned char last_ch = 0;
if (called == 0) {
removeCursor();
playerdraw(oldx, oldy);
called = 1;
}
if (keep_moving && ch == 0)
ch = last_ch;
last_ch = ch;
switch (ch) {
case UP:
if (oldy > 25)
newy = oldy - 1;
move_flag = 1;
break;
case DOWN:
if (oldy < HEIGHT - 3)
newy = oldy + 1;
move_flag = 1;
break;
case LEFT:
if (oldx > 2)
newx = oldx - 1;
move_flag = 1;
break;
case RIGHT:
if (oldx < WIDTH - 6)
newx = oldx + 1;
move_flag = 1;
break;
}
if (move_flag) {
playererase(oldx, oldy);
playerdraw(newx, newy); // 새로운 위치에서 플레이어 표시
oldx = newx; // 마지막 위치를 기억한다.
oldy = newy;
if (items[newx][newy]) {
heart++;
items[newx][newy] = 0;
items_count--;
}
}
}
○ 플레이어의 움직임 도중 플레이어의 움직임이 아이템의 좌표와 같다면 속도조절 변수를 조절해주어서
속도를 조절해준다. 실제 아이템을 먹은 것 같이 효과를 낼 수 있다.
반응형
'프로젝트' 카테고리의 다른 글
라즈베리파이를 이용한 스마트 룸 시스템 (0) | 2022.04.05 |
---|---|
c언어를 이용한 슈팅게임#6(c언어 슈팅게임)-충돌구현 (0) | 2022.03.15 |
c언어를 이용한 슈팅게임#5(c언어 슈팅게임)-적 총알구현 (0) | 2022.03.15 |
c언어를 이용한 슈팅게임#4(c언어 슈팅게임)-적 구현 (0) | 2022.03.14 |
c언어를 이용한 슈팅게임 #3(c언어 슈팅게임)-총알구현 (0) | 2022.03.13 |
댓글