MakeLayout(LAYOUT_TYPE::STAT, 0, 2, 8, 25); // 랜덤 방 종류 결정 RandomManager::GetInstance()->setRange(1.f, 100.f); double randomValue = RandomManager::GetInstance()->getRandom(); // 1~100 사이의 랜덤 값 if (randomValue <= 60) { setupBattleRoom(); // 전투 방 설정 } else if (randomValue <= 20) { setupAltarRoom(); // 제단 방 설정 } else { setupShopRoom(); // 상점 방 설정 } } void Scene2F::setupBattleRoom() { // Map Layout WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::MAP, 104, 2, 9, 9); WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "02 [⚔️]", false, 7, TEXT_COLOR_"> MakeLayout(LAYOUT_TYPE::STAT, 0, 2, 8, 25); // 랜덤 방 종류 결정 RandomManager::GetInstance()->setRange(1.f, 100.f); double randomValue = RandomManager::GetInstance()->getRandom(); // 1~100 사이의 랜덤 값 if (randomValue <= 60) { setupBattleRoom(); // 전투 방 설정 } else if (randomValue <= 20) { setupAltarRoom(); // 제단 방 설정 } else { setupShopRoom(); // 상점 방 설정 } } void Scene2F::setupBattleRoom() { // Map Layout WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::MAP, 104, 2, 9, 9); WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "02 [⚔️]", false, 7, TEXT_COLOR_"> MakeLayout(LAYOUT_TYPE::STAT, 0, 2, 8, 25); // 랜덤 방 종류 결정 RandomManager::GetInstance()->setRange(1.f, 100.f); double randomValue = RandomManager::GetInstance()->getRandom(); // 1~100 사이의 랜덤 값 if (randomValue <= 60) { setupBattleRoom(); // 전투 방 설정 } else if (randomValue <= 20) { setupAltarRoom(); // 제단 방 설정 } else { setupShopRoom(); // 상점 방 설정 } } void Scene2F::setupBattleRoom() { // Map Layout WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::MAP, 104, 2, 9, 9); WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "02 [⚔️]", false, 7, TEXT_COLOR_">
void Scene2F::makeLayout() {
    // Title Layout (2층 제목 설정)
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::TITLE, 0, 0, 1, 100);
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::TITLE, "주황 욕망의 층", false, 0, TEXT_COLOR_TYPE::WHITE, BACKGROUND_COLOR_TYPE::ORANGE));

    // Stat Layout
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::STAT, 0, 2, 8, 25);

    // 랜덤 방 종류 결정
    RandomManager::GetInstance()->setRange(1.f, 100.f);
    double randomValue = RandomManager::GetInstance()->getRandom<double>(); // 1~100 사이의 랜덤 값

    if (randomValue <= 60) {
        setupBattleRoom(); // 전투 방 설정
    }
    else if (randomValue <= 20) {
        setupAltarRoom(); // 제단 방 설정
    }
    else {
        setupShopRoom(); // 상점 방 설정
    }
}

void Scene2F::setupBattleRoom() {
    // Map Layout
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::MAP, 104, 2, 9, 9);
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "02 [⚔️]", false, 7, TEXT_COLOR_TYPE::ORANGE));

    // Story Layout
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::STORY, 0, 12, 9, 60);
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STORY, "🟠 이곳은 주황 욕망의 층입니다.", false, 0, TEXT_COLOR_TYPE::ORANGE));
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STORY, "🦎 황금 도마뱀이 당신의 장비를 탐내고 있습니다.", false, 1, TEXT_COLOR_TYPE::WHITE));

    // Select Layout (전투 선택지)
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::SELECT, 0, 23, 5, 60);
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "1. 공격", false, 0, TEXT_COLOR_TYPE::WHITE));
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "2. 방어", false, 1, TEXT_COLOR_TYPE::WHITE));
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "3. 스킬", false, 2, TEXT_COLOR_TYPE::WHITE));
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "4. 아이템 사용", false, 3, TEXT_COLOR_TYPE::WHITE));
}

void Scene2F::setupAltarRoom() {
    // Map Layout
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::MAP, 104, 2, 9, 9);
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "02 [⛲]", false, 7, TEXT_COLOR_TYPE::ORANGE));

    // Story Layout
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::STORY, 0, 12, 9, 60);
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STORY, "🟠 신성한 기운이 느껴집니다.", false, 0, TEXT_COLOR_TYPE::ORANGE));
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STORY, "🙏 제단에서 선택을 해야 합니다.", false, 1, TEXT_COLOR_TYPE::WHITE));

    // Select Layout (제단 선택지)
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::SELECT, 0, 23, 5, 60);
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "1. 골드 봉헌", false, 0, TEXT_COLOR_TYPE::WHITE));
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "2. 제단 떠나기", false, 1, TEXT_COLOR_TYPE::WHITE));
}

void Scene2F::setupShopRoom() {
    // Map Layout
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::MAP, 104, 2, 9, 9);
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "02 [🏪]", false, 7, TEXT_COLOR_TYPE::ORANGE));

    // Story Layout
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::STORY, 0, 12, 9, 60);
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STORY, "🟠 이곳은 상점입니다.", false, 0, TEXT_COLOR_TYPE::ORANGE));
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STORY, "🛒 필요한 아이템을 구매하세요.", false, 1, TEXT_COLOR_TYPE::WHITE));

    // Select Layout (상점 선택지)
    WriteManager::GetInstance()->MakeLayout(LAYOUT_TYPE::SELECT, 0, 23, 5, 60);
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "1. 아이템 구매", false, 0, TEXT_COLOR_TYPE::WHITE));
    WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "2. 상점 나가기", false, 1, TEXT_COLOR_TYPE::WHITE));
}

메인 함수

// main.cpp
#include "pch.h"
#include "ConsoleLayout.h"
#include "GameManager.h"
#include "SceneManager.h"

int main()
{
	_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

	// 게임 매니저 초기화
	GameManager::GetInstance()->Initialize();

	// 씬 매니저 초기화 (1층 위치 설정)
	SceneManager::GetInstance()->Initialize();

	/*while (true)
	{
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::TITLE, "붉은 방", 0, TEXT_COLOR_TYPE::WHITE, BACKGROUND_COLOR_TYPE::RED));
		WriteManager::GetInstance()->render();
		WriteManager::GetInstance()->ClearScreen();
		WriteManager::GetInstance()->SwapBuffer();
	
	}*/

	bool is_enter = false;
	while (!GameManager::GetInstance()->IsGameEnd()) // 게임 메인 루프
	{ 
		_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); // 메모리 누수 검사

		GameManager::GetInstance()->tick();
		SceneManager::GetInstance()->displayCurrentScene(); // 현재 층 정보 출력

		//ScriptManager::GetInstance()->ClearScreen();
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::TITLE, "붉은 방", 0, TEXT_COLOR_TYPE::WHITE, BACKGROUND_COLOR_TYPE::RED));
		FMessageParam MessageParam;
		MessageParam.TargetLayout = LAYOUT_TYPE::STAT;
		MessageParam.Message = "최강노루";
		MessageParam.LineIndex = 0;
		MessageParam.TextColor = TEXT_COLOR_TYPE::WHITE;
		MessageParam.BackGroundColor = BACKGROUND_COLOR_TYPE::BLACK;
		MessageParam.bDeleteLine = false;

		// 플레이어 스테이터스!
		WriteManager::GetInstance()->AddLine(MessageParam);
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STAT, "HP       : 100  / 100", 1, TEXT_COLOR_TYPE::GREEN));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STAT, "EXP      : 1200 / 3000", 2, TEXT_COLOR_TYPE::SKY));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STAT, "ATK/SKD  : 10   /   5", 3, TEXT_COLOR_TYPE::RED));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STAT, "SDE/DEF  : 5%   /   8", 4, TEXT_COLOR_TYPE::BLUE_INENSITY));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::STAT, "LUK      : 10%", 5, TEXT_COLOR_TYPE::ORANGE));

		// 층 표시!
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "06 [ψ]", 0, TEXT_COLOR_TYPE::GRAY));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "05 [δ]", 1, TEXT_COLOR_TYPE::GRAY));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "04 [θ]", 2, TEXT_COLOR_TYPE::GRAY));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "03 [ξ]", 3, TEXT_COLOR_TYPE::GRAY));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "02 [π]", 4, TEXT_COLOR_TYPE::GRAY));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::MAP, "01 [χ]", 5, TEXT_COLOR_TYPE::RED));

		// 스토리
		SceneManager::GetInstance()->moveToNextFloor(); // 다음 층으로 이동
		
		// 선택지
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "[1. 기본 공격]", 0, TEXT_COLOR_TYPE::ORANGE));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "[2. 스킬]", 1, TEXT_COLOR_TYPE::ORANGE));
		WriteManager::GetInstance()->AddLine(FMessageParam(LAYOUT_TYPE::SELECT, "[3. 아이템]", 2, TEXT_COLOR_TYPE::ORANGE));

		GameManager::GetInstance()->render();
	}
	return 0;
}