#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
//////////////////////////////////////////////////////////////////////////
class GameLevel
{
public:
static GameLevel* CreateInstance() { return 0; }
virtual void SimpleAttack() = 0;
protected:
GameLevel() {}
};
//////////////////////////////////////////////////////////////////////////
class Gamelevel0 : public GameLevel
{
public:
static GameLevel* CreateInstance()
{
if(pInstance == 0) pInstance = new Gamelevel0();
return pInstance;
}
void SimpleAttack() { cout << "Level0 Simple Attack" << endl; }
protected:
Gamelevel0() {}
private:
static Gamelevel0 *pInstance;
};
Gamelevel0* Gamelevel0::pInstance = 0;
//////////////////////////////////////////////////////////////////////////
class Gamelevel1 : public GameLevel
{
public:
static GameLevel* CreateInstance()
{
if(pInstance == 0) pInstance = new Gamelevel1();
return pInstance;
}
void SimpleAttack() { cout << "Level1 Simple Attack" << endl; }
protected:
Gamelevel1() {}
private:
static Gamelevel1 *pInstance;
};
Gamelevel1* Gamelevel1::pInstance = 0;
//////////////////////////////////////////////////////////////////////////
class GamePlayer
{
public:
GamePlayer()
{
pGameLevel = Gamelevel0::CreateInstance();
}
void UpgradeLevel(GameLevel* pLevel)
{
pGameLevel = pLevel;
}
void SimpleAttack()
{
pGameLevel->SimpleAttack();
}
private:
GameLevel* pGameLevel;
};
//////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
GamePlayer user1;
user1.SimpleAttack();
cout << "------------------------------------------" << endl;
GameLevel* pGameLevel1 = Gamelevel1::CreateInstance();
user1.UpgradeLevel(pGameLevel1);
user1.SimpleAttack();
return 0;
}