1. 프로그램 목적




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







Retrieved from http://wiki.zeropage.org/wiki.php/새싹교실/2012/주먹밥/이소라때리기게임
last modified 2021-02-07 05:29:48