์ง๋ฌธ์์ต๋๋ค
์ ๊ฐ ์ถ๊ฐํ ์ฝ๋๋ ์์ง๋ง ์ฝ๋๋ ๊ฐ์ด ์ฒจ๋ถํ๊ฒ ์ต๋๋ค ๋ฌธ์ ๊ฐ๋๋ฉด ์ญ์ ํ๊ฒ ์ต๋๋ค! #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; } } } } }