공부용 블로그 | seokmin100
Nefus - C언어 [프로젝트] 본문
처음 프로젝트라는 과제를 받고 어떤 주제를 잡을지 고민했는데 부장 선배가 작년에 미연시를 만들었다는 것을 듣고, 머리속에 한가지 게임이 지나갔습니다. '프린세스 메이커' 이걸 그냥 지나치게 했어야 했는데, 결국엔 프로젝트로 하게 되었습니다. 시작하고 나서 구현해보고 싶었던 여러가지 원작 고증 기능들이 있었는데 시간에 쫓기면서 진행하다 보니 아쉽게 구현 못한 기능들이 있어 개인적으로 아쉬웠던 프로젝트였습니다.
제 프로젝트는 고전게임인 '프린세스 메이커'를 패러디한 게임 'Dev Maker'입니다. 원작에서는 플레이어가 아버지가 되어 프린세스를 키우는 3인칭 게임이지만, Dev Maker는 1인칭 게임으로 본인이 이 게임의 주인공이라면 스케줄을 어떻게 짤지 고민할 수 있도록 만든 게임입니다.
프린세스 메이커에 대해 모르는 분들이 훨씬 많을거 같아 간략하게 설명을 하자면, 프린세스의 한달 스케줄을 직접 짜고, 그에 맞춰서 스택이 점점 올라가게 되는데 그 스택에 맞춰 평가가 내려지고, 평가에 따라 각각 다른 엔딩을 볼 수 있는 육성시뮬레이터 입니다. 스케줄 중에 수확제라는 큰 이벤트도 있고, 알바, 공부 등등 피로도 관리하고 스택을 관리하는 등 생각보다 어려운 게임입니다.
저희는 몇 십 년 선린에 있을 것이 아니기 때문에 한달 스케줄을 주일 스케줄을 축소하였고, 수확제를 아쉽게 구현하지 못하여 중간 중간 실제로 진행하게 되는 프로젝트를 넣어두었습니다. 또, 수확제에서 사용하기 위해 상점 시스템과 인벤토리를 제작하였지만, 수확제가 구현되지 못하면서 인벤토리에서의 장착기능은 빠지게 되었고, 상점 시스템에서 아이템을 사게 되면 그에 맞는 스코어가 올라가게 구현 해두었습니다. 중간 중간 등장하게 되는 NPC들도 함께 구현하여 게임의 흥미도를 더욱 높히려 시도 하였지만 다른 기능을 제작하는데 시간을 소모하여 아쉽게 구현되지 못하였습니다.
구현되지 못한 부분을 제외한 나머지 부분은 대부분 구현되었으며 아래부터 코드가 출력 형태들을 소개할 것입니다.
Dev Maker
사용한 구조체는 총 3개이며, 일반 스택, 스킬(전공) 스택, 스케줄 중 사용되는 고유 번호를 담은 구조체가 있습니다.
...
typedef struct {
int money; // 돈
int health; // 체력
int intellect; // 지력
int persistence; // 근성
int stress; // 피로
int moral; // 도덕성
} Score;
typedef struct {
int network;
int hacking;
int server;
int iot;
int algorithm;
int secure_coding;
int dev;
} Skill_Score;
typedef struct {
// 수업
int hacking;
int secure_coding;
int network;
int iot;
int server;
int algorithm;
int dev;
// 알바
int market;
int library;
int cafe;
int bar;
// 휴식
int rest;
} type_Schedule;
Score score = {20000, 100, 50, 50, 0, 50};
Skill_Score skill_score = {0};
type_Schedule t_s = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0};
...
또, 이 프로그램에서 가장 중요한 역할을 하는 커서 좌표를 이동하는 코드도 작성하여 선택하기 편리하게 제작하였습니다.
원작인 프린세스 메이커에서는 한달 스케줄이 지나갈때 애니메이션이 나오지만 전 C언어 내에서 애니메이션을 제작하기 어렵다고 판단하여 프로그레스 바를 직접 제작해, 주기가 지나갈때와 게임을 처음 시작할 때 나오게 하였습니다.
...
void progress_bar() {
char bar = '='; char blank = ' '; // 프로그레스 바 문자, 공백
int LEN = 20; int MAX = 100; int SPEED = 35; // 프로그레스 바 길이, 최대값, 대기시간
int count = 0; // 진행된 작업
float tick = (float)100/LEN; // 프로그레스 바 추가 계산
int bar_count; //갯수 저장 변수
float percent; // 퍼센트 저장 변수
while(count <= MAX) {
printf("\r%d/%d [", count, MAX); // 진행상태 출력
percent = (float)count/MAX*100;
bar_count = percent/tick;
for(int i=0;i<LEN;i++){ // 프로그래스바 출력
if(bar_count > i)
printf("%c", bar);
else
printf("%c", blank);
}
printf("] %g%%", percent); // 퍼센트 출력
count++;
Sleep(SPEED);
}
return;
}
...
프로그래스 바 코드
아래 영상은 프로그래스 바가 어떻게 진행되는지를 보여준 영상입니다.
이후 게임 시작 전 메인 화면이 나오는데 커서가 움직이는 것을 구현하였습니다. 이는 앞으로 나올 대부분의 기능에 들어가 있습니다.
코드는 아래와 같고 그 아래에 작동 영상도 함께 첨부하였습니다.
...
#define UP 72 // 위쪽 방향키
#define DOWN 80 // 아래쪽 방향키
#define CHOOSE 13 // 엔터
...
...
// 커서 좌표 이동
void gotoxy(int x, int y){
COORD pos={x,y}; //x, y 좌표 설정
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); //커서 설정
}
...
...
// 초기 메뉴
int main() {
int a;
char key;
printf("[ 로딩 중 ] \n");
progress_bar();
printf("\nDone!\n");
Sleep(ONE_SECOND);
system("cls");
title();
Sleep(500);
printf("> 게임 시작\n");
printf(" 게임 설명\n");
printf(" 게임 종료\n");
gotoxy(x, y=13);
while(1){
key = _getch();
switch(key){
case UP: {
printf("\r ");
gotoxy(x, y-=1);
if(y<=12)
gotoxy(x, y=15);
printf("\r>");
} break;
case DOWN: {
printf("\r ");
gotoxy(x, y+=1);
if(y>=16)
gotoxy(x, y=13);
printf("\r>");
} break;
case CHOOSE: {
if(y==13){
intro();
game_main(1, 3, 1);
return 0;
}
else if(y==14) {
introduction();
continue;
}
else if(y==15){
printf("\n");
exit(0);
}
} break;
}
}
return 0;
}
...
이런식으로 엔터를 누르게 되면 함수가 호출되어 코드가 실행되게 되고, 대부분의 코드는 이런식으로 진행하게 됩니다.
게임시작을 선택하게 되면 초기 스토리가 진행되게 되고, scanf를 통해서 직접 동아리를 선택하게 됩니다.
이스터에그로 네퓨즈인 2번을 치게되면 'Nefus는 짱이다!!', 'Nefus! 최고의 선택입니다!'를 출력하게 됩니다.
지금부터의 코드 진행은 비슷하기 때문에 출력 영상만 올리도록 하겠습니다.
다음부터 본 게임으로 진행하게 되는데 화면에는 '스케줄', '스택', ' 상점', '인벤토리'가 있다. 스택과 인벤토리는 각각 자신의 스택확인, 인벤토리는 상점에서 내가 어떤 아이템을 구매했는지를 확인할 수 있다. 스케줄을 정하게 되면 1주가 지나게 되는데 여기서 엔터로 일정을 정하는 것이고 스페이스바로 일정을 진행하는 것이므로 헷갈리지 않게 주의해야 한다.
상점에서는 '전문 서적' 6권과 지력 향상을 위한 '수학의 정석'이 판매된다. 상점에서 7개 밖에 팔지 않는 이유는 NPC로 보부상을 넣어 더욱 많은 아이템을 얻게 하려 하였지만 시간관계상 추가하지 못했다.
기본으로 부여되는 잔액은 10000원이며, 처음에는 알바로 돈을 좀 얻어 둔 다음에 게임을 진행하는 것이 편할 수 있다.
하지만 스코어를 채우기 어려워 진다는 단점이 있다. 몇몇의 알바는 일반 스택을 떨어뜨리는 등의 이벤트가 발생할 수 있어 주의해야한다. 최대 스코어는 1000이며, 그 아래로 스코어를 얻어 엔딩을 볼 수 있다. 적당한 휴식을 통해 피로를 해결해야하는 것도 필요하며 피로가 1000이 된다면 과로사 엔딩으로 베드엔딩을 볼 수 있다.
이것을 136회차까지 해야한다. 하지만 중간 중간 이벤트가 발생하므로 그 이벤트로 부족한 스택을 쌓을 수 있을 것이다.
요약
처음에 프로그레스바를 이용하여 로딩을 한 후, 초기화면으로 '게임 시작', '게임 설명', '게임 종료'를 띄워 어떻게 할 것인지 고르게 한다. 게임을 시작하게 되면 스토리 시작과 동시에 동아리를 고르고 육성 시뮬레이터가 진행된다.
더 재밌게 게임을 만들지 못해 많이 아쉽지만, 다음 프로젝트때는 시관 관리를 열심히 잘해서, 이 프로젝트보다 더욱 발전된 프로젝트를 진행하여 보고 싶다.
아래는 엔딩 파트와 조건이다.
[진엔딩]
CSO(최고보안담당자) | skill_score.hacking>=800&&skill_score.secure_coding>=800&&skill_score.dev>=500&&score.moral>=500
CTO(최고기술전문가) |
skill_score.dev>=800&&skill_score.algorithm>=800&&skill_score.server>=800&&skill_score.network>=800&&skill_score.iot>=800
[엑설런트엔딩]
정보보안 전문가 |
skill_score.hacking>=600&&skill_score.secure_coding>=600&&score.moral>=500
네트워크 엔지니어 |
skill_score.network>=600&&skill_score.algorithm>=600&&score.persistence>=500
웹 개발자 |
skill_score.dev>=600&&skill_score.algorithm>=600&&score.health>=500
사물인터넷 개발자 |
skill_score.iot>=600&&skill_score.algorithm>=600&&score.intellect>=500
[노멀엔딩]
대학생 |
score.intellect >= 600
취업준비생 |
스킬 스택 전체 400 이상
[베드엔딩]
블랙해커 |
score.moral<=200&&(skill_score.hacking>=500||skill_score.secure_coding>=500
치킨집 사장 |
스킬 스택 전체 300 이하
과로사 |
피로 스택 1000 달성시 발생
밑에는 제 코드와 exe파일이 들어있는 zip파일입니다. 직접 플레이 해보셔도 좋을것같습니다.
아래는 전체 코드 입니다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
#define UP 72 // 위쪽 방향키
#define DOWN 80 // 아래쪽 방향키
#define CHOOSE 13 // 엔터
#define SCH_CHOOSE 32 // 스페이스바
#define ONE_SECOND 1000
#define MAX_SCORE 1000
int x = 0, y = 13; // 커서 기본 좌표
int club = 0;
int g=1; // 학년
int t=1; // 아이템 저장 배열 위치
int item[100]; // 아이템 저장
int equip[2] = {0}; // 아이템 장착
int day[8]={0}; // 스케줄 일정 저장
typedef struct {
int money; // 돈
int health; // 체력
int intellect; // 지력
int persistence; // 근성
int stress; // 피로
int moral; // 도덕성
} Score;
typedef struct {
int network;
int hacking;
int server;
int iot;
int algorithm;
int secure_coding;
int dev;
} Skill_Score;
typedef struct {
// 수업
int hacking;
int secure_coding;
int network;
int iot;
int server;
int algorithm;
int dev;
// 알바
int market;
int library;
int cafe;
int bar;
// 휴식
int rest;
} type_Schedule;
Score score = {10000, 100, 50, 50, 0, 50};
Skill_Score skill_score = {0};
type_Schedule t_s = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0};
// 커서 좌표 이동
void gotoxy(int x, int y){
COORD pos={x,y}; //x, y 좌표 설정
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); //커서 설정
}
void title() {
printf("\n");
printf("------------------------------------------------------------------------------------------------------------\n");
printf("\n");
printf(" ###### ####### ## ## ### ### #### ## ## ####### ####### \n");
printf(" ## ## ## ## ## #### #### ## ## ## ## ## ## ## \n");
printf(" ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## \n");
printf(" ## ## ###### ## ## ## ### ## ######## #### ###### ####### \n");
printf(" ## ## ## ## ## ## ## ## ## ## ## ## ## ## \n");
printf(" ## ## ## ## ## ## ## ## ## ## ## ## ## ## \n");
printf(" ###### ####### ### ## ## ## ## ## ## ####### ## ## \n");
printf("\n");
printf("------------------------------------------------------------------------------------------------------------\n");
printf("\n");
}
// 게임 시작 전
void progress_bar();
void introduction();
void progress_bar_sch();
// 게임 시작 후
int intro();
int game_main(int n, int m, int d);
int stack(int n, int m, int d);
int schedule(int n, int m, int d);
int start_sch(int n, int m, int d);
int store(int n, int m, int d);
int inventory(int n, int m, int d);
//이벤트
int major(int n, int m, int d, int i);
int conference(int n, int m, int d, int i);
// 엔딩
int end();
// 초기 메뉴
int main() {
int a;
char key;
printf("[ 로딩 중 ] \n");
progress_bar();
printf("\nDone!\n");
Sleep(ONE_SECOND);
system("cls");
title();
Sleep(500);
printf("> 게임 시작\n");
printf(" 게임 설명\n");
printf(" 게임 종료\n");
gotoxy(x, y=13);
while(1){
key = _getch();
switch(key){
case UP: {
printf("\r ");
gotoxy(x, y-=1);
if(y<=12)
gotoxy(x, y=15);
printf("\r>");
} break;
case DOWN: {
printf("\r ");
gotoxy(x, y+=1);
if(y>=16)
gotoxy(x, y=13);
printf("\r>");
} break;
case CHOOSE: {
if(y==13){
intro();
game_main(1, 3, 1);
return 0;
}
else if(y==14) {
introduction();
continue;
}
else if(y==15){
printf("\n");
exit(0);
}
} break;
}
}
return 0;
}
// 게임 로딩
void progress_bar() {
char bar = '='; char blank = ' '; // 프로그레스 바 문자, 공백
int LEN = 20; int MAX = 100; int SPEED = 35; // 프로그레스 바 길이, 최대값, 대기시간
int count = 0; // 진행된 작업
float tick = (float)100/LEN; // 프로그레스 바 추가 계산
int bar_count; //갯수 저장 변수
float percent; // 퍼센트 저장 변수
while(count <= MAX) {
printf("\r%d/%d [", count, MAX); // 진행상태 출력
percent = (float)count/MAX*100;
bar_count = percent/tick;
for(int i=0;i<LEN;i++){ // 프로그래스바 출력
if(bar_count > i)
printf("%c", bar);
else
printf("%c", blank);
}
printf("] %g%%", percent); // 퍼센트 출력
count++;
Sleep(SPEED);
}
return;
}
// 게임 설명
void introduction() {
system("cls");
printf("\n");
printf("[ 이 게임은 고전 게임 '프린세스 메이커'를 패러디하여 만들어진 게임입니다. ]\n\n");
printf("이 게임의 엔딩은 12개 있습니다.\n");
printf("엔딩은 '진 엔딩', '엑설런트 엔딩', '노멀 엔딩', '배드 엔딩'이 있습니다.\n");
printf("엔딩을 보기 위해 여러 스택을 쌓아야 하는데 잘못 쌓으면 배드 엔딩이 될 수 있습니다.\n\n");
printf("------------------------------------------------------------------------------------------------------------\n");
printf("\n");
printf("[ 일반 스택 ]\n");
printf("1. 체력 // 기본 체력, 체력이 낮을 수록 피로도가 더욱 빨리 단다.\n");
printf("2. 지력 // 지적 능력, 코딩을 할 때 문제해결 능력이 올라간다.\n");
printf("3. 근성 // 근성, 높을 수록 팀 프로젝트 중 탈주 빈도가 줄어든다.\n");
printf("4. 피로 // 피로도, 스트레스와 같은 능력치다. 잘 관리하여야 한다.\n");
printf("5. 도덕성 // 도덕성, 양심이나 성품이다. 0이 되면 불량해진다.\n");
printf("\n");
printf("------------------------------------------------------------------------------------------------------------\n");
printf("스택의 최대치는 1000입니다.");
printf("이 외의 다른 스택들과 이벤트들은 티스토리에 수록되어 있습니다.");
printf("\n\n\n");
printf("돌아가시려면 ENTER를 눌러주세요\n");
char key = _getch();
if(key == CHOOSE){
system("cls");
title();
printf("> 게임 시작\n");
printf(" 게임 설명\n");
printf(" 게임 종료\n");
gotoxy(x, y=13);
return;
}
else introduction();
}
// 게임 시작, 인트로(+동아리 결정)
int intro() {
system("cls");
title();
printf("중학교 3학년, 선린인터넷고등학교에 들어오고 싶은 당신은 면접을 보게 되고,\n\n");
Sleep(ONE_SECOND+500);
printf("면접을 본 이후 결과를 기다리는데,\n\n");
Sleep(ONE_SECOND+500);
printf("합격이 발표 되고 설레는 마음과 동시에 중학교 졸업을 한다.\n\n");
Sleep(ONE_SECOND+500);
printf("선린인터넷고등학교에 입학을 하게 되고, 동아리 면접만을 기다리게 되는데...\n\n");
Sleep(ONE_SECOND+500);
printf("[ 동아리 선택 ]\n");
printf("1.Layer7, 2.Nefus, 3.Unifox, 4.TeamLog, 5.Emotion\n");
printf("선택 : ");
scanf("%d", &club);
switch(club){
case 1: skill_score.hacking=50; break;
case 2: {
skill_score.network=50; skill_score.iot=50;
printf("\nNefus! 최고의 선택입니다!\n");
printf("Nefus는 짱이다!");
Sleep(500);
} break;
case 3: skill_score.secure_coding=50; break;
case 4: skill_score.dev=50; break;
case 5: {
skill_score.server=50; skill_score.algorithm=50;
} break;
}
return 0;
}
// 게임 시작, 스토리 진행
int game_main(int n, int m, int d) {
int key; // g : 학년
if(m==1 && d==1) g++;
system("cls");
if(n > 136){
end();
return 0;
}
if(score.stress==MAX_SCORE){
end();
return 0;
}
// 이벤트 - 소수 전공
int i=0;
if(m==7 && d==1 && g==1){
// C프로그래밍
printf("7월에는 소수전공 [C 프로그래밍]이 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
major(n, m, d, 1);
return 0;
}
else system("cls");
}
if(m==8 && d==1 && g==1){
// 패킷트레이서 활용
printf("8월에는 소수전공 [패킷트레이서 활용]이 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
major(n, m, d, 2);
return 0;
}
else system("cls");
}
if(m==12 && d==1 && g==1){
// 해킹 기초
printf("12월에는 소수전공 [해킹 기초]가 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
major(n, m, d, 3);
return 0;
}
else system("cls");
}
if(m==1 && d==1 && g==2){
// 알고리즘
printf("1월에는 소수전공 [알고리즘]이 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
major(n, m, d, 4);
return 0;
}
else system("cls");
}
if(m==7 && d==1 && g==2){
// 해킹 심화
printf("7월에는 소수전공 [해킹 심화]가 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
major(n, m, d, 5);
return 0;
}
else system("cls");
}
if(m==8 && d==1 && g==2){
// 서버 구축 실무
printf("8월에는 소수전공 [서버 구축 실무]가 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
major(n, m, d, 6);
return 0;
}
else system("cls");
}
if(m==1 && d==1 && g==3){
// 모의해킹 실무
printf("1월에는 소수전공 [모의해킹 실무]가 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
major(n, m, d, 7);
return 0;
}
else system("cls");
}
// 이벤트 - 대회/컨퍼런스
if((m==6 && d==1)||(m==9 && d==1)){
// IoT아이디어 발표회
if(m==6) printf("6월 1회차에는 [IoT아이디어 발표회]가 있습니다.\n");
else if(m==9) printf("9월 1회차에는 [IoT아이디어 발표회]가 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
conference(n, m, d, 1);
return 0;
}
else system("cls");
}
if(m==7 && d==2){
// 알고리즘 페스티벌
printf("7월 2회차에는 [알고리즘 페스티벌]이 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
conference(n, m, d, 2);
return 0;
}
else system("cls");
}
if(m==11 && d==1){
// 네트워크 캠프
printf("11월 1회차에는 [네트워크 캠프]가 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
conference(n, m, d, 3);
return 0;
}
else system("cls");
}
if(m==12 && d==2){
// 알고리즘 컨퍼런스
printf("7월 2회차에는 [알고리즘 컨퍼런스]가 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
conference(n, m, d, 4);
return 0;
}
else system("cls");
}
if(m==12 && d==3){
// 고등해커 페스티벌
printf("7월 2회차에는 [고등해커 페스티벌]가 있습니다.\n");
printf("참여하시겠습니까?\n\n");
printf("1. 참가한다.\n");
printf("2. 참여하지 않는다.\n\n");
printf("숫자 입력 : "); scanf("%d", &i);
if(i==1){
conference(n, m, d, 5);
return 0;
}
else system("cls");
}
printf("[ %d월 %d주차 %d회차 ]\n", m, d, n);
printf("돈 : %d\n\n", score.money);
printf("> 스케줄\n");
printf(" 스택\n");
printf(" 상점\n");
printf(" 인벤토리\n");
gotoxy(x, y=3);
while(1){
key = _getch();
switch(key){
case UP: {
printf("\r ");
gotoxy(x, y-=1);
if(y<3)
gotoxy(x, y=6);
printf("\r>");
} break;
case DOWN: {
printf("\r ");
gotoxy(x, y+=1);
if(y>6)
gotoxy(x, y=3);
printf("\r>");
} break;
case CHOOSE: {
if(y==3){
schedule(n, m, d);
continue;
}
else if(y==4){
stack(n, m, d);
continue;
}
else if(y==5){
store(n, m, d);
continue;
}
else if(y==6){
inventory(n, m, d);
continue;
}
} break;
}
}
}
// 게임 진행 스택창
int stack(int n, int m, int d){
system("cls");
printf("[ 일반 스택 ]\n");
printf("체력 : %d\n", score.health);
printf("지력 : %d\n", score.intellect);
printf("근성 : %d\n", score.persistence);
printf("피로 : %d\n", score.stress);
printf("도덕성 : %d\n\n\n", score.moral);
printf("[ 기술 스택 ]\n");
printf("네트워크 : %d\n", skill_score.network);
printf("해킹 : %d\n", skill_score.hacking);
printf("서버 : %d\n", skill_score.server);
printf("IoT : %d\n", skill_score.iot);
printf("알고리즘 : %d\n", skill_score.algorithm);
printf("시큐어 코딩 : %d\n", skill_score.secure_coding);
printf("개발 : %d\n\n\n", skill_score.dev);
printf("돌아가시려면 ENTER를 눌러주세요\n");
char key = _getch();
if(key == CHOOSE) game_main(n, m, d);
else stack(n, m, d);
}
int schedule(int n, int m, int d){
system("cls");
printf("[ %d월 %d주차 %d회차 ]\n", m, d, n);
printf("돈 : %d\n\n", score.money);
printf("[ 수업 ]\n");
printf("> 해킹\n");
printf(" 시큐어 코딩\n");
printf(" 네트워크\n");
printf(" IoT\n");
printf(" 서버\n");
printf(" 알고리즘\n");
printf(" 개발\n\n");
printf("[ 아르바이트 ]\n");
printf(" 편의점\n");
printf(" 도서관 총무\n");
printf(" 카페\n");
printf(" 주점\n\n");
printf(" 휴식\n");
//일차 스케줄 출력
gotoxy(x=40,y=0);
printf("[ 스페이스바를 누르면 스케줄이 진행됩니다 ]");
gotoxy(x,y=1); printf("1일차 : \n");
gotoxy(x,y=2); printf("2일차 : \n");
gotoxy(x,y=3); printf("3일차 : \n");
gotoxy(x,y=4); printf("4일차 : \n");
gotoxy(x,y=5); printf("5일차 : \n");
gotoxy(x,y=6); printf("6일차 : \n");
gotoxy(x,y=7); printf("7일차 : \n\n\n");
gotoxy(x,y=9); printf("※ 한 번 결정한 스케줄은 수정할 수 없습니다.\n");
gotoxy(x,y=10); printf("※ 모두 채우지 않고 스페이스바를 누른 경우, 남은 자리는 휴식으로 채워집니다.\n");
gotoxy(x=0, y=4);
int key, tmp, i=1;
while(1){
key = _getch();
switch(key){
case UP: {
printf("\r ");
gotoxy(x, y-=1);
if(y<4)
gotoxy(x, y=18);
if(y>10 && y<13)
gotoxy(x, y=10);
if(y>16 && y<18)
gotoxy(x, y=16);
printf("\r>");
} break;
case DOWN: {
printf("\r ");
gotoxy(x, y+=1);
if(y>18)
gotoxy(x, y=4);
if(y>10 && y<13)
gotoxy(x, y=13);
if(y>16 && y<18)
gotoxy(x, y=18);
printf("\r>");
} break;
case CHOOSE: {
tmp=y;
if(i==8) continue;
else {
switch(y){
case 4: {
day[i] = 1;
gotoxy(x=48, y=i);
printf("해킹");
gotoxy(x=0, y=tmp);
} break;
case 5: {
day[i] = 2;
gotoxy(x=48, y=i);
printf("시큐어 코딩");
gotoxy(x=0, y=tmp);
} break;
case 6: {
day[i] = 3;
gotoxy(x=48, y=i);
printf("네트워크");
gotoxy(x=0, y=tmp);
} break;
case 7: {
day[i] = 4;
gotoxy(x=48, y=i);
printf("IoT");
gotoxy(x=0, y=tmp);
} break;
case 8: {
day[i] = 5;
gotoxy(x=48, y=i);
printf("서버");
gotoxy(x=0, y=tmp);
} break;
case 9: {
day[i] = 6;
gotoxy(x=48, y=i);
printf("알고리즘");
gotoxy(x=0, y=tmp);
} break;
case 10: {
day[i] = 7;
gotoxy(x=48, y=i);
printf("개발");
gotoxy(x=0, y=tmp);
} break;
case 13: {
day[i] = 8;
gotoxy(x=48, y=i);
printf("편의점");
gotoxy(x=0, y=tmp);
} break;
case 14: {
day[i] = 9;
gotoxy(x=48, y=i);
printf("도서관 총무");
gotoxy(x=0, y=tmp);
} break;
case 15: {
day[i] = 10;
gotoxy(x=48, y=i);
printf("카페");
gotoxy(x=0, y=tmp);
} break;
case 16:{
day[i] = 11;
gotoxy(x=48, y=i);
printf("주점");
gotoxy(x=0, y=tmp);
} break;
case 18: {
day[i] = 0;
gotoxy(x=48, y=i);
printf("휴식");
gotoxy(x=0, y=tmp);
} break;
}
i++;
}
} break;
case SCH_CHOOSE: {
start_sch(n, m, d);
return 0;
} break;
}
}
}
int start_sch(int n, int m, int d){
for(int i=1;i<=7;i++){
system("cls");
printf("[ %d일차 ]\n", i);
switch(day[i]){
// 공부
case 1: {
if(score.money < 2000) printf("돈이 부족합니다.");
else{
printf("2000원이 소요됩니다.\n\n");
printf("해킹 공부 중...\n");
progress_bar();
score.intellect += 10;
score.moral += 20;
skill_score.hacking += 20;
score.stress += 20;
score.money -= 2000;
printf("\n\n지력 + 10, 도덕성 + 20, 해킹 + 20\n");
printf("스트레스 + 20, 돈 - 2000");
}
} break;
case 2: {
if(score.money < 2000) printf("돈이 부족합니다.");
else{
printf("2000원이 소요됩니다.\n\n");
printf("시큐어 코딩 공부 중...\n");
progress_bar();
score.intellect += 20;
score.moral += 10;
skill_score.secure_coding += 20;
score.stress += 20;
score.money -= 2000;
printf("\n\n지력 + 20, 도덕성 + 10, 시큐어 코딩 + 20\n");
printf("스트레스 + 20, 돈 - 2000");
}
} break;
case 3: {
if(score.money < 2000) printf("돈이 부족합니다.");
else{
printf("2000원이 소요됩니다.\n\n");
printf("네트워크 공부 중...\n");
progress_bar();
score.intellect += 20;
score.persistence += 20;
skill_score.network += 20;
score.stress += 20;
score.money -= 2000;
printf("\n\n지력 + 20, 근성 + 20, 네트워크 + 20\n");
printf("스트레스 + 20, 돈 - 2000");
}
} break;
case 4: {
if(score.money < 2000) printf("돈이 부족합니다.");
else{
printf("2000원이 소요됩니다.\n\n");
printf("IoT 공부 중...\n");
progress_bar();
score.intellect += 20;
score.moral += 20;
skill_score.iot += 20;
score.stress += 20;
score.money -= 2000;
printf("\n\n지력 + 20, 도덕성 + 20, IoT + 20\n");
printf("스트레스 + 20, 돈 - 2000");
}
} break;
case 5: {
if(score.money < 2000) printf("돈이 부족합니다.");
else{
printf("2000원이 소요됩니다.\n\n");
printf("서버 공부 중...\n");
progress_bar();
score.intellect += 20;
score.persistence += 20;
skill_score.network += 20;
score.stress += 20;
score.money -= 2000;
printf("\n\n지력 + 20, 근성 + 20, 서버 + 20\n");
printf("스트레스 + 20, 돈 - 2000");
}
} break;
case 6: {
if(score.money < 2000) printf("돈이 부족합니다.");
else{
printf("2000원이 소요됩니다.\n\n");
printf("알고리즘 공부 중...\n");
progress_bar();
score.intellect += 20;
score.persistence += 20;
skill_score.algorithm += 20;
score.stress += 20;
score.money -= 2000;
printf("\n\n지력 + 20, 근성 + 20, 알고리즘 + 20\n");
printf("스트레스 + 20, 돈 - 2000");
}
} break;
case 7: {
if(score.money < 2000) printf("돈이 부족합니다.");
else{
printf("2000원이 소요됩니다.\n\n");
printf("개발 공부 중...\n");
progress_bar();
score.intellect += 10;
score.persistence += 10;
skill_score.dev += 20;
score.stress += 20;
score.money -= 2000;
printf("\n\n지력 + 10, 근성 + 10, 개발 + 20\n");
printf("스트레스 + 20, 돈 - 2000");
}
} break;
// 알바
case 8: {
printf("편의점 알바 중...\n");
progress_bar();
score.persistence -= 20;
score.health += 10;
score.stress += 20;
score.money += 2000;
printf("\n\n근성 - 20, 체력 + 10\n");
printf("스트레스 + 20, 돈 + 2000");
} break;
case 9: {
printf("도서관 총무 알바 중...\n");
progress_bar();
score.intellect += 10;
score.stress += 20;
score.money += 1000;
printf("\n\n지성 + 10\n");
printf("스트레스 + 20, 돈 + 1000");
} break;
case 10: {
printf("카페 알바 중...\n");
progress_bar();
score.health += 20;
score.stress += 20;
score.money += 2000;
printf("\n\n체력 + 20\n");
printf("스트레스 + 20, 돈 + 2000");
} break;
case 11: {
printf("주점 알바 중...\n");
progress_bar();
score.moral -= 20;
score.intellect -= 20;
score.stress += 20;
score.money += 4000;
printf("\n\n도덕성 - 20, 지성 - 20\n");
printf("스트레스 + 20, 돈 + 4000");
} break;
// 휴식
case 0: {
printf("휴식 중...\n");
progress_bar();
score.stress -= 150;
printf("\n\n피로 - 150");
} break;
} Sleep(ONE_SECOND);
day[i] = 0;
// 일반 스택 초기화
{
if(score.money <= 0) score.money=0;
if(score.health <= 0) score.health = 0;
if(score.health >= MAX_SCORE) score.health = MAX_SCORE;
if(score.intellect <= 0) score.intellect = 0;
if(score.intellect >= MAX_SCORE) score.intellect = MAX_SCORE;
if(score.moral <= 0) score.moral = 0;
if(score.moral >= MAX_SCORE) score.moral = MAX_SCORE;
if(score.persistence <= 0) score.persistence = 0;
if(score.persistence >= MAX_SCORE) score.persistence = MAX_SCORE;
if(score.stress <= 0) score.stress = 0;
if(score.stress >= MAX_SCORE) score.stress = MAX_SCORE;
}
// 기술 스택 초기화
{
if(skill_score.algorithm <= 0) skill_score.algorithm = 0;
if(skill_score.algorithm >= MAX_SCORE) skill_score.algorithm = MAX_SCORE;
if(skill_score.dev <= 0) skill_score.dev = 0;
if(skill_score.dev >= MAX_SCORE) skill_score.dev = MAX_SCORE;
if(skill_score.hacking <= 0) skill_score.hacking = 0;
if(skill_score.hacking >= MAX_SCORE) skill_score.hacking = MAX_SCORE;
if(skill_score.iot <= 0) skill_score.iot = 0;
if(skill_score.iot >= MAX_SCORE) skill_score.iot = MAX_SCORE;
if(skill_score.network <= 0) skill_score.network = 0;
if(skill_score.network >= MAX_SCORE) skill_score.network = MAX_SCORE;
if(skill_score.secure_coding <= 0) skill_score.secure_coding = 0;
if(skill_score.secure_coding >= MAX_SCORE) skill_score.secure_coding = MAX_SCORE;
if(skill_score.server <= 0) skill_score.server = 0;
if(skill_score.server >= MAX_SCORE) skill_score.server = MAX_SCORE;
}
}
if(m==12 && d==4) game_main(n+1, 1, 1);
else if(d==4) game_main(n+1, m+1, 1);
else game_main(n+1, m, d+1);
return 0;
}
int store(int n, int m, int d){
system("cls");
printf("[ 상점 ]\n");
printf("보유잔액 : %d\n\n", score.money);
printf("> 전공 서적 [정보보호] | 10000원\n");
printf(" 전공 서적 [네트워크] | 10000원\n");
printf(" 전공 서적 [알고리즘] | 10000원\n");
printf(" 전공 서적 [IoT] | 10000원\n");
printf(" 전공 서적 [서버] | 10000원\n");
printf(" 전공 서적 [개발] | 10000원\n");
printf(" 수학의 정석 [지력] | 15000원\n\n");
printf("※ 구매 시 SPACE_BAR를 눌러주세요\n\n");
printf("돌아가시려면 ENTER 눌러주세요\n");
gotoxy(x, y=3);
while(1){
char key = _getch();
switch(key){
case UP: {
printf("\r ");
gotoxy(x, y-=1);
if(y<3)
gotoxy(x, y=9);
printf("\r>");
} break;
case DOWN: {
printf("\r ");
gotoxy(x, y+=1);
if(y>9)
gotoxy(x, y=3);
printf("\r>");
} break;
case SCH_CHOOSE: {
if(y==3){
if(score.money>=10000){
item[t] = 1;
t++;
gotoxy(50, 0);
printf("전공 서적 [정보보호]를/을 구매하셨습니다.");
score.money -= 10000;
skill_score.hacking += 50; skill_score.secure_coding += 50;
gotoxy(11, 1);
printf("%d ", score.money);
gotoxy(0, 3);
}
else {
gotoxy(50, 0);
printf("돈이 부족합니다. ");
gotoxy(0, 3);
}
continue;
}
else if(y==4){
if(score.money>=10000){
item[t] = 2;
t++;
gotoxy(50, 0);
printf("전공 서적 [네트워크]를/을 구매하셨습니다.");
score.money -= 10000;
skill_score.network += 50;
gotoxy(11, 1);
printf("%d ", score.money);
gotoxy(0, 4);
}
else {
gotoxy(50, 0);
printf("돈이 부족합니다. ");
gotoxy(0, 4);
}
continue;
}
else if(y==5){
if(score.money>=10000){
item[t] = 3;
t++;
gotoxy(50, 0);
printf("전공 서적 [알고리즘]를/을 구매하셨습니다.");
score.money -= 10000;
skill_score.algorithm += 50;
gotoxy(11, 1);
printf("%d ", score.money);
gotoxy(0, 5);
}
else {
gotoxy(50, 0);
printf("돈이 부족합니다. ");
gotoxy(0, 5);
}
continue;
}
else if(y==6){
if(score.money>=10000){
item[t] = 4;
t++;
gotoxy(50, 0);
printf("전공 서적 [IoT]를/을 구매하셨습니다. ");
score.money -= 10000;
skill_score.iot += 50;
gotoxy(11, 1);
printf("%d ", score.money);
gotoxy(0, 6);
}
else {
gotoxy(50, 0);
printf("돈이 부족합니다. ");
gotoxy(0, 6);
}
continue;
}
else if(y==7){
if(score.money>=10000){
item[t] = 5;
t++;
gotoxy(50, 0);
printf("전공 서적 [서버]를/을 구매하셨습니다. ");
score.money -= 10000;
skill_score.server += 50;
gotoxy(11, 1);
printf("%d ", score.money);
gotoxy(0, 7);
}
else {
gotoxy(50, 0);
printf("돈이 부족합니다. ");
gotoxy(0, 7);
}
continue;
}
else if(y==8){
if(score.money>=10000){
item[t] = 6;
t++;
gotoxy(50, 0);
printf("전공 서적 [개발]를/을 구매하셨습니다. ");
score.money -= 10000;
skill_score.dev += 50;
gotoxy(11, 1);
printf("%d ", score.money);
gotoxy(0, 8);
}
else {
gotoxy(50, 0);
printf("돈이 부족합니다. ");
gotoxy(0, 8);
}
continue;
}
else if(y==9){
if(score.money>=15000){
item[t] = 7;
t++;
gotoxy(50, 0);
printf("수학의 정석 [지력]를/을 구매하셨습니다. ");
score.money -= 15000;
score.intellect += 100;
gotoxy(11, 1);
printf("%d ", score.money);
gotoxy(0, 9);
}
else {
gotoxy(50, 0);
printf("돈이 부족합니다. ");
gotoxy(0, 9);
}
continue;
}
} break;
case CHOOSE: {
game_main(n, m, d);
return 0;
}
}
}
}
int inventory(int n, int m, int d){
system("cls");
printf("[ 인벤토리 ]\n\n");
printf("[보유 아이템]\n");
for(int i=1;i<=t;i++){
printf("%d. ", i);
if(item[i]==1) printf("전공 서적 [정보보호] | 해킹 + 50, 시큐어 코딩 + 50\n");
else if(item[i]==2) printf("전공 서적 [네트워크] | 네트워크 + 50\n");
else if(item[i]==3) printf("전공 서적 [알고리즘] | 알고리즘 + 50\n");
else if(item[i]==4) printf("전공 서적 [IoT] | IoT + 50\n");
else if(item[i]==5) printf("전공 서적 [서버] | 서버 + 50\n");
else if(item[i]==6) printf("전공 서적 [개발] | 개발 + 50\n");
else if(item[i]==7) printf("수학의 정석 [지력] | 지력 + 100\n");
}
printf("\n\n\n돌아가시려면 ENTER를 눌러주세요\n");
char key = _getch();
if(key == CHOOSE) game_main(n, m, d);
else inventory(n, m, d);
}
// 이벤트 - 소수 전공
int major(int n, int m, int d, int i){
system("cls");
switch(i){
case 1: {
// C프로그래밍
printf("[ C 프로그래밍 ]\n\n");
printf("C 프로그래밍 수업 중...\n");
progress_bar();
skill_score.dev += 100;
score.stress += 50;
printf("\n\n개발 + 100, 피로 + 50");
} break;
case 2: {
printf("[ 패킷트레이서 활용 ]\n\n");
printf("패킷트레이서 활용 수업 중...\n");
progress_bar();
skill_score.network += 100;
score.stress += 50;
printf("\n\n네트워크 + 100, 피로 + 50");
} break;
case 3: {
printf("[ 해킹 기초 ]\n\n");
printf("해킹 기초 수업 중...\n");
progress_bar();
skill_score.hacking += 50;
score.stress += 50;
printf("\n\n해킹 + 50, 피로 + 50");
} break;
case 4: {
printf("[ 알고리즘 ]\n\n");
printf("알고리즘 공부 중...\n");
progress_bar();
skill_score.algorithm += 100;
score.stress += 50;
printf("\n\n알고리즘 + 100, 피로 + 50");
} break;
case 5: {
printf("[ 해킹 심화 ]\n\n");
printf("해킹 심화 공부 중...\n");
progress_bar();
skill_score.hacking += 50;
score.stress += 50;
printf("\n\n해킹 + 50, 피로 + 50");
} break;
case 6: {
printf("[ 서버 구축 실무 ]\n\n");
printf("서버 구출 실무 공부 중...\n");
progress_bar();
skill_score.server += 100;
score.stress += 50;
printf("\n\n서버 + 100, 피로 + 50");
} break;
case 7: {
printf("[ 모의 해킹 실무 ]\n\n");
printf("모의 해킹 실무 중...\n");
progress_bar();
skill_score.hacking += 40;
skill_score.secure_coding += 50;
score.stress += 50;
printf("\n\n해킹 + 40, 시큐어 코딩 + 50, 피로 + 50");
} break;
} Sleep(ONE_SECOND);
// 스택 초기화
{
if(score.stress >= MAX_SCORE) score.stress = MAX_SCORE;
if(skill_score.algorithm >= MAX_SCORE) skill_score.algorithm = MAX_SCORE;
if(skill_score.dev >= MAX_SCORE) skill_score.dev = MAX_SCORE;
if(skill_score.hacking >= MAX_SCORE) skill_score.hacking = MAX_SCORE;
if(skill_score.iot >= MAX_SCORE) skill_score.iot = MAX_SCORE;
if(skill_score.network >= MAX_SCORE) skill_score.network = MAX_SCORE;
if(skill_score.secure_coding >= MAX_SCORE) skill_score.secure_coding = MAX_SCORE;
if(skill_score.server >= MAX_SCORE) skill_score.server = MAX_SCORE;
}
if(m==12) game_main(n+4, 1, 1);
else game_main(n+4, m+1, 1);
return 0;
}
// 이벤트 - 대회/컨퍼런스
int conference(int n, int m, int d, int i){
switch(i){
case 1: {
// IoT아이디어 발표회
printf("[ IoT아이디어 발표회 ]\n\n");
printf("IoT아이디어 발표회 참여 중...\n");
progress_bar();
skill_score.iot += 50;
score.stress += 30;
printf("\n\nIoT + 50, 피로 + 30");
} break;
case 2: {
// 알고리즘 페스티벌
printf("[ 알고리즘 페스티벌 ]\n\n");
printf("알고리즘 페스티벌 참여 중...\n");
progress_bar();
skill_score.algorithm += 30;
score.stress += 30;
printf("\n\n알고리즘 + 30, 피로 + 30");
} break;
case 3: {
// 네트워킹 캠프
printf("[ 네트워킹 캠프 ]\n\n");
printf("네트워킹 캠프 참여 중...\n");
progress_bar();
skill_score.network += 50;
score.stress += 30;
printf("\n\n네트워크 + 50, 피로 + 50");
} break;
case 4: {
// 알고리즘 컨퍼런스
printf("[ 알고리즘 컨퍼런스 ]\n\n");
printf("알고리즘 컨퍼런스 참여 중...\n");
progress_bar();
skill_score.algorithm += 30;
score.stress += 30;
printf("\n\n알고리즘 + 30, 피로 + 30");
} break;
case 5: {
// 고등해커 페스티벌
printf("[ 고등해커 페스티벌 ]\n\n");
printf("고등해커 페스티벌 참여 중...\n");
progress_bar();
skill_score.hacking += 30;
score.stress += 30;
printf("\n\n해킹 + 30, 피로 + 30");
}
} Sleep(ONE_SECOND);
// 스택 초기화
{
if(score.stress >= MAX_SCORE) score.stress = MAX_SCORE;
if(skill_score.algorithm >= MAX_SCORE) skill_score.algorithm = MAX_SCORE;
if(skill_score.dev >= MAX_SCORE) skill_score.dev = MAX_SCORE;
if(skill_score.hacking >= MAX_SCORE) skill_score.hacking = MAX_SCORE;
if(skill_score.iot >= MAX_SCORE) skill_score.iot = MAX_SCORE;
if(skill_score.network >= MAX_SCORE) skill_score.network = MAX_SCORE;
if(skill_score.secure_coding >= MAX_SCORE) skill_score.secure_coding = MAX_SCORE;
if(skill_score.server >= MAX_SCORE) skill_score.server = MAX_SCORE;
}
if(m==12 && d==4) game_main(n+1, 1, 1);
else if(d==4) game_main(n+1, m+1, 1);
else game_main(n+1, m, d+1);
return 0;
}
// 게임 엔딩
int end(){
Score score;
Skill_Score skill_score;
title();
{
// 과로사 엔딩 - 배드엔딩
if(score.stress>=MAX_SCORE) {
Sleep(ONE_SECOND);
printf("당신은 여러 일들을 배우기 위해 쉬는 시간도 없이 활동하다가...\n\n");
Sleep(ONE_SECOND);
printf("남들과 달리 여러 능력치를 길러왔습니다...\n\n");
Sleep(ONE_SECOND);
printf("조금만 쉬었어도 더 나은 인생을 살 수 있던 당신은...\n\n");
Sleep(ONE_SECOND);
printf("어린나이에 과로로 인한 사망에 이르렀습니다.\n\n");
Sleep(ONE_SECOND);
printf("[ BAD ENDING ]\n");
printf("- 과로사");
}
// 블랙해커 - 배드엔딩
else if(score.moral<=200&&(skill_score.hacking>=500||skill_score.secure_coding>=500)) {
Sleep(ONE_SECOND);
printf("당신은 해킹 또는 시큐어코딩을 열심히 공부하였습니다...\n\n");
Sleep(ONE_SECOND);
printf("하지만 도덕성이 매우 낮아 비도덕적인 방법으로 해킹을 하고 다닙니다...\n\n");
Sleep(ONE_SECOND);
printf("불법적인 방법으로 돈을 매우 많이 번 당신은...\n\n");
Sleep(ONE_SECOND);
printf("블랙 해커로서 활동을 하게 됩니다.\n\n");
Sleep(ONE_SECOND);
printf("[ BAD ENDING ]\n");
printf("- 블랙 해커");
}
// 치킨집 사장 - 배드엔딩
else if(skill_score.algorithm<=300&&skill_score.dev<=300&&skill_score.hacking<=300&&skill_score.iot<=300&&skill_score.network<=300&&skill_score.secure_coding<=300&&skill_score.server<=300) {
Sleep(ONE_SECOND);
printf("당신은 정보보안 또는 개발에 관련하여 관심이 있어 선린인터넷고등학교에 들어왔지만...\n\n");
Sleep(ONE_SECOND);
printf("어느 순간부터 IT 분야에 대한 관심이 사라지게 되었고...\n\n");
Sleep(ONE_SECOND);
printf("다른 분야에 대한 지식이 없던 당신은...\n\n");
Sleep(ONE_SECOND);
printf("치킨집의 사장이 되게 됩니다.\n\n");
Sleep(ONE_SECOND);
printf("[ BAD ENDING ]\n");
printf("- 치킨집 사장");
}
// CSO(최고보안책임자) - 진엔딩
else if(skill_score.hacking>=800&&skill_score.secure_coding>=800&&skill_score.dev>=500&&score.moral>=500) {
Sleep(ONE_SECOND);
printf("당신은 학교 생활 중 해킹에 가장 큰 관심을 보였고...\n\n");
Sleep(ONE_SECOND);
printf("정보보안 계열에 취업하게 되었습니다...\n\n");
Sleep(ONE_SECOND);
printf("학교에서 배운 지식으로 회사에서 인정을 받은 당신은...\n\n");
Sleep(ONE_SECOND);
printf("최연소 CSO(최고보안책임자)가 되었습니다.\n\n");
Sleep(ONE_SECOND);
printf("[ TRUE ENDING ]\n");
printf("- CSO");
}
// CTO(최고기술전문가) - 진엔딩
else if(skill_score.dev>=800&&skill_score.algorithm>=800&&skill_score.server>=800&&skill_score.network>=800&&skill_score.iot>=800) {
Sleep(ONE_SECOND);
printf("당신은 학교 생활 중 여러 전공에 대해 포괄적으로 큰 관심을 보였고...\n\n");
Sleep(ONE_SECOND);
printf("개발 관련 직무에 취업게 되었습니다...\n\n");
Sleep(ONE_SECOND);
printf("학교에서 배은 지식으로 회사에서 인정을 받은 당신은...\n\n");
Sleep(ONE_SECOND);
printf("최연소 CTO(최고기술관리자)가 되었습니다.\n\n");
Sleep(ONE_SECOND);
printf("[ TRUE ENDING ]\n");
printf("- CTO");
}
// 정보보안 전문가 - 엑설런트엔딩
else if(skill_score.hacking>=600&&skill_score.secure_coding>=600&&score.moral>=500) {
Sleep(ONE_SECOND);
printf("당신은 학교생활 중 해킹과 관련한 분야에 대해 큰 관심을 보였습니다...\n\n");
Sleep(ONE_SECOND);
printf("그러하여 정보보안에 대해서 심도있게 공부하고 졸업하였습니다...\n\n");
Sleep(ONE_SECOND);
printf("그렇게 정보보안 관련 회사에 취업하게 되었고...\n\n");
Sleep(ONE_SECOND);
printf("정보보안 전문가가 되었습니다.\n\n");
Sleep(ONE_SECOND);
printf("[ EXCELLENT ENDING ]\n");
printf("- 정보보안 전문가");
}
// 네트워크 엔지니어 - 엑설런트엔딩
else if(skill_score.network>=600&&skill_score.algorithm>=600&&score.persistence>=500) {
Sleep(ONE_SECOND);
printf("당신은 학교생활 중 네트워크와 관련한 분야에 대해 큰 관심을 보였습니다...\n\n");
Sleep(ONE_SECOND);
printf("그러하여 네트워크에 대해서 심도있게 공부하고 졸업하였습니다...\n\n");
Sleep(ONE_SECOND);
printf("그렇게 네트워크 관련 회사에 취업하게 되었고...\n\n");
Sleep(ONE_SECOND);
printf("네트워크 엔지니어가 되었습니다.\n\n");
Sleep(ONE_SECOND);
printf("[ EXCELLENT ENDING ]\n");
printf("- 네트워크 엔지니어");
}
// 웹 개발자 - 엑설런트엔딩
else if(skill_score.dev>=600&&skill_score.algorithm>=600&&score.health>=500) {
Sleep(ONE_SECOND);
printf("당신은 학교생활 중 개발과 관련한 분야에 대해 큰 관심을 보였습니다...\n\n");
Sleep(ONE_SECOND);
printf("그러하여 개발에 대해서 심도있게 공부하고 졸업하였습니다...\n\n");
Sleep(ONE_SECOND);
printf("그렇게 개발 관련 회사에 취업하게 되었고...\n\n");
Sleep(ONE_SECOND);
printf("웹 개발자가 되었습니다.\n\n");
Sleep(ONE_SECOND);
printf("[ EXCELLENT ENDING ]\n");
printf("- 웹 개발자");
}
// 사물인터넷 개발자 - 엑설런트엔딩
else if(skill_score.iot>=600&&skill_score.algorithm>=600&&score.intellect>=500) {
Sleep(ONE_SECOND);
printf("당신은 학교생활 중 IoT와 관련한 분야에 대해 큰 관심을 보였습니다...\n\n");
Sleep(ONE_SECOND);
printf("그러하여 IoT에 대해서 심도있게 공부하고 졸업하였습니다...\n\n");
Sleep(ONE_SECOND);
printf("그렇게 IoT 관련 회사에 취업하게 되었고...\n\n");
Sleep(ONE_SECOND);
printf("사물인터넷 개발자가 되었습니다.\n\n");
Sleep(ONE_SECOND);
printf("[ EXCELLENT ENDING ]\n");
printf("- 사물인터넷 개발자");
}
// 대학생 - 노멀엔딩
else if(score.intellect >= 600) {
Sleep(ONE_SECOND);
printf("당신은 학교생활 중 대학을 가자는 생각이었습니다...\n\n");
Sleep(ONE_SECOND);
printf("그러하여 전공은 잘 챙기지 않고 내신 공부만 하였습니다...\n\n");
Sleep(ONE_SECOND);
printf("그렇게 수능이 다가오게 되었고 원하는 대학교에 합격하였습니다.\n\n");
Sleep(ONE_SECOND);
printf("[ NORMAL ENDING ]\n");
printf("- 대학생");
}
// 취업준비생 - 노멀엔딩
else if(skill_score.algorithm>=400&&skill_score.dev>=400&&skill_score.hacking>=400&&skill_score.iot>=400&&skill_score.network>=400&&skill_score.secure_coding>=400&&skill_score.server>=400) {
Sleep(ONE_SECOND);
printf("당신은 학교생활 중 전공과 내신 둘 다 소홀히 하였습니다...\n\n");
Sleep(ONE_SECOND);
printf("그러하여 학교 졸업 후에도 대학진학과 취업 둘다 하지 못했습니다...\n\n");
Sleep(ONE_SECOND);
printf("그렇게 전공공부를 다시 열심히 하고 일자리를 열심히 구하는 취업준비생이 되었습니다..\n\n");
Sleep(ONE_SECOND);
printf("[ NORMAL ENDING ]\n");
printf("- 취업준비생");
}
}
printf("\n\n\n");
printf("ENTER를 누르면 게임이 종료됩니다.\n");
char key = _getch();
// 첫 메뉴
if(key == CHOOSE) {
system("cls");
main();
return 0;
}
}
이렇게 보니깐 엄청 기네요... 재미있는 프로젝트였습니다. Nefus 화이팅!
'Nefus > C언어' 카테고리의 다른 글
Nefus - C언어 [메모리 구조] (0) | 2024.04.16 |
---|---|
Nefus - C언어 [BOJ 11729, 24060] (0) | 2024.04.11 |
Nefus - C언어 [Codeup 1274, 1282] (0) | 2024.04.06 |