11,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결C언어 슈팅게임 따라만들기
mac OS 에서 프로젝트 진행 시 라이브러리 없음
맥 혹은 리눅스에서 프로젝트를 진행하려고하는데 <conio.h><Window.h>등 윈도우에서만 가능한 라이브러리들을 어떻게 하면 좋을까요?다른 방식으로 구현할 수 있는 방법이 있을까요?
- 미해결C언어 슈팅게임 따라만들기
콘솔창 크기 바꿀때 윈도우11에서 속성창이 안보입니다. ㅠㅠ
저 선생님 여기 콘솔창 크기 바꿀때 제 컴퓨터가 지금 윈도우 11이라 그런데.. 속성창이 안보입니다.. 어떻게 해야할까요?..
- 미해결C언어 슈팅게임 따라만들기
오류가 뜨는데 왜 그런지 모르겠습니다.
아래와 같은 오류가 뜹니다... 식별자 "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언어 슈팅게임 따라만들기
질문있습니다
슈팅게임을 만든 후 실행을 하였는데 글자를 입력하는 커서?같은게 화면에 떠다닙니다. 또 위아래로 자연스럽게 움직여야할 player가 어느정도 밑으로가면 더이상 밑으로 내려가지않는 현상이 발생합니다ㅜ
- 미해결C언어 슈팅게임 따라만들기
선생님 질문있습니다~..
다름이 아니라 디버깅이나 실행 후 다시 화면을 클릭해 줘야 커서가 뜨잖아요. 혹시 그렇게 안하고 하는 방법 있나요? 귀찮아서요..