Winmine.c
资源名称:brewmine3.rar [点击查看]
上传用户:yulinhuamu
上传日期:2009-12-26
资源大小:7287k
文件大小:13k
源码类别:
BREW编程
开发平台:
Visual C++
- /*===========================================================================
- FILE: Winmine.c
- ===========================================================================*/
- /*===============================================================================
- INCLUDES AND VARIABLE DEFINITIONS
- =============================================================================== */
- #include "AEEModGen.h" // Module interface definitions
- #include "AEEAppGen.h" // Applet interface definitions
- #include "AEEShell.h" // Shell interface definitions
- #include "Winmine.bid"
- #include "mine.h"
- #include "IPlay.h"
- #include "ISnowMenu.h"
- /*-------------------------------------------------------------------
- Applet structure. All variables in here are reference via "pMe->"
- -------------------------------------------------------------------*/
- // create an applet structure that's passed around. All variables in
- // here will be able to be referenced as static.
- typedef enum
- {
- STATE_NOTHING,
- STATE_MENU,
- STATE_VEDIO,
- STATE_MINE,
- STATE_SCORE
- }TMineState;
- typedef struct _Winmine {
- AEEApplet a ; // First element of this structure must be AEEApplet
- AEEDeviceInfo DeviceInfo; // always have access to the hardware device information
- IDisplay *pIDisplay; // give a standard way to access the Display interface
- IShell *pIShell; // give a standard way to access the Shell interface
- // add your own variables here...
- IWinmine* m_pMine;
- IMinePlay* m_Play;
- ISnowMenu* m_pSnowMenu;
- TMineState m_State;
- } Winmine;
- /*-------------------------------------------------------------------
- Function Prototypes
- -------------------------------------------------------------------*/
- static boolean Winmine_HandleEvent(Winmine* pMe, AEEEvent eCode,
- uint16 wParam, uint32 dwParam);
- boolean Winmine_InitAppData(Winmine* pMe);
- void Winmine_FreeAppData(Winmine* pMe);
- static void Winmine_Number2WSTR(int n,AECHAR* p,int nSize);
- static void Winmine_DrawScore(Winmine* pMe);
- /*===============================================================================
- FUNCTION DEFINITIONS
- =============================================================================== */
- /*===========================================================================
- FUNCTION: AEEClsCreateInstance
- DESCRIPTION
- This function is invoked while the app is being loaded. All Modules must provide this
- function. Ensure to retain the same name and parameters for this function.
- In here, the module must verify the ClassID and then invoke the AEEApplet_New() function
- that has been provided in AEEAppGen.c.
- After invoking AEEApplet_New(), this function can do app specific initialization. In this
- example, a generic structure is provided so that app developers need not change app specific
- initialization section every time except for a call to IDisplay_InitAppData().
- This is done as follows: InitAppData() is called to initialize AppletData
- instance. It is app developers responsibility to fill-in app data initialization
- code of InitAppData(). App developer is also responsible to release memory
- allocated for data contained in AppletData -- this can be done in
- IDisplay_FreeAppData().
- PROTOTYPE:
- int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
- PARAMETERS:
- clsID: [in]: Specifies the ClassID of the applet which is being loaded
- pIShell: [in]: Contains pointer to the IShell object.
- pIModule: pin]: Contains pointer to the IModule object to the current module to which
- this app belongs
- ppObj: [out]: On return, *ppObj must point to a valid IApplet structure. Allocation
- of memory for this structure and initializing the base data members is done by AEEApplet_New().
- DEPENDENCIES
- none
- RETURN VALUE
- AEE_SUCCESS: If the app needs to be loaded and if AEEApplet_New() invocation was
- successful
- EFAILED: If the app does not need to be loaded or if errors occurred in
- AEEApplet_New(). If this function returns FALSE, the app will not be loaded.
- SIDE EFFECTS
- none
- ===========================================================================*/
- int AEEClsCreateInstance(AEECLSID ClsId, IShell *pIShell, IModule *po, void **ppObj)
- {
- *ppObj = NULL;
- if( ClsId == AEECLSID_WINMINE )
- {
- // Create the applet and make room for the applet structure
- if( AEEApplet_New(sizeof(Winmine),
- ClsId,
- pIShell,
- po,
- (IApplet**)ppObj,
- (AEEHANDLER)Winmine_HandleEvent,
- (PFNFREEAPPDATA)Winmine_FreeAppData) ) // the FreeAppData function is called after sending EVT_APP_STOP to the HandleEvent function
- {
- //Initialize applet data, this is called before sending EVT_APP_START
- // to the HandleEvent function
- if(Winmine_InitAppData((Winmine*)*ppObj))
- {
- //Data initialized successfully
- return(AEE_SUCCESS);
- }
- else
- {
- //Release the applet. This will free the memory allocated for the applet when
- // AEEApplet_New was called.
- IAPPLET_Release((IApplet*)*ppObj);
- return EFAILED;
- }
- } // end AEEApplet_New
- }
- return(EFAILED);
- }
- /*===========================================================================
- FUNCTION SampleAppWizard_HandleEvent
- DESCRIPTION
- This is the EventHandler for this app. All events to this app are handled in this
- function. All APPs must supply an Event Handler.
- PROTOTYPE:
- boolean SampleAppWizard_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
- PARAMETERS:
- pi: Pointer to the AEEApplet structure. This structure contains information specific
- to this applet. It was initialized during the AEEClsCreateInstance() function.
- ecode: Specifies the Event sent to this applet
- wParam, dwParam: Event specific data.
- DEPENDENCIES
- none
- RETURN VALUE
- TRUE: If the app has processed the event
- FALSE: If the app did not process the event
- SIDE EFFECTS
- none
- ===========================================================================*/
- static boolean Winmine_HandleEvent(Winmine* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
- {
- DBGPRINTF("--------------------->>>>>>>%d",eCode);
- switch (eCode)
- {
- // App is told it is starting up
- case EVT_APP_START:
- IWINMINE_DrawIntroScreen(pMe->m_pMine);
- if(!ISNOWMENU_Start(pMe->m_pSnowMenu))
- {
- pMe->m_State=STATE_MINE;
- IWINMINE_Start(pMe->m_pMine);
- }
- else
- pMe->m_State=STATE_MENU;
- return(TRUE);
- // App is told it is exiting
- case EVT_APP_STOP:
- // Add your code here...
- return(TRUE);
- // App is being suspended
- case EVT_APP_SUSPEND:
- pMe->m_State=STATE_NOTHING;
- IWINMINE_Pause(pMe->m_pMine);
- IMINEPLAY_Stop(pMe->m_Play);
- ISNOWMENU_Stop (pMe->m_pSnowMenu);
- return(TRUE);
- // App is being resumed
- case EVT_APP_RESUME:
- pMe->m_State=STATE_MINE;
- IWINMINE_Start(pMe->m_pMine);
- return(TRUE);
- // An SMS message has arrived for this app. Message is in the dwParam above as (char *)
- // sender simply uses this format "//BREW:ClassId:Message", example //BREW:0x00000001:Hello World
- case EVT_APP_MESSAGE:
- // Add your code here...
- return(TRUE);
- case EVT_APP_NO_SLEEP:
- if(STATE_MENU==pMe->m_State)
- return TRUE;
- else
- return FALSE;
- // A key was pressed. Look at the wParam above to see which key was pressed. The key
- // codes are in AEEVCodes.h. Example "AVK_1" means that the "1" key was pressed.
- case EVT_KEY:
- switch(pMe->m_State)
- {
- case STATE_MENU:
- return ISNOWMENU_HandleKeyEvent(pMe->m_pSnowMenu,wParam);
- case STATE_VEDIO:
- if(AVK_SOFT1==wParam)
- IMINEPLAY_Start(pMe->m_Play);
- break;
- case STATE_SCORE:
- if(!ISNOWMENU_Start(pMe->m_pSnowMenu))
- {
- pMe->m_State=STATE_NOTHING;
- return FALSE;
- }
- else
- pMe->m_State=STATE_MENU;
- break;
- case STATE_MINE:
- if(AVK_SOFT1==wParam)
- {
- IWINMINE_Pause(pMe->m_pMine);
- if(IMINEPLAY_Start(pMe->m_Play))
- {
- pMe->m_State=STATE_VEDIO;
- }
- else
- pMe->m_State=STATE_NOTHING;
- }
- else
- {
- boolean ret=IWINMINE_HandleEvent(pMe->m_pMine,wParam);
- if((FALSE==ret)&&(AVK_CLR==wParam||AVK_SOFT2==wParam))
- {
- IWINMINE_Pause(pMe->m_pMine);
- if(!ISNOWMENU_Start(pMe->m_pSnowMenu))
- {
- pMe->m_State=STATE_NOTHING;
- return FALSE;
- }
- else
- pMe->m_State=STATE_MENU;
- }
- }
- break;
- default:
- return FALSE;
- }
- return TRUE;
- // If nothing fits up to this point then we'll just break out
- case EVT_USER:
- switch(wParam)
- {
- case CMD_MENUSCORE:
- pMe->m_State=STATE_SCORE;
- Winmine_DrawScore(pMe);
- break;
- case CMD_MENUEXIT:
- pMe->m_State=STATE_NOTHING;
- ISHELL_CloseApplet(pMe->pIShell,FALSE);
- break;
- case CMD_MENUSTART:
- case CMD_RESTART:
- pMe->m_State=STATE_MINE;
- IWINMINE_Start(pMe->m_pMine);
- }
- return TRUE;
- default:
- break;
- }
- return FALSE;
- }
- // this function is called when your application is starting up
- boolean Winmine_InitAppData(Winmine* pMe)
- {
- AEERect rt;
- // Get the device information for this handset.
- // Reference all the data by looking at the pMe->DeviceInfo structure
- // Check the API reference guide for all the handy device info you can get
- pMe->DeviceInfo.wStructSize = sizeof(pMe->DeviceInfo);
- ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->DeviceInfo);
- // The display and shell interfaces are always created by
- // default, so we'll asign them so that you can access
- // them via the standard "pMe->" without the "a."
- pMe->pIDisplay = pMe->a.m_pIDisplay;
- pMe->pIShell = pMe->a.m_pIShell;
- // Insert your code here for initializing or allocating resources...
- pMe->m_pMine=IWINMINE_CreateInstance();
- if(!pMe->m_pMine)
- return FALSE;
- IWINMINE_GetPlayRect(pMe->m_pMine,&rt);
- rt.x+=2;
- rt.y+=2;
- rt.dx-=4;
- rt.dy-=4;
- pMe->m_Play=IMINEPLAY_CreateInstance(&rt);
- pMe->m_pSnowMenu=ISNOWMENU_CreateInstance();
- pMe->m_State=STATE_NOTHING;
- // if there have been no failures up to this point then return success
- return TRUE;
- }
- // this function is called when your application is exiting
- void Winmine_FreeAppData(Winmine* pMe)
- {
- pMe->m_State=STATE_NOTHING;
- if(pMe->m_pMine)
- {
- IWINMINE_Release(pMe->m_pMine);
- pMe->m_pMine=NULL;
- }
- if(pMe->m_Play)
- {
- IMINEPLAY_Release(pMe->m_Play);
- pMe->m_Play=NULL;
- }
- if(pMe->m_pSnowMenu)
- {
- ISNOWMENU_Release(pMe->m_pSnowMenu);
- pMe->m_pSnowMenu=NULL;
- }
- }
- static void Winmine_Number2WSTR(int n,AECHAR* p,int nSize)
- {
- char q[16];
- SPRINTF(q,"%d",n);
- MEMSET((char*)p,0,nSize);
- STRTOWSTR(q,p,nSize);
- }
- static void Winmine_DrawScore(Winmine* pMe)
- {
- TScore score;
- AEERect rt;
- int x,y,z;
- AECHAR wBuf[16];
- IImage* pImage;
- AEEImageInfo info;
- RGBVAL col;
- uint32 flag=IDF_ALIGN_LEFT|IDF_ALIGN_TOP|IDF_TEXT_TRANSPARENT;
- //get data
- if(SUCCESS!=ISHELL_GetAppPrefs(pMe->pIShell,1,&score,sizeof(TScore)))
- return;
- //background
- pImage=ISHELL_LoadImage(pMe->pIShell,"menuimg/score.bmp");
- if(!pImage)
- return;
- IIMAGE_GetInfo(pImage,&info);
- x=(pMe->DeviceInfo.cxScreen-info.cx)/2;
- y=(pMe->DeviceInfo.cyScreen-info.cy)/3;
- IIMAGE_Draw(pImage,x,y);
- IIMAGE_Release(pImage);
- //showdata
- col= IDISPLAY_SetColor(pMe->pIDisplay,CLR_USER_TEXT,MAKE_RGB(10,255,0));
- z=2*IDISPLAY_GetFontMetrics(pMe->pIDisplay,AEE_FONT_BOLD,NULL,NULL);
- //score
- rt.x=x+info.cx/2;
- rt.y=y+info.cy/3;
- rt.dy=z;
- rt.dx=rt.dy*2;
- Winmine_Number2WSTR(score.m_nScore,wBuf,sizeof(wBuf));
- IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,wBuf,-1,0,0,&rt,flag);
- y+=33*info.cy/48;
- //month
- rt.x=x+info.cx/12;
- rt.y=y;
- rt.dy=z;
- rt.dx=rt.dy*2;
- Winmine_Number2WSTR(score.m_Date.wMonth,wBuf,sizeof(wBuf));
- IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,wBuf,-1,0,0,&rt,flag);
- //day
- rt.x=x+13*info.cx/48;
- rt.y=y;
- rt.dy=z;
- rt.dx=rt.dy*2;
- Winmine_Number2WSTR(score.m_Date.wDay,wBuf,sizeof(wBuf));
- IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,wBuf,-1,0,0,&rt,flag);
- //hour
- rt.x=x+info.cx/2;
- rt.y=y;
- rt.dy=z;
- rt.dx=rt.dy*2;
- Winmine_Number2WSTR(score.m_Date.wHour,wBuf,sizeof(wBuf));
- IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,wBuf,-1,0,0,&rt,flag);
- //minute
- rt.x=x+9*info.cx/12;
- rt.y=y;
- rt.dy=z;
- rt.dx=rt.dy*2;
- Winmine_Number2WSTR(score.m_Date.wMinute,wBuf,sizeof(wBuf));
- IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,wBuf,-1,0,0,&rt,flag);
- //update
- IDISPLAY_SetColor(pMe->pIDisplay,CLR_USER_TEXT,col);
- IDISPLAY_Update(pMe->pIDisplay);
- }