๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
C ๊ณ„์—ด/C

๐Ÿ’ป MUD๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐฐ์šฐ๋Š” C์–ธ์–ด (#3) ๋ฉ”์ธ ํ™”๋ฉด ๊ตฌ์„ฑ

by Yubin Heo 2020. 4. 1.

๐ŸŽฒ ์ฝ”๋“œ ๋ฌด์ž‘์ • ๋”ฐ๋ผํ•˜๊ธฐ


์†Œ์Šค.c (์ข€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค ์ž˜ ๋”ฐ๋ผ์“ฐ์„ธ์š”)

 

#include <stdio.h>
#include <windows.h>

#define pause system("pause > nul");
#define cls system("cls");
#define mainsize system("mode con cols=90 lines=30"); // cols = ์นธ/ํ–‰ (๊ฐ€๋กœ)  lines = ์ค„/์—ด (์„ธ๋กœ)

void ViewStory(); // ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜
void ViewMain(); // ๋ฉ”์ธ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜
void gotoxy(int x, int y); // ์ปค์„œ ์ด๋™ ํ•จ์ˆ˜
void setcolor(int number); // ์ƒ‰์ƒ ๋ณ€๊ฒฝ ํ•จ์ˆ˜

int main(void) {
	printf("๊ฒŒ์ž„์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!");
	cls;
	ViewStory();
	ViewMain();
}

void gotoxy(int x, int y) {
	COORD pos = { x,y };
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

void setcolor(int number) {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), number);
}


void ViewStory() {
	cls;
	printf("๊ณ ๋Œ€, ํƒœ์ดˆ์˜ ์„ธ๊ณ„์—๋Š” ๋Œ, ๋‚˜๋ฌด, ๋ฐ”๋žŒ, ํ•ด์™€ ๋‹ฌ, ๊ฐ•๋ฌผ๊ณผ ๋ฐ”๋‹ค ๋“ฑ,\n");
	printf("365๊ฐœ์˜ ํ”ผ์กฐ๋ฌผ์— ์‹ ์ด ๊นƒ๋“ค์—ˆ๊ณ  ๊ฐ์ž๊ฐ€ ์ž์‹ ์˜ ๊ถŒ๋Šฅ์„ ๋ฐœํœ˜ํ•˜๋ฉฐ ์„ธ์ƒ์„ ๋ฌด์งˆ์„œํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.\n");
	pause;
	printf("\nํƒœ์ดˆ์˜ ์‹ ์—๊ฒŒ์„œ ํž˜์„ ๋ฐ›์€ ์„ธ ๋ช…์˜ ์˜ค๋ฒ„์‹œ์–ด๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค.\n");
	pause;
	printf("\n์˜ค๋ฒ„์‹œ์–ด๋“ค์ด ๊ฐ๊ฐ ์ž์‹ ์˜ ๊ถŒ๋Šฅ์ธ '๋น›', '์‹œ๊ฐ„', '์ƒ๋ช…'์„ ์„ธ๊ณ„์— ๋ถ€์—ฌํ•ด ์งˆ์„œ๋ฅผ ์„ธ์šฐ์ž,\n");
	printf("๊ณ ๋Œ€์‹ ๋“ค์€ ์„ธ์ƒ์˜ ๋ฒ•์น™์„ ๋‹ค๋ฃฐ ํž˜์„ ์žƒ์–ด๋ฒ„๋ฆฌ๊ณ  ๋ฒ„๋ ค์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.\n");
	pause;
	printf("\n๊ธฐ์กด์˜ ์‹ ๋“ค์ด ์žƒ์–ด๋ฒ„๋ฆฐ ํž˜์€ ๋ฌด๋ค ์†์— ๊ฐ€๋‘์–ด์กŒ๊ณ  \n");
	printf("์ฃผ์‹œํ•˜๋Š” ์‹  ์•„๋ธŒ๋ฝ์‚ฌ์Šค๋Š” ๊ทธ ๋ฌด๋ค์„ ์ง€์ผœ๋ณด๊ฒŒ ๋˜๊ณ , ์„ธ๊ณ„๋ฅผ ์…‹์œผ๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค.\n");
	pause;
	printf("\nํƒœ์ดˆ์˜ ์–ด๋‘  ์†์—์„œ ์„ธ ์—ฌ์‹ ์ด ๋‚˜ํƒ€๋‚˜ ์ˆœ์ˆ˜ํ•œ ์—๋„ˆ์ง€\n");
	printf("๊ทธ ์ž์ฒด์ธ ์—๋ฅด๋‹ค๋ฅผ ๋นš์–ด ๋ฉ”์ดํ”Œ ์›”๋“œ, ๊ทธ๋ž€๋””์Šค, ๋งˆ์Šคํ…Œ๋ฆฌ์•„ ์„ธ ์„ธ๊ณ„๋ฅผ ์ฐฝ์กฐํ•˜์˜€๋‹ค.\n");
	pause;
	printf("\n๋งŒ๋ฌผ์„ ๊ตฌ์„ฑํ•˜๋Š” ์›์†Œ๊ฐ€ ๋œ ์—๋ฅด๋‹ค๋Š” ์ƒ๋ช…๊ณผ ๋ฌผ์ฒด๊ฐ€\n");
	printf("๋งŒ๋“ค์–ด์ง€๊ณ  ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์„ธ์ƒ์— ํ๋ฅด๊ฒŒ ๋œ๋‹ค.\n");
	pause;
	printf("\n์ดํ›„ ์—ฌ์‹ ๋“ค์€ ๊ทธ ์„ธ๊ณ„์˜ ์šฉ์‚ฌ๋“ค์„ ์ˆ˜ํ˜ธํ•˜๋ฉฐ ๋•Œ๋•Œ๋กœ\n");
	printf("์ธ๊ฐ„๊ณผ ์—๋ฅด๋‹ค๋ฅผ ์ด์–ด์ค˜ ์—๋ฅด๋‹ค๋ฅผ ๋‹ค๋ฃจ๋Š” ๋Šฅ๋ ฅ์„ ๋ฐœํ˜„์‹œ์ผœ์ฃผ์—ˆ๋‹ค.\n");
	pause;
	printf("\n์งˆ์„œ๋ฅผ ์„ธ์šด ์˜ค๋ฒ„์‹œ์–ด๋“ค์€ ์งˆ์„œ๊ฐ€ ๋ฌด๋„ˆ์ง€๊ณ  ๊ณ ๋Œ€์‹ ๋“ค์ด\n");
	printf("๋ถ€ํ™œํ•˜๋Š” ์ผ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก ์ž์‹ ๋“ค์˜ ๋Œ€๋ฆฌ์ธ์œผ๋กœ์„œ ํž˜์„ ๋‚˜๋ˆ ์ค€ ์ดˆ์›”์ž๋ฅผ ๋ฐฐ์น˜ํ–ˆ๋‹ค.\n");
	pause;
	printf("\n๊ฐ ์„ธ๊ณ„๋‹น ๋น›์˜ ์ดˆ์›”์ž, ์‹œ๊ฐ„์˜ ์ดˆ์›”์ž, ์ƒ๋ช…์˜ ์ดˆ์›”์ž๋ฅผ ๊ฐ๊ฐ ํ•œ ๋ช…์”ฉ, ์ด ์„ธ ๋ช…์„ ๋ฐฐ์น˜ํ–ˆ๋‹ค.\n");
	pause;
	printf("\n์ดˆ์›”์ž๋Š” ์กด์žฌ ๊ทธ ์ž์ฒด๋กœ ๋‹ด๋‹นํ•˜๋Š” ์˜์—ญ์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” ์—ญํ• ์„ ๋งก์•„\n");
	printf("์—๋ฅด๋‹ค์˜ ํ๋ฆ„์— ์ด์ƒ์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•˜์˜€๋‹ค.\n");
	pause;
	printf("\n์ด๋กœ ์ธํ•ด ์„ธ๊ณ„์˜ ๋ถˆํ™•์‹ค์„ฑ์ด ๊ฐ์†Œ๋˜์—ˆ์œผ๋ฉฐ, ๊ฐํžˆ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์—ˆ๋˜\n");
	printf("๋ฏธ๋ž˜๋ฅผ ๊ฒฐ์ •๋œ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์–ด๋ฒ„๋ ธ๋‹ค.\n");
	pause;
	printf("\n\n์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹œ๋ฉด ๋ฉ”์ธ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.\n");
	pause;
}

void ViewMain() {
	int select;
	cls;
	mainsize;
	gotoxy(38, 5);
	setcolor(9);
	printf("Text RPG Game!");
	gotoxy(6, 7);
	setcolor(15);
	printf("๋‚ด ์ด๋ฆ„ : ํ™๊ธธ๋™");
	gotoxy(6, 8);
	printf("HP : 20 \t MP : 20 \t EXP : 0% \t LEVEL : 1");
	gotoxy(6, 10);
	printf("1. ์ „ํˆฌ๋ฅผ ํ•˜๋Ÿฌ ๋‚˜๊ฐ„๋‹ค");
	gotoxy(6, 11);
	printf("2. ์•„์ดํ…œ์„ ์‚ฌ๋Ÿฌ ๊ฐ„๋‹ค");
	gotoxy(6, 12);
	printf("3. ๋…ธ๋™์„ ํ•˜๋Ÿฌ ๊ฐ„๋‹ค");
	gotoxy(6, 13);
	printf("4. ์ž ์‹œ ํœด์‹์„ ์ทจํ•œ๋‹ค");
	gotoxy(6, 14);
	printf("5. ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•œ๋‹ค");
	gotoxy(6, 16);
	printf("| ๋ฌด์—‡์„ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ? | >> ");
	scanf_s("%d", &select);
	pause;
}

 

๊ฐ‘์ž๊ธฐ ๋‚œ์ด๋„๊ฐ€ ํ™• ์ƒ์Šนํ–ˆ์Šต๋‹ˆ๋‹ค... ๊ทธ๋Ÿด ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค.

๊ฑฑ์ • ๋งˆ์„ธ์š” ํ•˜๋‚˜์”ฉ ์„ค๋ช…ํ• ๊ฒ๋‹ˆ๋‹ค.

 

๐ŸŽฒ ์ฝ”๋“œ ๋ฌด์ž‘์ • ํ•ด์„ํ•˜๊ธฐ(?)


#define cls system("cls");
#define mainsize system("mode con cols=90 lines=30");

 -> ์ €๋ฒˆ ์‹œ๊ฐ„์— ๋ฐฐ์šด ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. cls๋Š” ํ™”๋ฉด์„ ์ฒญ์†Œํ•ด ์ฃผ๋Š” ๋ช…๋ น์–ด ์ž…๋‹ˆ๋‹ค.

     mde con์€ cols๊ฐ€ ๊ฐ€๋กœ, lines๊ฐ€ ์„ธ๋กœ๋กœ์„œ, ์‹คํ–‰ ํ™”๋ฉด์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•ด ์ค๋‹ˆ๋‹ค.

 

void ViewStory(); // ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜
void ViewMain(); // ๋ฉ”์ธ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜
void gotoxy(int x, int y); // ์ปค์„œ ์ด๋™ ํ•จ์ˆ˜
void setcolor(int number); // ์ƒ‰์ƒ ๋ณ€๊ฒฝ ํ•จ์ˆ˜

 -> ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ถ€๋ถ„ ์ž…๋‹ˆ๋‹ค.

      void๋Š” ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋Š” ํƒ€์ž… ์ž…๋‹ˆ๋‹ค ๋”ฐ๋ผ์„œ return์„ ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

      

      ViewStory ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ 2ํŽธ์—์„œ ๋งŒ๋“ค์—ˆ๋˜ ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

      ViewMain ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋ฉ”์ธ ํ™”๋ฉด์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

      gotoxy ํ•จ์ˆ˜๋Š” ์›ํ•˜๋Š” ์œ„์น˜์— printf๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปค์„œ ์œ„์น˜๋ฅผ ์ด๋™์‹œ์ผœ ์ค๋‹ˆ๋‹ค.

      setcolor ํ•จ์ˆ˜๋Š” ์›ํ•˜๋Š” ์ƒ‰์ƒ์˜ ๊ธ€์„ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๊ธ€ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•ด ์ค๋‹ˆ๋‹ค.

 

ViewStory();
ViewMain();

 -> ์œ„์—์„œ ์ •์˜ํ–ˆ๋˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„ ์ž…๋‹ˆ๋‹ค.

     ๋งŒ์•ฝ ์ธ์ž๊ฐ’์ด ์žˆ๋Š” ํ•จ์ˆ˜๋ผ๋ฉด ( ) ์•ˆ์— ์ธ์ž๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

void gotoxy(int x, int y) {
COORD pos = { x,y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

 -> ์ปค์„œ๋ฅผ ์ด๋™์‹œ์ผœ์ฃผ๋Š” ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค.

      ์ธ์ž๊ฐ’์œผ๋กœ ์ •์ˆ˜ํ˜• x ๋ณ€์ˆ˜์™€ y ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ขŒํ‘œ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.

      ๋”ฐ๋ผ์„œ gotoxy ํ•จ์ˆ˜๋Š” ์›ํ•˜๋Š” ์ขŒํ‘œ๋กœ ์ปค์„œ๋ฅผ ์ด๋™์‹œ์ผœ ์ค๋‹ˆ๋‹ค.

     

      ์ž์„ธํ•œ๊ฑด ๋งค์šฐ ์–ด๋ ค์šด ๋‚ด์šฉ์ด๋‹ˆ ์ด๋Ÿฐ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ์•„๋‘ก์‹œ๋‹ค.

      ์–ด์จ‹๋“  ํ•„์š”ํ•˜๊ธด ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

 

void setcolor(int number) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), number);
}

 -> ์ด ๋ถ€๋ถ„๋„ ๋งค์šฐ ์–ด๋ ค์šด ๋ถ€๋ถ„ ์ž…๋‹ˆ๋‹ค.

      ์ธ์ž๊ฐ’์œผ๋กœ ์ •์ˆ˜ํ˜• number ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

      ์ฝ˜์†”์—์„œ setconsoletextattribute ํ•จ์ˆ˜๋กœ ๊ธ€์ž ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž ๋ฒˆํ˜ธ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 0 = ๊ฒ€์ •์ƒ‰

1 = ํŒŒ๋ž€์ƒ‰ 

 2 = ์ดˆ๋ก์ƒ‰

3 = ์˜ฅ์ƒ‰ 

 4 = ๋นจ๊ฐ„์ƒ‰

5 = ์ž์ฃผ์ƒ‰ 

 6 = ๋…ธ๋ž€์ƒ‰

7 = ํฐ์ƒ‰ 

 8 = ํšŒ์ƒ‰

9 = ์—ฐํ•œ ํŒŒ๋ž€์ƒ‰ 

 10 = ์—ฐํ•œ ์ดˆ๋ก์ƒ‰

11 = ์—ฐํ•œ ์˜ฅ์ƒ‰ 

 12 = ์—ฐํ•œ ๋นจ๊ฐ„์ƒ‰

13 = ์—ฐํ•œ ์ž์ฃผ์ƒ‰ 

 14 = ์—ฐํ•œ ๋…ธ๋ž€์ƒ‰

15 = ์ง„ํ•œ ํฐ์ƒ‰ 

 

scanf_s("%d", &select);

 -> ๋ณธ๋ž˜๋Š” scanf("%d", &select"); ์˜ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค,

     ํ•˜์ง€๋งŒ Visual Studio 2013(?) ์ด์ƒ์˜ ๋ฒ„์ „๋ถ€ํ„ฐ ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ

      scanf_s ์‚ฌ์šฉ์„ ๊ถŒ๊ณ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์†ํ•ด ์—†์œผ๋‹ˆ๊นŒ _s ๋กœ ์‚ฌ์šฉํ•ด ์ค๋‹ˆ๋‹ค.

 

      "%d" ๋Š” ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ฒ ๋‹ค๋Š” ์˜๋ฏธ ์ž…๋‹ˆ๋‹ค.

      &select๋Š” select ๋ผ๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

      ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ๊ฐ’์„ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์•„์„œ ๊ทธ ๊ฐ’์„ select ๋ณ€์ˆ˜์— ๋„ฃ๊ฒ ๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค.

 

 

๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ ์˜ค๋Š˜ ์ฝ”๋“œ๋กœ ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ์ € ํ™๊ธธ๋™, hp, mp, exp, level ๋ถ€๋ถ„์„

๋ณ€์ˆ˜๋กœ ๋Œ€์ฒดํ•ด๋ณด๊ณ  ์ž…๋ ฅํ•œ 1,2,3,4,5 ์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ ํ•จ์ˆ˜ํ™”๋ฅผ ์‹œ์ผœ์ฃผ๋Š”

์ž‘์—…์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€