• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

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

22.01.27 18:07 작성 조회수 189

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 값을 바꿔줌

}

}

}

}

 

}

 

 

답변 1

답변을 작성해보세요.

0

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

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

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