⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pokeapp.cpp

📁 Brew下的塔罗牌游戏。游戏功能完整
💻 CPP
字号:
// PokeApp.cpp: implementation of the CPokeApp class.
// 代码作者:侯宇
// 创建日期:2004/07/04
//////////////////////////////////////////////////////////////////////
#include "PokeApp.h"
#include "poke.bid"



#define POKE_PREFS_VERSION 1
 
//通用游戏状态定义
#define STATUS_LOGO			1	//LOGO
#define STATUS_MENU			2	//菜单
#define	STATUS_HELP			3	//帮助
#define	STATUS_ABOUT		4	//关于
#define	STATUS_GAME			5	//游戏
#define STATUS_OTHER		6	//其他游戏状态

//"关于"背景颜色
#define BGCOLOR_ABOUT			0xA000A000
#define TEXTCOLOR_ABOUT			0xFFFFFF00
#define TITLECOLOR_ABOUT		0xFFFFFF00



//////////////////////////////////////////////////////////////////////
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
	*ppObj = NULL;

	if(ClsId == AEECLSID_POKE){
		if(AEEApplet_New(sizeof(CPokeApp), ClsId, pIShell,po,(IApplet**)ppObj,
			(AEEHANDLER)CPokeApp::HandleEvent,(PFNFREEAPPDATA)CPokeApp::FreeAppData)
			== TRUE)
		{
			if(CPokeApp::InitAppData((IApplet *)*ppObj))
				return (AEE_SUCCESS);
		}
	}
	return (EFAILED);
}

//初始化应用程序数据
boolean CPokeApp::OnInitData()
{
//===========系统生成,请勿修改,开始========
	//使用IShell接口m_pIShell创建类CShell对象
	m_pShell = CShell::FromHandle(m_pIShell, FALSE);
	//使用IDisplay接口m_pIDisplay创建类CDisplay对象
	m_pDisplay = CDisplay::FromHandle(m_pIDisplay, FALSE);
	if(!m_pShell || !m_pDisplay)
		return FALSE;
//===========系统生成,请勿修改,结束========

	m_bSupend = FALSE;
	m_pGameWnd = NULL;

	return TRUE;
}
//释放应用程序资源
void CPokeApp::OnFreeData()
{
	boolean bDiffWnd = FALSE;
	if(m_pGameWnd != m_pPokeGame)
		bDiffWnd = TRUE;
	
	if(m_pGameWnd)
		delete m_pGameWnd;
	if(m_pPokeGame && bDiffWnd)
		delete m_pPokeGame;


//===========系统生成,请勿修改,开始========
	//释放Shell指针
	if(m_pShell)
		delete m_pShell;
	//释放Display指针
	if(m_pDisplay)
		delete m_pDisplay;
//===========系统生成,请勿修改,结束========
}
//处理应用程序消息,事件
boolean CPokeApp::OnEvent(AEEEvent evt, uint16 wParam, uint32 dwParam)
{
	switch (evt)
	{
	case EVT_APP_START:			//开始
		ShowLogo();
		return TRUE;
	case EVT_APP_STOP:			//停止
		return TRUE;
	case EVT_APP_SUSPEND:		//系统中断产生
		m_bSupend = TRUE;
		if(m_pGameWnd)
			m_pGameWnd->Pause();
		return TRUE;
	case EVT_APP_RESUME:		//系统中断结束
		m_bSupend = FALSE;
		if(m_pGameWnd)
			m_pGameWnd->Resume();
		return TRUE;
	case EVT_COMMAND:			//菜单Command消息
		if(m_nGameStatus == STATUS_MENU)
		{
			HandleMenu(wParam);
			return TRUE;
		}
		break;
	case EVT_KEY:				//按键事件
		//不处理AVK_SEND消息
		if(wParam == AVK_SEND)
			return FALSE;

		if(wParam == AVK_CLR)
		{
			switch(m_nGameStatus)
			{
			case STATUS_GAME:
				if(m_pPokeGame)
					m_pPokeGame->Pause();
				ShowMenu(TRUE);
				return TRUE;
			case STATUS_HELP:
			case STATUS_ABOUT:
				ShowMenu(!!m_pPokeGame);
				return TRUE;
			case STATUS_MENU:
			default:
				return FALSE;
			}
		}
		break;
	case EVT_USER_ENDWND:
			ShowMenu(FALSE);
			return TRUE;
	}
	
	if(m_pGameWnd)
		return m_pGameWnd->HandleEvent(evt, wParam, dwParam);
	else
		return FALSE;
}

boolean CPokeApp::HandleMenu(uint16 wParam)
{
	if(m_nGameStatus != STATUS_MENU)
		return FALSE;
	switch(wParam)
	{
	case IDB_MENUITEM_START:	//start game
		if(StartGame(TRUE))
			return TRUE;
		break;
	case IDB_MENUITEM_BACK:		//return to game
		if(StartGame(FALSE))
			return TRUE;
		break;
	case IDB_MENUITEM_ABOUT:	//show about
		if(ShowAbout())
			return TRUE;
		break;
	case IDB_MENUITEM_HELP:		//show help
		if(ShowHelp())
			return TRUE;
		break;
	case IDB_MENUITEM_EXIT:		//exit game
		m_pShell->CloseApplet(FALSE);
		return TRUE;
	default:
		return FALSE;
	}
	//show menu
	ShowMenu(m_pPokeGame != NULL);

	return TRUE;
}

// 显示Logo界面
void CPokeApp::ShowLogo(void)
{
	m_nGameStatus = STATUS_LOGO;
	if(m_pGameWnd)
		delete m_pGameWnd;
	m_pGameWnd = new CLogo(IDB_LOGO, NULL, 500, clsID);
	if(m_pGameWnd)
	{
		if(!m_pGameWnd->Create(m_pShell, m_pDisplay, POKE_RES_FILE))
		{
			delete m_pGameWnd;
			m_pGameWnd = NULL;
		}
	}
}

//显示菜单
void CPokeApp::ShowMenu(boolean bHasReturn)
{
	m_nGameStatus = STATUS_MENU;
	if(m_pGameWnd && m_pGameWnd != m_pPokeGame)
	{
		delete m_pGameWnd;
		m_pGameWnd = NULL;
	}

	m_pGameWnd = new CMenu(IDB_MENUBG, IDB_MENU_ICON);
	if(!m_pGameWnd->Create(m_pShell, m_pDisplay, POKE_RES_FILE, FALSE))
	{	
		delete m_pGameWnd;
		m_pGameWnd = NULL;   
		return;
	}

	int nHeight = 88;
	if(bHasReturn)  
		nHeight += 22;
	((CMenu*)m_pGameWnd)->SetMenuRect(40, 25, 65, nHeight);
	//是否有Return Game菜 单项 
	if(bHasReturn)
		((CMenu*)m_pGameWnd)->AddItem(IDB_MENUITEM_BACK, POKE_RES_FILE, IDB_MENUITEM_BACK);
	((CMenu*)m_pGameWnd)->AddItem(IDB_MENUITEM_START, POKE_RES_FILE, IDB_MENUITEM_START);
	((CMenu*)m_pGameWnd)->AddItem(IDB_MENUITEM_HELP, POKE_RES_FILE, IDB_MENUITEM_HELP);
	((CMenu*)m_pGameWnd)->AddItem(IDB_MENUITEM_ABOUT, POKE_RES_FILE, IDB_MENUITEM_ABOUT);
	((CMenu*)m_pGameWnd)->AddItem(IDB_MENUITEM_EXIT, POKE_RES_FILE, IDB_MENUITEM_EXIT);
	//更新
	((CMenu*)m_pGameWnd)->Update(m_pDisplay);
}

boolean CPokeApp::ShowHelp()
{
	m_nGameStatus = STATUS_HELP;	

	if(m_pGameWnd)
		delete m_pGameWnd;
	//new
	m_pGameWnd = new CHelp(m_applet.clsID, -1);
	if(!m_pGameWnd)
		return FALSE;
	//create
	((CHelp*)m_pGameWnd)->SetParam(IDS_HELPTITLE, IDS_HELPTEXT, 3);
	if(!m_pGameWnd->Create(m_pShell, m_pDisplay, POKE_RES_FILE))
	{
		delete m_pGameWnd;
		m_pGameWnd = NULL;
		return FALSE;
	}

	return TRUE;
}

boolean CPokeApp::ShowAbout()
{
	m_nGameStatus = STATUS_ABOUT;

	if(m_pGameWnd)
		delete m_pGameWnd;
	//new
	m_pGameWnd = new CAbout(m_applet.clsID, -1, BGCOLOR_ABOUT, 0, TITLECOLOR_ABOUT);
	if(!m_pGameWnd)
		return FALSE;

	//set param
	((CAbout*)m_pGameWnd)->SetParam(IDS_ABOUTTITLE, IDS_APPNAME, IDS_APPVERSION, IDS_APPTYPE, IDS_APPWEBID, IDS_APPRIGHTID);

	//create
	if(!m_pGameWnd->Create(m_pShell, m_pDisplay, POKE_RES_FILE))
	{
		delete m_pGameWnd;
		m_pGameWnd = NULL;
		return FALSE;
	}

	return TRUE;
}

// 开始游戏
boolean CPokeApp::StartGame(boolean bNew)
{
	//释放先前窗口
	if(m_pGameWnd && m_pGameWnd != m_pPokeGame)
			delete m_pGameWnd;
	//恢复游戏
	if(!bNew && m_pPokeGame)
	{
		m_pGameWnd = m_pPokeGame;
		m_pPokeGame->Resume();
		m_nGameStatus = STATUS_GAME;
	}
	else
	{
		if(m_pPokeGame)
			delete m_pPokeGame;
		m_pPokeGame = NULL;

		m_pPokeGame = new CPokeGame();
		if(!m_pPokeGame)
			return FALSE;
		//Create game
		if(!m_pPokeGame->Create(m_pShell, m_pDisplay))
		{
			delete m_pPokeGame;
			m_pPokeGame = NULL;
			m_pGameWnd = NULL;
			return FALSE;
		}
		//stat game
		m_pPokeGame->Resume();

		m_pGameWnd = (CWnd*)m_pPokeGame;

		m_nGameStatus = STATUS_GAME;
	}
	return TRUE;
}





//////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -