#include<stdio.h> #include<math.h> //Rand를 가져오는 헤더파일 #include<stdlib.h> #include<time.h> #include<string.h> //이소라 초기값 #define SORAHEAL 60000 #define SORAKICK 9000 #define SORAPUNCH 10000 ///현재 쓸수 있는 스킬갯수 #define SKILLSIZE 3 #define CLASSSIZE 3 #define USERNUM 1 //유저 갯수 char ima[150][150] = { " :~:, ~ZMM, ", " ,:=?I?I$Z8DD8DNMMMMD?=~:, :=7DMMMD, ", " :?$8DMMMMMMMMMNOZ8DNMMZZMMMMMMNMMMMM8MM= ", " =IZNMMMMMMMMM8I, ,?NM$:~+?777$7?=,7M7 ", " =8MMMD$?~,,:~+I8MM7, :ZM8: :MM, ", " :OMMO+: :ZMM$~= IMN$~ $M$ ", " $MMD= ~OMMM: IMM+ DM= ", " IMM7=IOOO$?: :8M$ 7M7 ~MZ ", " 7MMMNN87+IZDMN$: OMZ 8M: IM+ ", " =MMMZ=, :?NMZ, $M7 +M7 7M~ ", " 8MM? ,,,: +MN= ,OM? NN ZM, ", " ,,=NMMDMMMMMMD7 :DMI :NN, $M: ZM ", " :7DMMMMDD$?7778MM8~ ,8M= ?M$ +M+ $M, ", " ~$MMM8I= =8MM$ :NN: 8M~ ~M7 7M: ", " 7MMMO~ ,IMM8: =MZ, 7M$ ,N8 7M~ ", " :?DMMO~ ?8MMN+ $MO $NN, DM $M~ ", " ?MM8: :,IMMM+ :M8 IM= 8N ?M: ", " , 8MZ IMMM= $N =MI $M, ?M~ ", " :MN: ,8MMM~ ~MI ,MO 7M: ?M~ ", " =87= $MMMZ DM, DD ?M: OM~ ", " ,NO ,MMMMM~ +M7 8N IM= ~MD, ", " $M, $NMMM7 DN, 8N ZM, 8M7 ", " ,M$ , :=~$+I,?:~O7:, ZNMMD IM= 8N DN ,$M8: ", " =M~ 87Z=N:7DIMZD=M++MMONND$ =MMMM: :M7 8N :MZ+NMD~ ", " 7N =MON=M+8Z$D88?M~7MMZMMMMI ?MMMM: DN :MD $MMMM$?, ", " OM: NMDMZM8MDNNNMOMDDMMMMMMMN 7MMMM: ZM~ :MO =MN??~ ", " DD: ,NN8NZM7MMND8M$MO?MMMMMNMZ :MMMM: ?M? ,M7 DM? ", " D7 DM8MIM+I$IZ:::$= ~,~7I7MZ 8MMN :M$ +M= 7MO ", " ,M7 DO?O~I= =+ZMDO= NNMO MZ ZM:$MN, ", " ,M$ DI , ?OMMN8MMMI,MMMI M$ MNOMD: ", " D8 I8MMDNMND$= 7MM8I: +MMO +MMM~ ~M7 7MMMO, ", " 8D 8MMD $NO OZ: ~OMMM$ =MM8 ?M+ ~MMM8 ", " 7M $MOM= : MM DMMMNO =MM+ 8M, =NMM8: ", " +M $M8MNNMZ MM 7MMD$: 7M$ ,+DM7 INMMZ ", " =M ?8MMMMZ ~MD 7MMZZDMMN+ 7NMMN$, ", " =$MO ZMMMMO II? M ?MMD~ +MMND8ZOI?DMMO? ", " ~7N8 IIZMM7 MMM8O8M8 M8~MO 8MMDMMMMMMO= ", " ZN ~$MM NDO MM88MO DMNO$I7I=: ", " $M: :NMM NM8Z8MM8::,8MZ ", " ~MM= :$, ,MM$$8MMM8: =8NMDOMONM8 ", " Z8M+=7:M7 :MN, ,ZMNO?: ?8D8N+DMMMM= ", " ,NID7?M$8D, :MD,?~=OMZ:??OM$ZM,$MMDMM~ ", " ,M?N7 OD$M, :M8= NNOM, :NM=7M,ZND=NM+ ", " NZN7 =MOM :M? ON::M= ,NI 7M?DMZ ZM+ ", " ZMM7 ,MDM: 7M, $M= ~M~ ~M: +M8NM$ OM~ ", " $MD= =MOM~ MO +MI $N ~M: ~MMMMZ~MM, ", " +NMMZ 7N7M=7M+ D8 ,M7 :M~ ,NNMMMMM7 ", " ~MZ 7N7MIMI ~M~ IM~ :M= 7MN7MMM$ ", " ZM788=MMO ID ,NO +M: :NMOMNZ= ", " ,8MMZ~MM~ $O +M~ +M: 7MMN? ", " ~MM8~MZ 87 8D ZD ,ZMM$ ", " ?M8MNM= :M+ ,M? ~M? ,=8Z ", " 8O IM$ $N, ?M: ,D8 ", " , ~M~ IMI Z8 ZM= ", " :M+,ZM$ ZO ,OM? ", " OMMN+ IM7DM? ", " ~~, ,7DZ: , ",'\0' }; typedef struct _skill{ int health; int heal; int kick; int punch; }SKILL; typedef struct _player{ char name[40]; SKILL skill; }PLAYER; typedef struct _select{ int select; void (*func)(PLAYER *, PLAYER *); //신나는 함수포인터 }SELECT; typedef struct _class{ int type; char name[40]; SKILL skill; }CLASS; //select에 정의된대로 정의된 함수들. void heal(PLAYER *, PLAYER *); void kick(PLAYER *, PLAYER *); void punch(PLAYER *, PLAYER *); ////////////////게임 프로세스 함수들. int gameinit(PLAYER *); //게임초기화 int printplayerstate(PLAYER *, PLAYER *); //스테이터스 출력 int gameprocess(PLAYER *, PLAYER *); //게임 진행상태 int playersave(PLAYER *); //플레이어 세이브 int playerload(PLAYER *); //플레이어 로드 const SELECT menu[SKILLSIZE] ={ {1,heal}, {2,kick}, {3,punch} }; const CLASS classList[CLASSSIZE]= { {1,"탱커",{50000,1000,5000,5000}}, {2,"딜러",{20000,500,15000,15000}}, {3,"힐러",{15000,1000,1500,1000}} }; int main(){ //이소라 체력 , 내 체력 정하기. PLAYER sora = {"이소라",{100000,SORAHEAL,SORAKICK,SORAPUNCH}}; PLAYER player; int i; srand(time(NULL)); //Rand의 시드값 변경해줌. for(i = 0;i<80;i++) printf("%s",ima[i]); printf("소라때리기 Mk-2 게임 시작합니다.\n"); //printf("제작자 : 06 김준석 Target : 11 이소라\n"); gameinit(&player); while(1){ printplayerstate(&sora, &player); gameprocess(&sora, &player); // 그리고 반복 if(sora.skill.health <= 0 && player.skill.health <= 0){ printf("\nDouble KO. 둘다 쓰러졌습니다.\n"); break; } else if(sora.skill.health <= 0){ printf("\n소라를 이겼습니다!!! \\(* ^ * )/ \n"); break; } else if(player.skill.health <= 0 ){ printf("\n소라에게 죽었습니다.. OTL \n"); break;//while문을 빠져나간다. } //죽었나 살았나? } printf("\nGame Over\n"); return 0; } //select에 정의된대로 정의된 함수들. void heal(PLAYER * who, PLAYER * target){ int temp; temp = ( ( rand() % who->skill.heal)); who->skill.health += temp; printf("%s가 %s를 힐해줍니다. 피가 : %d 만큼 채워졌습니다!\n",who->name,who->name,temp); } void kick(PLAYER * who, PLAYER * target){ int temp; temp = ( ( rand() % who->skill.kick)); target->skill.health -= temp; printf("%s가 %s를 발로찹니다. 데미지 : %d 만큼 입혔습니다!\n",who->name,target->name,temp); } void punch(PLAYER * who, PLAYER * target){ int temp; temp = ( ( rand() % who->skill.punch)); target->skill.health -= temp; printf("%s가 %s를 때립니다. 데미지 : %d 만큼 입혔습니다!\n",who->name,target->name,temp); } ////////////////게임 프로세스 함수들. int gameinit(PLAYER * me){ int i; int select=-1; printf("세상을 구할 용사여 이름을 입력하세요(주의! 오타내도 그게 이름됨)\n"); scanf("%s",me->name); while(select == -1){ printf("직업을 선택하세요.\n"); for(i =0;i<CLASSSIZE;i++) printf("%d %s\n",classList[i].type,classList[i].name); scanf("%d",&select); if(select <= 0 || select > CLASSSIZE) select = -1; } printf("당신의 직업은 %s 입니다.\n",classList[select-1].name); me->skill = classList[select-1].skill; return 0; } int printplayerstate(PLAYER * sora, PLAYER * me){ printf("이소라 체력 : %d\n",sora->skill.health); printf("내 체력 : %d\n",me->skill.health); } //스테이터스 출력 int gameprocess(PLAYER * sora, PLAYER * player){ int i; int select = 0; printf("자힐 : 1 발로 차기 : 2 주먹 : 3 \n"); while(1){ scanf("%d",&select); if(select > 0 || select <= SKILLSIZE){ break; } printf("잘못된 입력입니다\n"); } for(i = 0; i < SKILLSIZE; i++){ if(select == menu[i].select){ (menu[i].func(player,sora)); break; } } while(1){ select = rand() % SKILLSIZE +1;//선택의 랜덤 if(select > 0 || select <= SKILLSIZE){ break; } printf("잘못된 입력입니다\n"); } for(i = 0; i < SKILLSIZE; i++){ if(select == menu[i].select){ (menu[i].func(sora,player)); } } //소라의 랜덤 공격 }//게임 진행상태 int playersave(PLAYER * who){ return 0; }//플레이어 세이브 int playerload(PLAYER * who){ return 0; }//플레이어 로드