0. 파일 구조
- 크리쳐
⊦ 플레이어
⊦ 몬스터
- 게임
- 필드
- 메인
1. 개요
1) 크리쳐 (캐릭터 / 몬스터)
enum 값을 사용하여 캐릭터와 몬스터를 구분
크리쳐 클래스를 정의
_creatureType(Creature 클래스의 입력값을 받음)와 _hp, _atk, _def를 0으로 초기화
(1) 캐릭터
캐릭터는 enum값을 가지는 세가지 직업으로 구성됨.
최초에 Player 클래스는 Creature를 상속받는다.
이때 기본 생성자는 playerType(크리쳐와 캐릭터를 판별함)를 정수로 받는다.
소멸자는 virtual을 붙여준다.
또한 가상함수 PrintInfo를 만들어준다.
이후 플레이어 타입을 정의해준다.
Player 클래스를 상속받는 세 개의 직업을 만들고 각 생성자 내에 스탯을 다르게 만든다.
이후 크리쳐에는 데미지 계산 식을 만들어준다.
(2) 몬스터
몬스터는 enum 값을 가지는 세가지 타입의 몬스터로 구성됨.
2) 게임 (관리자 역할)
플레이어 클래스와 필드 클래스를 선언
게임 클래스를 정의
기본 생성자와 소멸자를 만듬
Init 함수를 선언하여 초기화 최초 1회 발생하는 이벤트를 작성
Update 함수를 선언
CreatePlayer 함수를 선언
Player 포인터 타입의 _player를 정의
Field 포인터 타입의 _field를 정의
공격받는 함수 OnAttacked 함수 정의 -> 크리쳐 포인터 타입의 공격자 값을 입력받음
Game의 기본 생성자를 _player와 _field의 값을 nullptr로 초기화하게 함
Game의 소멸자에 _player와 _field의 값이 nullptr이 아니라면 제거하게 함
Game::Init 시에 _field는 Field 클래스의 객체를 가짐
Game::Update 시에 _player의 nullptr과 IsDead를 판별하여 죽었으면 객체를 제거하고 nullptr로 만들고 캐릭터를 생성
이후에 _field에 Update(_player)로 수정하게 함
이후에 Game::CreatePlayer를 통해 _player가 nullptr이면 캐릭터를 생성하게 함.
이때 캐릭터의 enum값을 판별하여 기사, 아쳐, 마법사를 생성.
3) 필드
update를 이용하여 매 프레임마다 구동시킬 코드를 작성
-> Player 포인터 타입의 player 변수를 입력받음
CreateMonster 함수를 정의
Monster 타입의 _monster 변수를 정의
필드의 기본 생성자는 _monster를 nullptr로 초기화 시킨다.
필드의 소멸자는 _monster가 nullptr이 아니면 객체를 제거, nullptr이면 CreateMonster를 한다.
이후 Field파일 내의 StartBattle 함수를 작성해준다.
플레이어와 몬스터의 정보를 PrintInfo로 출력
플레이어가 몬스터를 공격하여 IsDead이면 사망처리 하고 monster 객체를 제거
몬스터가 플레이어를 공격하여 IsDead이면 루프를 빠져나간다. 이후 플레이어는 Game.h와 Game.cpp에서 제거한다.
4) 메인 구동
랜덤값을 설정, Game 클래스의 game 객체를 만들고 초기화 시켜준다.
이후 무한 루프에서 game의 Update 함수를 돌려준다.
2. 주의점
delete를 이용하여 객체를 제거한 후에 해당 포인터도 nullptr로 만들어주지 않으면 크래시가 발생할 수 있다.
'기초 C++ 스터디 > 예제' 카테고리의 다른 글
7-1. 디버깅 예제 #1 ~ 4 (0) | 2023.06.07 |
---|---|
7-0. 디버깅 연습 (0) | 2023.06.07 |
4-14. 달팽이 문제 (0) | 2023.05.23 |
4-13. 문자열 수정하기 (0) | 2023.05.23 |
4-12. Text RPG 만들기(2) (0) | 2023.05.23 |