질문있습니다
제가 추가한 코드도 있지만 코드도 같이 첨부하겠습니다 문제가되면 삭제하겠습니다! #include #include #include #include #include #include struct BULLET { int x; //미사일 x좌표 int y; //미사일 y좌표 bool fire; //미사일 발사상태 }; //배열로 배경을 좌표를 만든다 char bg[25][80]; //플레이어좌표 int playerX; int playerY; //적 좌표 int enemyX; int enemyY; //미사일 갯수 struct BULLET playerBullet[20]; //함수설계 void ClearScreen(); //화면을 지운다 void GameMain(); //게임전체를 관리하는 함수 void PrintScreen(); //화면을 그려주는 함수 void KeyControl(); //키 관련 함수 void BulletDraw(); // 미사일을 그려주는 함수 void PlayerDraw(); //플레이어 그리는 함수 void EnemyDraw(); //적 그리는 함수 void EnemyMove(); // 적 움직이는 함수 void ClashEnemyAndBullet(); //충돌처리함수 void gotoxy(int x, int y); int SetFontSize(HANDLE windowHandle, COORD size) { CONSOLE_FONT_INFOEX font = { sizeof(CONSOLE_FONT_INFOEX) }; if (!GetCurrentConsoleFontEx(windowHandle, 0, &font)) { return 0; } font.dwFontSize = size; if (!SetCurrentConsoleFontEx(windowHandle, 0, &font)) { return 0; } return 1; } void main() { //랜덤함수 준비 srand((unsigned)time(NULL)); //플레이어 좌표위치 playerX = 0; playerY = 12; //적 좌표 위치 enemyX = 77; enemyY = 12; //플레이어 미사일 초기화(미사일 발사 전 준비상태) for (int i = 0; i { playerBullet[i].x= 0; playerBullet[i].y = 0; playerBullet[i].fire = false; } gotoxy(10,10); printf("Shooting Game!"); gotoxy(10,12); printf("방향: 이동키"); gotoxy(10,13); printf("공격: 스페이스바"); gotoxy(10,15); printf("시작하시려면 아무키나눌러주세요"); _getch(); system("cls"); HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); COORD size; size.X = 200; size.Y = 200; SetFontSize(h, size); system("mode con cols=1 lines=1"); for(int i = 5; i > 0; i--) { gotoxy(0,0); printf("%d",i); Sleep(1000); } system("cls"); size.X = 20; size.Y = 20; SetFontSize(h, size); system("mode con cols=100 lines=25"); //현재 초단위 시간을 받아온다 int dwtime = GetTickCount(); //게임실행 무한루프 while (true) { //0.05초 딜레이 if (dwtime + 50 { dwtime = GetTickCount(); //지우고 ClearScreen(); //플레이어나 적이 움직이고 GameMain(); //그려주고 PrintScreen(); } } } void gotoxy(int x, int y) { COORD Pos; Pos.X = x; Pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos); } void ClearScreen() { //콘솔창에 그려진 모든걸 지움 system("cls"); //배열에 공백으로 넣어서 지움 for (int y = 0; y { for (int x = 0; x { bg[y][x] = ' '; } } } void GameMain() { //키를 입력하는부분 KeyControl(); //미사일을 그려준다. BulletDraw(); //플레이어를 그려준다 PlayerDraw(); //적의 움직임 EnemyMove(); //적을 그려주는 부분 EnemyDraw(); //미사일 적의 충돌 ClashEnemyAndBullet(); } void PrintScreen() { bg[24][79] = '\0'; //맨 마지막 배열에 널 문자를 넣어준다 for(int i = 0; i { for(int j = 0; j { printf("%c",bg[i][j]); } printf("\n"); } } void KeyControl() { char pressKey; //키가 입력되면 잡아준다. if (_kbhit()) { pressKey = _getch(); //키가 입력되어 변수에 저장 switch (pressKey) { case 72: //위쪽방향 화살표 키가 눌렸을 때 playerY--; if (playerY playerY = 1; break; case 75: //왼쪽 화살표 키가 눌렸을 때 playerX--; if (playerX 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 { //미사일이 준비되어있는 상태인 경우에만 발사가능 if (playerBullet[i].fire == false) { playerBullet[i].fire = true; //플레이어 앞에서 미사일을 쏘기 +5 playerBullet[i].x = playerX + 5; playerBullet[i].y = playerY; //한발만 발사 break; } } break; } } } void BulletDraw() { //미사일 전체 20개 중에 for(int i=0;i //플레이어 미사일 날아가고있는 상태 true if (playerBullet[i].fire == true) { //미사일을 그린다. bg[playerBullet[i].y][playerBullet[i].x - 1] = '-'; bg[playerBullet[i].y][playerBullet[i].x - 0] = '>'; //미사일 앞으로 +1 playerBullet[i].x++; //미사일이 80을 넘어갈 경우 if (playerBullet[i].x > 79) { //미사일 준비상태로 전환 playerBullet[i].fire = false; } } } void PlayerDraw() { //플레이어그리기 bg[playerY - 1][playerX + 1] = '>'; 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] = '>'; } void EnemyDraw() { //적그리기 bg[enemyY][enemyX - 2] = ' bg[enemyY][enemyX - 1] = '-'; bg[enemyY][enemyX + 0] = 'O'; bg[enemyY][enemyX + 1] = '-'; bg[enemyY][enemyX + 2] = '>'; } void EnemyMove() { //적은 왼쪽으로 오게한다. enemyX--; //적이 왼쪽으로 다 왔을 경우 if (enemyX { //적을 랜덤하게 y쪽 좌표를 바꿔준다 enemyX = 77; enemyY = (rand() % 20) + 2; } } //충돌처리함수 void ClashEnemyAndBullet() { //미사일 20개 전체 판별 for (int i = 0; i { //미사일이 살아있고 if (playerBullet[i].fire == true) { //적과 미사일의 y값이 같고 if (playerBullet[i].y ==enemyY) { //플레이어 미사일 x값이 같은지 판별 //x값은 적의 크기만큼 x-1 0 x+1까지 세개좌표로 잘 충돌되게 판별 if (playerBullet[i].x >= (enemyX - 1) && playerBullet[i].x { //충돌되면 적 y값 바꿔주기 enemyX = 77; enemyY = (rand() % 20) + 2; playerBullet[i].fire = false; } } } } }