#pragma once
#include "Include.h"
class GameManager
{
private:
GameManager() = default;
GameManager(const GameManager&) = delete;
GameManager& operator = (const GameManager&) = delete;
static GameManager* m_pInstance;
public:
~GameManager() = default;
public:
static GameManager& GetInstance()
{
static GameManager Instance;
return Instance;
}
// --- >밑에는 예전 스타일 정의부 <----
//static GameManager* GetInstance()
//{
// if (m_pInstance == nullptr)
// m_pInstance = new GameManager();
//
// return m_pInstance;
//}
//static void DestroyInstance()
//{
// delete m_pInstance;
// m_pInstance = nullptr;
//}
public:
void GameStart();
};
#include "GameManager.h"
#include "BattleManager.h"
#include "MonsterFactory.h"
#include "Player.h"
#include "Monster.h"
#include "BattleLogger.h"
GameManager* GameManager::m_pInstance = nullptr;
void GameManager::GameStart()
{
system("cls");
cout << "게임이 시작되었다." << endl;
BattleManager BattleManagerClass;
BattleLogger Logger;
//BattleManagerClass.Get_Subject().Add_Observer(&Logger);
BattleManagerClass.Get_Subject()->Add_Observer(&Logger);
unique_ptr<Player> pPlayer = make_unique<Player>();
BattleManagerClass.Set_Player(move(pPlayer));
shared_ptr<Monster> pMonster1 = MonsterFactory::CreateMonster(MONSTERTYPE::Slime);
shared_ptr<Monster> pMonster2 = MonsterFactory::CreateMonster(MONSTERTYPE::Orc);
shared_ptr<Monster> pMonster3 = MonsterFactory::CreateMonster(MONSTERTYPE::Dragon);
BattleManagerClass.Add_Unit(pMonster1);
BattleManagerClass.Add_Unit(pMonster2);
BattleManagerClass.Add_Unit(pMonster3);
BattleManagerClass.Print_All_Status();
BattleManagerClass.Run_Battle();
}
→ GameManager 가 플레이어 객체를 소유하고 게임 전반에서 참조되는 핵심 상태로 유지한다.
#pragma once
#include "Include.h"
#include "Player.h"
class GameManager
{
private:
GameManager() = default;
GameManager(const GameManager&) = delete;
GameManager& operator = (const GameManager&) = delete;
static GameManager* m_pInstance;
public:
~GameManager() = default;
public:
static GameManager& GetInstance()
{
static GameManager Instance;
return Instance;
}
Player* Get_Player() { return m_pPlayer.get(); }
public:
void GameStart();
unique_ptr<Player> m_pPlayer;
};
#include "GameManager.h"
#include "BattleManager.h"
#include "MonsterFactory.h"
#include "Monster.h"
#include "BattleLogger.h"
GameManager* GameManager::m_pInstance = nullptr;
void GameManager::GameStart()
{
srand((unsigned)time(nullptr));
system("cls");
cout << "게임이 시작되었다." << endl;
m_pPlayer = make_unique<Player>();
BattleManager BattleManagerClass;
BattleLogger Logger;
BattleManagerClass.Get_Subject()->Add_Observer(&Logger);
BattleManagerClass.Set_Player(m_pPlayer.get());
shared_ptr<Monster> pMonster1 = MonsterFactory::CreateMonster(MONSTERTYPE::Slime);
shared_ptr<Monster> pMonster2 = MonsterFactory::CreateMonster(MONSTERTYPE::Orc);
shared_ptr<Monster> pMonster3 = MonsterFactory::CreateMonster(MONSTERTYPE::Dragon);
BattleManagerClass.Add_Unit(pMonster1);
BattleManagerClass.Add_Unit(pMonster2);
BattleManagerClass.Add_Unit(pMonster3);
BattleManagerClass.Print_All_Status();
BattleManagerClass.Run_Battle();
}