/*************
20171025 조건부 컴파일 모드
20171026 갱신
*****************/
//내가 사용할 클래스의 헤더파일을 인클루드
/**씨플러스플러스 확장팩 헤더**/
# include <iostream> //씨뿔뿔 입출력 헤더
/**씨 언어 헤더**/
# include <windows.h> //윈도우즈 핸들 //cls 사용
# include <stdio.h> //전처리기(#) 포함(include) 입출력(stdio.h)
# include <conio.h> //getch 함수에 필요한거
#include <stdlib.h> //system("cls")를 쓰기 위한 헤더파일
#include <locale.h>
//#include <wchar.h>
#include <string.h>
# include <time.h>
#pragma comment(lib, "winmm.lib")
#include "C조상.h" //조상 클래스 헤더
#include "Define.h" //디파인 상수 헤더
#include "S읍성.h" //S읍성 구조체 헤더
#include "전역변수.h" //전역변수 헤더
#include "전역이넘.h" //전역이넘배열 헤더
#include "상수배열.h" //상수배열 헤더
#include "함수선언.h" //함수선언 헤더
#include "함수정의.h" //함수정의 헤더
#include "F왕겜성.h" //왕겜성 함수 정의 헤더
#define 테스트_점검 666
#if 테스트_점검 == 666
class C도시정보
{
private:
char* m_i이름; //도시 이름
int m_i인구수; //인구수
int m_i읍성제색병수; //병사수
int m_i읍성잡색군수; //잡색군수 (예비군)
int m_i쌀수; //쌀수
int m_i나무수; //나무수
int m_i철수; //철
int m_i구리수; //구리
int m_i황금수; //황금
int m_i은수; //은
int m_i백성의홧병; //백성의 홧병 즉 민심
/////
int m_i면포수; //도시의 면포 수
int m_i화폐수; //도시의 화폐 수
int m_i기타잡화폐수; //도시의 기타 잡스런 화폐 수
public:
//기본생성자
C도시정보()
:
m_i인구수(0), //인구수
m_i읍성제색병수(0), //병사수
m_i읍성잡색군수(0), //잡색군수 (예비군)
m_i쌀수(0), //쌀수
m_i나무수(0), //나무수
m_i철수(0), //철
m_i구리수(0), //구리
m_i황금수(0), //황금
m_i은수(0), //은
m_i백성의홧병(0), //백성의 홧병 즉 민심
/////
m_i면포수(0), //도시의 면포 수
m_i화폐수(0), //도시의 화폐 수
m_i기타잡화폐수(0) //도시의 기타 잡스런 화폐 수
{
}
//매개변수 멤버초기화 생성자
C도시정보(
int _인구수, //인구수
int _읍성제색병수, //병사수
int _읍성잡색군수, //잡색군수 (예비군)
int _쌀수, //쌀수
int _나무수, //나무수
int _철수, //철
int _구리수, //구리
int _황금수, //황금
int _은수, //은
int _백성의홧병, //백성의 홧병 즉 민심
/////
int _면포수, //도시의 면포 수
int _화폐수, //도시의 화폐 수
int _기타잡화폐수 //도시의 기타 잡스런 화폐 수
) :
//멤버 변수 초기화 리스트
m_i인구수(_인구수), //인구수
m_i읍성제색병수(_읍성제색병수), //병사수
m_i읍성잡색군수(_읍성잡색군수), //잡색군수 (예비군)
m_i쌀수(_쌀수), //쌀수
m_i나무수(_나무수), //나무수
m_i철수(_철수), //철
m_i구리수(_구리수), //구리
m_i황금수(_황금수), //황금
m_i은수(_은수), //은
m_i백성의홧병(_백성의홧병), //백성의 홧병 즉 민심
/////
m_i면포수(_면포수), //도시의 면포 수
m_i화폐수(_화폐수), //도시의 화폐 수
m_i기타잡화폐수(_기타잡화폐수) //도시의 기타 잡스런 화폐 수
//멤버 변수가 생성되자마자 괄호안의 값을 바로 넣는다.
//모든 멤버변수의 초기화는 리스트에서 바로 한다.
//변수가 만들어지자마자 부모가 호출
{
std::cout << "C도시정보 오버로딩 연산자 호출..." << std::endl;
//부모의 변수에 접근하는 방법
//범위 지정 연산자
//CHuman::CHuman(_hp, _mp, _exp);
//근데 아직도 디폴트생성자가 없어용이라고 뜨죠.
//우리는 뭔가 서버에서 받을수있는걸로만 만들수있게하고싶죠.
//생성자는 그냥 호출이 불가능합니다. 소멸자도 마찬가지죠.
//m_iShield = _shield; //이미 변수가 만들어진 다음에 대입리스트
}
//소멸자
~C도시정보()
{
std::cout << "C도시정보 멸망기 호출..." << std::endl;
std::cout << "C도시정보가 불과 유황의 호수에 추락한다..." << std::endl;
}
public:
struct S인구정보 //씨뿔뿔에선 구조체 재정의가 필요없다.
{
char* 이름;
int 인구수;
int 솔종수;
// int 공격력;
//int 방어력;
//int 강화도;
//도끼 생성자 호출
S인구정보() : 인구수(666), 솔종수(666)
{
}
};
private:
S인구정보 좌식자;
S인구정보 호민;
S인구정보 하호;
public:
//기능 함수들 적기
void 설정이름(char* _넣는이름)
{
m_i이름 = _넣는이름;
}
void 프린트이름()
{
std::cout << "도시 이름 : " << m_i이름 << std::endl;
}
};
//C조상 사탄;
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//오스트랄로피테쿠스
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//호모사피엔스
//후손 클래스
class C별종 : public C조상
{
//public:
//unsigned int 아이템;
private: //개인정보
//int m_i별종의개인정보;
int m_i복근;
public:
//생성자
//멤버 초기화 리스트 (Member Initialize List)
C별종(int _넣는체력, int _넣는마법력, int _넣는경험치, int _넣는레벨 , int _넣는공격력 ,
int _넣는방어력 , int _넣는근육_쉴드, int _넣는돈 , int _넣는복근) :
//멤버 변수 초기화 리스트
C조상(_넣는체력, _넣는마법력, _넣는경험치, _넣는레벨, _넣는공격력, _넣는방어력, _넣는근육_쉴드,
_넣는돈), m_i복근(_넣는복근)
//멤버 변수가 생성되자마자 괄호안의 값을 바로 넣는다.
//모든 멤버변수의 초기화는 리스트에서 바로 한다.
//변수가 만들어지자마자 부모가 호출
{
std::cout << "별종 오버로딩 연산자 호출..." << std::endl;
//부모의 변수에 접근하는 방법
//범위 지정 연산자
//CHuman::CHuman(_hp, _mp, _exp);
//근데 아직도 디폴트생성자가 없어용이라고 뜨죠.
//우리는 뭔가 서버에서 받을수있는걸로만 만들수있게하고싶죠.
//생성자는 그냥 호출이 불가능합니다. 소멸자도 마찬가지죠.
//m_iShield = _shield; //이미 변수가 만들어진 다음에 대입리스트
}
//소멸자 //소멸자는 매개변수를 못받고 오버로딩도 안된다.
~C별종()
{
std::cout << "C별종 멸망기 호출..." << std::endl;
}
//후손이 부모의 함수를 재정의하는 함수 오버라이딩
void 공격()
{
//공격(); //이렇게하면 재귀호출이라서 뻗는다.
//부모 함수 호출
C조상::공격();
std::cout << "C별종의 신석기 어택!!" << std::endl;
}
};
//종묘 클래스
class C종묘 : public C조상
{
//public:
//unsigned int 아이템;
private: //개인정보
//int m_i별종의개인정보;
int m_i제삿밥_양갱;
//int m_i타임;
public:
//생성자
//멤버 초기화 리스트 (Member Initialize List)
C종묘(int _넣는체력, int _넣는마법력, int _넣는경험치, int _넣는레벨, int _넣는공격력,
int _넣는방어력, int _넣는근육_쉴드, int _넣는돈, int _넣는양갱) :
//멤버 변수 초기화 리스트
C조상(_넣는체력, _넣는마법력, _넣는경험치, _넣는레벨, _넣는공격력, _넣는방어력, _넣는근육_쉴드,
_넣는돈), m_i제삿밥_양갱(_넣는양갱)
//멤버 변수가 생성되자마자 괄호안의 값을 바로 넣는다.
//모든 멤버변수의 초기화는 리스트에서 바로 한다.
//변수가 만들어지자마자 부모가 호출
{
std::cout << "종묘 오버로딩 연산자 호출..." << std::endl;
//부모의 변수에 접근하는 방법
//범위 지정 연산자
//CHuman::CHuman(_hp, _mp, _exp);
//근데 아직도 디폴트생성자가 없어용이라고 뜨죠.
//우리는 뭔가 서버에서 받을수있는걸로만 만들수있게하고싶죠.
//생성자는 그냥 호출이 불가능합니다. 소멸자도 마찬가지죠.
//m_iShield = _shield; //이미 변수가 만들어진 다음에 대입리스트
}
//소멸자 //소멸자는 매개변수를 못받고 오버로딩도 안된다.
~C종묘()
{
std::cout << "C종묘 멸망기 호출..." << std::endl;
}
//후손이 부모의 함수를 재정의하는 함수 오버라이딩
void 공격()
{
//공격(); //이렇게하면 재귀호출이라서 뻗는다.
//부모 함수 호출
C조상::공격();
std::cout << "C종묘의 저주 어택!!" << std::endl;
}
//public:
//struct S타임 //씨뿔뿔에선 구조체 재정의가 필요없다.
//{
// int 플레이타임;
// int 엔딩타임;
//도끼 생성자 호출
// S타임() : 플레이타임(666), 엔딩타임(666)
// {
// }
//};
//void 종묘시간의방()
//{
//C조상::S타임::플레이타임 = 666;
//while (S타임::플레이타임 < S타임::엔딩타임)
//{
//}
//}
};
class C니므롯 : public C별종
{
private: //개인정보
//int m_i별종의개인정보;
//int m_i복근;
public:
enum 왕도
{
칭기스요시츠네 = 666,
노부나가 = 1,
히데요시 = 2,
이에야스 = 3,
선조 = 4,
영조 = 5,
정조 = 6,
대원군 = 7,
명성황후 = 8,
고종 = 9,
천개소문 = 10
};
//public:
//unsigned int 아이템;
//private: //개인정보
//int m_i별종의개인정보;
//int m_i복근;
public:
//생성자
//멤버 초기화 리스트 (Member Initialize List)
C니므롯(int _넣는체력, int _넣는마법력, int _넣는경험치, int _넣는레벨, int _넣는공격력, int _넣는방어력,
int _넣는근육_쉴드,
int _넣는돈, int _넣는복근) :
//멤버 변수 초기화 리스트
C별종(_넣는체력, _넣는마법력, _넣는경험치, _넣는레벨, _넣는공격력, _넣는방어력, _넣는근육_쉴드,
_넣는돈 , _넣는복근) //, m_i복근(_넣는복근)
//멤버 변수가 생성되자마자 괄호안의 값을 바로 넣는다.
//모든 멤버변수의 초기화는 리스트에서 바로 한다.
//변수가 만들어지자마자 부모가 호출
{
std::cout << "니므롯 오버로딩 연산자 호출..." << std::endl;
//부모의 변수에 접근하는 방법
//범위 지정 연산자
//CHuman::CHuman(_hp, _mp, _exp);
//근데 아직도 디폴트생성자가 없어용이라고 뜨죠.
//우리는 뭔가 서버에서 받을수있는걸로만 만들수있게하고싶죠.
//생성자는 그냥 호출이 불가능합니다. 소멸자도 마찬가지죠.
//m_iShield = _shield; //이미 변수가 만들어진 다음에 대입리스트
}
//소멸자 //소멸자는 매개변수를 못받고 오버로딩도 안된다.
~C니므롯()
{
std::cout << "C니므롯 멸망기 호출..." << std::endl;
}
//후손이 부모의 함수를 재정의하는 함수 오버라이딩
void 공격()
{
//공격(); //이렇게하면 재귀호출이라서 뻗는다.
//부모 함수 호출
C조상::공격();
std::cout << "C니므롯의 청동기 어택!!" << std::endl;
}
};
class C사탄적그리스도 : public C니므롯
{
private: //개인정보
//int m_i별종의개인정보;
// int m_i복근;
public:
struct S일본도 //씨뿔뿔에선 구조체 재정의가 필요없다.
{
int 체력;
int 마력;
int 공격력;
int 방어력;
int 강화도;
//도끼 생성자 호출
S일본도() : 체력(666), 마력(666), 공격력(666), 방어력(666), 강화도(666)
{
}
};
private:
S일본도 m_cur도끼;
public:
C사탄적그리스도(int _넣는체력, int _넣는마법력, int _넣는경험치, int _넣는레벨, int _넣는공격력, int _넣는방어력,
int _넣는근육_쉴드,
int _넣는돈, int _넣는복근) :
/****멤버리스트 초기화*****/ C니므롯(_넣는체력, _넣는마법력, _넣는경험치, _넣는레벨, _넣는공격력, _넣는방어력, _넣는근육_쉴드,
_넣는돈, _넣는복근)
{
std::cout << "사탄적그리스도 생성자 호출!" << std::endl;
}
void 설정도끼(S일본도 _넣는도끼)
{
m_cur도끼 = _넣는도끼;
}
//여기에 인젝션 함수 하나 더 적어야됨.
void 찌르기도끼(C조상& _넣은희생제물)
{
_넣은희생제물.설정체력(_넣은희생제물.받기체력() - m_cur도끼.공격력);
}
};
//조상을 그대로 빼닮은 노비
class C노비 : protected C조상
{
private: //개인정보
//int m_i별종의개인정보;
//int m_i복근;
public:
//클래스 내부에 이넘 선언 가능
enum E전자발찌 //c++는 이넘도 구조체도 전부 재정의가 필요없다.
{
k청동,
k은,
k금
};
private:
E전자발찌 m_족쇄;
public:
//기본 생성자
C노비() :
C조상(
50, //체력
0, //마법력
0, //경험치
0, //레벨
1, //공격력
1, //방어력
2333, //근육
666 //돈
),
m_족쇄(E전자발찌::k청동)
{
std::cout << "C노비 생성자 호출..." << std::endl;
}
//어택 못하는 노비를 만들시 오버로딩 생성자를 응용
C노비(E전자발찌 _넣은족쇄) : C조상(
50, //체력
0, //마법력
0, //경험치
0, //레벨
1, //공격력
1, //방어력
2333, //근육
666 //돈
), m_족쇄(_넣은족쇄)
{
std::cout << "C노비 오버로딩 생성자 호출..." << std::endl;
}
//함수 오버라이딩
void PrintState()
{
C조상::PrintState();
std::cout << "= C노비 지역 =" << std::endl;
//
std::cout << E전자발찌To문자열(m_족쇄) << std::endl;
}
protected:
//캐릭터 포인터 반환
const char* const E전자발찌To문자열(E전자발찌 _넣은족쇄) /* 전자 컨스트는 주소보호 후자 컨스트는 값 보호**/
{
switch (_넣은족쇄)
{
case E전자발찌::k청동: return "청동";
case E전자발찌::k은: return "은";
case E전자발찌::k금: return "금";
default: return "아무것도 없음";
}
}
};
///*****
struct S김일성
{
char* 이름; //이름
int 체력;
int 공격력;
int 방어력;
int 쉴드;
int 마법력;
int 교시;
//생성자
S김일성()
{
}
//소멸자
~S김일성()
{
}
//구조체 객체 포인터 함수
S김일성* 받기애비자기자신()
{
//this-> //부모꺼 자식꺼 다 보임.
return this; //지를 반환하는 포인터
}
public:
struct S비파형카빈소총
{
int 체력;
int 마력;
int 공격력;
int 방어력;
int 강화도;
//비파형카빈소총 생성자 호출
S비파형카빈소총() : 체력(666), 마력(666), 공격력(666), 방어력(666), 강화도(666)
{
}
};
private:
S비파형카빈소총 m_cur무기;
public:
//S김일성(int )
void 설정무기(S비파형카빈소총 _넣는무기)
{
m_cur무기 = _넣는무기;
}
//여기에 인젝션 함수 하나 더 적어야됨.
void 찌르기무기(C조상& _넣은희생제물)
{
_넣은희생제물.설정체력(_넣은희생제물.받기체력() - m_cur무기.공격력);
}
};
//계승자 구조체
struct S새끼장군님 : public S김일성 //상속받는 부분
{
int 령도;
int 핵무기;
//생성자
S새끼장군님()
{
}
//소멸자
~S새끼장군님()
{
}
//구조체 객체 포인터 함수
S새끼장군님* 받기새끼자기자신()
{
//this-> //부모꺼 자식꺼 다 보임.
return this; //지를 반환하는 포인터
}
};
//**********/
/****************
int main(void) {
SChild child;
printf("SParent this : %x\n",
child.GetParentThis());
printf("val1 : %x\n", &child.val1);
printf("val2 : %x\n", &child.val2);
printf("SChild this : %x\n",
child.GetChildThis());
printf("val3 : %x\n", &child.val3);
printf("val4 : %x\n", &child.val4);
return 0;
}
*****************/
/***전역 상수 const ****/
/*************메모****************
한량나이트(좌식자) 구조체
서인(평민) 구조체
노비 구조체
*********************************/
/********메모**********
typedef struct _SCharacInfo
{
char* name; //이름
int lv; //레벨
int hp; //체력
int mp; //마법력
int atk; //공격력
int def; //방어력
unsigned int item; //아이템
} SCharInfo;
************************/
//typedef enum _논리카드 {
//} 논리카드;
//캐릭터정보 삼국지동이전시나리오 = { 0 , 0 , 0 , 0 , 0 , 0
//};
/********메모********
typedef enum _Eitem {
ITEM_EMPTY = 0, ITEM_WEAPON = 1, ITEM_ARMOR = 2,
ITEM_ACCESSORY1 = 4, ITEM_ACCESSORY2 = 8
} Eitem;
************/
//typedef enum _넘기기
//{
//기다리자 , 엔터치자
//} 넘기기;
///////////////////////////////
///////////////////////////////
///////////////////////////////
//메인함수
int main(void) //int main() 이렇게해도됨. //void는 '공허' 즉 매개변수가 텅비었다는 뜻.
{
//_wsetlocale(LC_ALL, L"korean");
//wchar_t szName[256];
/********개발자전용 점검 모드***************/
//개발자전용점검모드부르기(); //이건 개발 다하면 주석처리하기.
//개발자전용점검모드부르기(); //이건 개발 다하면 주석처리하기.
//암흑과 공허의 지배
while (세상의시작 == 0) //세상의시작 변수가 0인 동안 무한루프
{
//태초에 하늘과 땅이 공허했고 암흑이었느니라.
정리화면(); //화면정리 함수 호출
/*************인트로 화면**************/
//int iInput = 입력처리();
//입력버퍼 비우기 부분
//정리입력버퍼(); //버퍼 비우는 함수 호출
//맨첫화면();
맨처음시작되는검은화면();
인트로화면();
/******************입력 , 버퍼비우기*******************/
//하나님이 가라사대 빛이 있으라 하시니 ...
//입력 작업 부분
//세상의시작 = 입력처리();
//입력버퍼 비우기 부분
//정리입력버퍼(); //버퍼 비우는 함수 호출
/****************************************/
//대기중(); //버퍼에 안들어가고 입력들어오는 값을 바로 보는거
//게임 시작전
정리화면();
게임시작전();
세상의시작 = 666;
}
//////////
//////////
//////////
//빛이 생기니 하나님 보시기에 좋았더라.
while (세상의시작 != 0 /***이건 안됨***/ /**** || 세상의시작 = 1260;***/) //세상의시작 변수가 0이 아니면 무한루프
{
정리화면();
//
//printf("게임 시작 \n");
//메뉴 정보 출력 <= 이건 좀있다 만들기
//시나리오선택화면();
세상의시작 = 0; //세상의시작 변수를 0으로 돌려서 반복문에서 벗어난다.
/****c는 절차지향이라는 점을 항상 기억*****/
시나리오선택화면();
}
if (시나리오변수 == 동이전시나리오플레이실행) //시나리오변수가 동이전시나리오플레이실행 상수이면
{
시나리오변수 = 동이전시나리오플레이머무르기; //시나리오변수를 동이전시나리오플레이머무르기상수로 바꾼다.
왕겜성(); //그후 왕겜성 함수를 호출한다.
}
//이 부분에서 조상클래스 객체 2명이 소멸하는 소멸자(멸망기)가 호출된다.
printf(" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\t\n");
printf(" ┃ 게임 종료 할 ....... ? \n");
printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\t\n");
//시스템이 정상종료되기 직전 대기창
대기중(); //버퍼에 안들어가고 입력들어오는 값을 바로 보는거
//이벤트 진행 상황 출력
// printf(" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\t\n");
// printf(" ┃ ┃\n");
// printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\t\n");
printf(" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\t\n");
printf(" ┃ 게임 종료합니다......., \n");
printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\t\n");
대기중();
return 0; //시스템 정상종료
}
/////////////////////////////////////////////////////////
///////////////////////////////////////////////////
////////////////////////////////////////////////////
/////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
///////////////////////////
////////////////////////////////////////////
# elif //그밖의 만약
#else //그밖에 더.... (마지막으로)
#endif //여기에서 조건부 컴파일의 종료
이걸누가일습니까
아무도 관심없고 이렇게 보기도힘든글 보기싫다
이러니까 사람들한테 미움사는거 ㅇㅋ?
무플이답
풍후 요즘 발전하니깐 재밋어지노
헤더보고내림 동일기능 헤더를 다 넣네
응 ㄴㅇㅁ ㅋㅋㅋㅋㅋㅋ