#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;
}//플레이어 로드