📄 pokeapp.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 + -