inflearn logo
강의

Course

Instructor

Making a C language shooting game

오류가 뜨는데 왜 그런지 모르겠습니다.

361

qkrqkrty

1 asked

0

아래와 같은 오류가 뜹니다...

 

식별자 "KeyControl"이 정의 되어있지 않습니다. (줄 106)

식별자 "EnemyDraw"이 정의 되어있지 않습니다. (줄 110)

식별자 "ClashEnemyAndBullet"이 정의 되어있지 않습니다. (줄 111)

(그리고 식별차를 찾을수 없다는 오류도 같은 줄에서 뜹니다 ㅠㅠ)

main 의 반환형식이 int 이어야 하는데 void 입니다.(줄 39)

'<': signed 또는 unsigned가 일치하지 않습니다. (줄 66)

 

이런 오류가 뜨는데 문제가 뭔지 모르겠습니다.

아래는 제가 쓴 코드입니다.

 

 

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<windows.h>

#include<time.h>

#include<stdbool.h>

 

struct BULLET {

int x; //미사일 x좌표

int y; // '' y 좌표

bool fire; // 발사상태

};

 

//배열로 배경을 죄표로 만든다

char bg[25][80];

 

//플레이어 좌표

int playerX;

int playerY;

 

//적좌표

int enemyX;

int enemyY;

 

//미사일 개수

BULLET playerBullet[20];

 

//함수설계

void ClearScreen(); //화면을 지운다

void GameMain(); //게임전체를 관리하는 함수

void PrintScreen(); //화면을 그려주는 함수

void KeyControl(); //키 관련된 함수

void PlayerDraw(); //플레이어 그리는 함수

void EmemyDraw(); //적 그리는 함수

void BulletDraw(); //미사일 그리는 함수

void EnemyMove(); //적 움직이는 함수

void ClashEmemyAndBullet(); //충돌처리 함수

 

void main() {

//랜덤함수 준비

srand((unsigned)time(NULL));

 

//플레이어 좌표 위치

playerX = 0;

playerY = 12;

 

//적좌표 위치

enemyX = 77;

enemyY = 12;

 

//플레이어 미사일 초기화(미사일 발사 전 준비상태)

for (int i = 0; i < 20; i++) {

 

playerBullet[i].x = 0;

playerBullet[i].y = 0;

playerBullet[i].fire = false;

}

 

 

//현재 초단위 시간을 받아온다.

int dwTime = GetTickCount();

 

//게임 실행 무한루프

while (true) {

//0.05초 지연

if (dwTime + 50 < GetTickCount()) {

dwTime = GetTickCount();

 

//지우고

ClearScreen();

//적이 움직이고

GameMain();

 

//그려주고

PrintScreen();

}

}

 

 

 

 

}

 

//화면을 지운다.

void ClearScreen() {

 

system("cls");

//콘솔창 지움

 

//배열에 공백을 넣어서 지움

for (int y = 0; y<25; y++) {

for (int x = 0; x < 80; x++) {

bg[y][x] = ' ';

}

}

 

}

 

 

 

 //게임전체를 관리하는 함수

void GameMain() {

keyControl(); //키입력

BulletDraw();

PlayerDraw();

EnemyMove();

EnemyDraw();

ClashEnemyAndBullet();

 

 

 

 

 

}

 

 

 

 

//화면 그려주는 함수 - 배경의 좌표를 잡을 때 이렇게 잡음

void PrintScreen() {

bg[24][79] = '\0'; //맨 마지막 배열에 널 문자를 넣어주면 배열이 문자열이 된다.

printf("%s", bg); // 문자열로 전체 배경을 표시.

 

}

 

 

 

 

//키관련 함수

void KeyControl() {

 

char pressKey;

//키가 입력되면 

if (_kbhit()) {

pressKey = _getch();

 

switch (pressKey) {

case 72://위쪽 방향키

playerY--;

if (playerY < 1)

playerY = 1; // 만약 플레이어의 Y 값이 1보다 작아짐(0이 되는 경우)

//플레이어 위쪽 버튼을 눌러도 그 자리에 멈추도록 함(오류방지)

break;

case 75://왼쪽 방향키

playerX--;

if (playerX < 0)

playerX = 0;

break;

case 77://오른쪽 방향키

playerX++;

 

if (playerX > 75)

playerX = 75;

break;

case 80://아래쪽 방향키

playerY++;

if (playerY > 23)

playerY = 23;

break;

case 32://스페이스바 : 미사일 발사

for (int i = 0; i < 20; i++) {

if (playerBullet[i].fire == false) {

playerBullet[i].fire = true;

//플레이어 앞에서 미사일을 쏘기 +5(플레이어 보다 5칸 앞에서 나감)

playerBullet[i].x = playerX + 5;

playerBullet[i].y = playerY;

break; //한발만 발사해야해서.

}

}

 

 

}

}

 

}

 

 

 

//미사일 그리는 함수

void BulletDraw() {

for (int i = 0; i < 20; i++) {//전체 미사일 20개 중

if (playerBullet[i].fire == true) {//플레이어 미사일이 날아가고 있는 상태가 true

//미사일을 그림

bg[playerBullet[i].y][playerBullet[i].x - 1] = '-';//미사일 몸체

//[playerBullet[i] 뒤에 .x나 .y를 넣어주면 좌표가 된다

bg[playerBullet[i].y][playerBullet[i].x ] = '>';

 

playerBullet[i].x++; //미사일 앞으로 +1

 

if (playerBullet[i].x > 79) {// 미사일이 80을 넘어갈때,

 

playerBullet[i].fire = false; // 끝에 도달 : 미사일 준비상태로 전환

}

}

}

}

 

 

 

//플레이어 그리는 함수

void PlayerDraw() {

bg[playerY - 1][playerX + 0] = '-';

bg[playerY - 1][playerX + 0] = '>';

bg[playerY + 0][playerX + 1] = '>';

bg[playerY + 0][playerX + 2] = '>';

bg[playerY + 0][playerX + 3] = '>';

bg[playerY + 1][playerX + 0] = '-';

bg[playerY + 1][playerX + 1] = '>';

 

//->

//>>>모양으로 그려짐 (현재 플레이어 좌표가 y12 x0 임.)

//->

}

 

 

 

 

//적 그리는 함수

void EmemyDraw() {

 

bg[enemyY][enemyX - 2] = '<';

bg[enemyY][enemyX - 1] = '-';

bg[enemyY][enemyX - 0] = 'O';

bg[enemyY][enemyX + 1] = '-';

bg[enemyY][enemyX + 2] = '>';

//<-O-> 모양의 적

 

 

}

 

 

 

 

//적 움직이는 함수

void EnemyMove() {

 

//적은 왼쪽으로 오게 됨.

enemyX--;

 

if (enemyX < 2) {

enemyX = 77;

enemyY = (rand() % 20) + 2; // 적의 Y좌표(위 아래)를 랜덤하게 바꿔줌

 

}

 

}

 

 

 

 

//충돌처리 함수

void ClashEmemyAndBullet() {

 

//미사일은 20개. 전체 판별

 

for (int i = 0; i < 20; i++) {

 

if (playerBullet[i].fire == true) {//미사일이 살아있고

 

if (playerBullet[i].y == enemyY) {//적과 미사일의 y값이 같고

 

if (playerBullet[i].x >= (enemyX - 1)

&& playerBullet[i].x <= (enemyX + 1)) {

//플레이어 미사일의 x값이 같은지 판별

//x값은 적의 크기만큼 x-1, x, x+1 까지 세개의 좌표가 잘충돌되게 함.

//&&를 사용

 

enemyX = 77;

enemyY = (rand() % 20) + 2;

playerBullet[i].fire = false;

//충돌되면 적의 y 값을 바꿔줌

}

}

}

}

 

}

 

 

c

Answer 1

0

kosart

마지막 강의에 슈팅게임 전체 소스파일 올려드렸습니다.

비주얼스튜디오버젼은 2019입니다.

한번 틀린부분 확인해보세요!

안녕하세요. 계속 프로젝트를 해야지 하다가 결제하고 환경 설정 중입니다.

0

14

1

Export template 안됨

1

26

2

scanf("%d\n") 의미

0

20

1

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

37

2

26년 1회 실기 해설 강의

0

51

2

주소 연산자(&) 간접 지정자(*) 반대 개념

0

33

1

53번 4-1 자료 오류 있는 것 같습니다.

0

68

2

7번문제

0

57

2

C언어 변형문제 9번문제 Pdf 수정요청

0

45

2

메서드 오버드라드

0

45

2

실수

0

45

1

공부 우선순위 우선강의 알려주세요

0

85

1

생성자 호출순서 강의 10번 문제 30분대 질문입니다

0

46

2

25년 2회 기출 5:40 질문입니다.

0

39

2

C언어 출제변형 6번 문제

0

50

2

c언어 출제변형 강의 질문

0

31

2

28:40

0

33

2

C :  언어 배열과  문자열 수업자료

0

28

2

파이썬 리스트, 딕셔너리 질문

0

41

2

1강이 안나오네요?

0

58

2

mac OS 에서 프로젝트 진행 시 라이브러리 없음

0

325

1

콘솔창 크기 바꿀때 윈도우11에서 속성창이 안보입니다. ㅠㅠ

1

2765

3

질문있습니다

0

467

3

선생님 질문있습니다~..

0

323

1