Click here to Skip to main content
15,892,965 members
Articles / Desktop Programming / MFC

State Pattern in C++ Applications

Rate me:
Please Sign up or sign in to vote.
4.68/5 (31 votes)
13 Sep 20014 min read 178.8K   2.6K   85  
Small game framework based on the state pattern
// GameManager.cpp: implementation of the CGameManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GameState.h"
#include "StatePattern_Game.h"
#include "GameManager.h"
#include "IntroductionState.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGameManager::CGameManager()
{
	m_pGameState = NULL;

	// by default, we start with the introduction mode...
	ChangeState( CIntroductionState::Instance() );
}

CGameManager::~CGameManager()
{
}

void CGameManager::ChangeState(CGameState * pState)
{
	ASSERT(pState);
	if ( pState != m_pGameState )
	{
		m_pGameState = pState;
		m_pGameState->Init();
	}
}

void CGameManager::ProcessKeyboardEvent(char nKey)
{
	ASSERT(m_pGameState);
	m_pGameState->KeyboardEvent(this, nKey);
}

void CGameManager::Update()
{
	ASSERT(m_pGameState);
	m_pGameState->Update(this);
}

void CGameManager::Draw(CDC * pDC)
{
	ASSERT(m_pGameState);
	m_pGameState->Draw(this, pDC);
}

void CGameManager::SetRect(CRect & rect)
{
	ASSERT(m_pGameState);
	CGameState::m_Rect = rect;
	m_pGameState->Resize();
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


Written By
Web Developer
Canada Canada
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions