// ConsoleApplication1.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.




//








//#include "stdafx.h"








#include  




#include








#include











//캐릭터 정보

typedef struct _캐릭터구조체정보




{








 char* 이름;




 int 레벨;




 int 체력;




 int 마력;




 int 공격력;




 int 방어력;




 unsigned int 아이템;
















}캐릭터구조체정보;












//아이템 종류




typedef enum _이넘아이템 {








 아이템_빔 = 0,




 아이템_무기 = 1,




 아이템_갑옷 = 2,




 아이템_장신구1 = 4,




 아이템_장신구2 = 8




} 이넘아이템;






//상수는 대부분 대문자 


#define 공격 1

#define 방어 2

#define 마법 3

#define 도망 4 




#define 공격_메세지 "공격 입력 처리 호출!"

#define 방어_메세지 "방어 입력 처리 호출!"

#define 마법_메세지 "마법 입력 처리 호출!"

#define 도망_메세지 "도망 입력 처리 호출!"







//전역 함수 선언



//화면 정리 

void 정리화면();






//플레이어와 적의 정보 표시


//체력 마법력 방어력 공격력 이름 레벨 아이템 


void 출력캐릭터정보(캐릭터구조체정보* _정보);




//적 정보 초기화 


void 리셋_적정보(캐릭터구조체정보* _정보);






//플레이어 조작 관련 정보 표시 


void 출력플레이어조작정보();





//새로운 부분 추가 




// 입력 및 버퍼 비우기 

int 입력처리();


void 정리입력버퍼();





// 처리 -> 정보 갱신


void 입력공격처리(캐릭터구조체정보* _플레이어, 캐릭터구조체정보* _적);

void 입력방어처리();

void 입력마법처리();

void 입력도망처리();




//함수 선언부에는 '''매개변수명'''을 생략가능

//보다 가독성을 높이기 위해서 변수명을 넣는걸 추천 


void 입력메인처리(



 int _정수입력, //함수선언부에는 매개변수명을 생략가능하지만 보다 가독성을 높이기위해서 변수명을 넣는걸 추천 

 캐릭터구조체정보* _플레이어,

 캐릭터구조체정보* _적





);









////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////






//함수 정의 

void 정리화면()

{


 system("@cls||clear");



}



void 출력캐릭터정보(캐릭터구조체정보* _정보)

{


 if (_정보 == 0) //정보가 0이면

  return; //돌아가 


    //포인터 멤버 접근 연산자

 printf(">>> %s <<<\n", _정보->이름);

 printf("* 레벨 : %d\n", _정보->레벨);

 printf("* 체력 : %d\n", _정보->체력);

 printf("* 마력 : %d\n", _정보->마력);

 printf("* 공격력 : %d\n", _정보->공격력);

 printf("* 방어력 : %d\n", _정보->방어력);




}




void 리셋_적정보(캐릭터구조체정보* _정보)

{


 if (_정보 == 0) //정보가 0이면

  return; //돌아가 



 _정보->이름 = "임나일본부의 개 아신왕";

 _정보->레벨 = 1;

 _정보->체력 = 100;

 _정보->마력 = 10;

 _정보->공격력 = 20;

 _정보->방어력 = 30;

 _정보->아이템 = 아이템_빔;



}




void 출력플레이어조작정보()

{


 printf("-*- 수박도 액션을 선택하라카이 -*-\n");

 printf("1.공격 2.방어 3.마법 4.도망\n");



}




int 입력처리(


)

{



 int 정수입력 = 0;


 printf(">> ");


 scanf_s("%d", &정수입력);


 return 정수입력;



}



void 정리입력버퍼()

{



 while (getchar() != '\n');

 //널문자가 아닐때까지 버퍼 빼는 함수를 반복시킴 




}



void 입력공격처리(캐릭터구조체정보* _플레이어, 캐릭터구조체정보* _적)

{


 printf(공격_메세지);


 _적->체력 -= _플레이어->공격력;


 if (_적->체력

 {


  _적->체력 = 0;

  //적 사망 



 }




}





void 입력방어처리()

{


 printf(방어_메세지);




}



void 입력마법처리()

{


 printf(마법_메세지);



}



void 입력도망처리()

{


 printf(도망_메세지);



}





void 입력메인처리(



 int _정수입력,


 캐릭터구조체정보* _플레이어,


 캐릭터구조체정보* _적





)

{



 switch (_정수입력)

 {


 case 공격: 입력공격처리(



  _플레이어, _적



 );

  break;


 case 방어: 입력방어처리();

  break;


 case 마법: 입력마법처리();

  break;


 case 도망: 입력도망처리();

  break;




 }





}




int main()




{




 _wsetlocale(LC_ALL, L"korean");




 wchar_t * 한글문자열 = L"한글 잘 나옵니다.";


 //"한글 잘 나옵니다.";






 캐릭터구조체정보 플레이어 =


 {



  "미소년 광키리토 호태왕", //이름




  666, //레벨


  2500, //체력



  666, //마력


  666, //공격력



  666, //방어력 





  아이템_무기

  //unsigned int 아이템;




 };




 //동적할당의 경우 주의해야할 부분 많음 



 캐릭터구조체정보* 적 =

  (캐릭터구조체정보*)malloc(sizeof(캐릭터구조체정보));


 리셋_적정보(적);





 //입력

 //그후 에 처리 

 //정보갱신으로 이어짐.




 while (1)

 {



  정리화면();



  출력캐릭터정보(&플레이어);


  출력캐릭터정보(적);


  출력플레이어조작정보();




  int 정수입력 = 입력처리();


  정리입력버퍼();



  입력메인처리(


   정수입력,


   &플레이어,


   적





  );





 }


 if (적 != 0) //적이 0이 아니면 

 {


  free(적);   //해제

       //널로 채우고


  적 = //0;


   NULL;






 }







 return 0;




}