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

📄 iplay.c

📁 brew3.1做的挖雷游戏
💻 C
字号:
#include "IPlay.h"
#include "Winmine.bid"
#include "AEEAppGen.h"
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
#define MOVE_STEP  10

static void IMINEPLAY_TimerHdl(IMinePlay* pCtl);
static void IMINEPLAY_InitImage(IMinePlay* pCtl);
static void IMINEPLAY_FreeImage(IMinePlay* pCtl);

static void IMINEPLAY_Draw(IMinePlay* pCtl,AEERect* rt);
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
IMinePlay* IMINEPLAY_CreateInstance(AEERect *rt)
{
	AEEApplet* pApp=(AEEApplet*)GETAPPINSTANCE();
	IMinePlay* p=NULL;
	IFileMgr*	pMgr=NULL;
	TVedioElement* pName;
	FileInfo	Info;
	
	if(NULL==rt||NULL==pApp) return NULL;
	p=MALLOCREC(IMinePlay);
	if(p)
	{
		p->m_rt=*rt;
		p->m_pImage=NULL;
		p->m_pIDisplay=pApp->m_pIDisplay;
		p->m_pIShell=pApp->m_pIShell;
		p->m_pNameList=NULL;
		p->m_ListSize=0;
		
		if (SUCCESS==ISHELL_CreateInstance(p->m_pIShell, AEECLSID_FILEMGR, (void **)&pMgr))
		{
			if(SUCCESS==IFILEMGR_EnumInit(pMgr,"image",FALSE))
			{
				while(IFILEMGR_EnumNext(pMgr, &Info))
				{
					pName=MALLOCREC(TVedioElement);
					if(pName)
					{
						pName->m_pData=STRDUP(Info.szName);
						pName->m_pNext=p->m_pNameList;
						p->m_pNameList=pName;
						p->m_ListSize++;
					}
				}
			}
			IFILEMGR_Release(pMgr);
		}		
	}
	return p;
}
boolean	IMINEPLAY_Release(IMinePlay* pCtl)
{
	TVedioElement* p;
	if(pCtl)
	{
		IMINEPLAY_FreeImage(pCtl);

		p=pCtl->m_pNameList;
		while(p)
		{
			pCtl->m_pNameList=p->m_pNext;
			FREEIF(p->m_pData);
			FREE(p);
			p=pCtl->m_pNameList;
		}
		FREEIF(pCtl);
	}
	return TRUE;
}
boolean	IMINEPLAY_Start(IMinePlay* pCtl)
{
	if(!pCtl) return FALSE;
	IMINEPLAY_FreeImage(pCtl);
	IMINEPLAY_InitImage(pCtl);
	pCtl->m_ShowPoint=MOVE_STEP;
	IMINEPLAY_TimerHdl(pCtl);
	return TRUE;
}	
boolean	IMINEPLAY_Stop(IMinePlay* pCtl)
{
	if(!pCtl) return FALSE;
	IMINEPLAY_FreeImage(pCtl);
	return TRUE;
}	
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
static void IMINEPLAY_TimerHdl(IMinePlay* pCtl)
{
	AEERect rt;
	int32 sec;
	pCtl->m_ShowPoint--;
	ISHELL_CancelTimer(pCtl->m_pIShell,(PFNNOTIFY) IMINEPLAY_TimerHdl, pCtl);		
	
	if(pCtl->m_ShowPoint<0)
	{
		if(pCtl->m_pImage)
		{
			IIMAGE_Release(pCtl->m_pImage);
			pCtl->m_pImage=NULL;
		}		
		ISHELL_PostEvent(pCtl->m_pIShell, AEECLSID_WINMINE, EVT_USER, CMD_RESTART, (uint32) 0);
		return;
	}
	rt.dx=pCtl->m_rt.dx*(MOVE_STEP-pCtl->m_ShowPoint)/MOVE_STEP;
	rt.dy=pCtl->m_rt.dy*(MOVE_STEP-pCtl->m_ShowPoint)/MOVE_STEP;
	rt.x=pCtl->m_rt.x+(pCtl->m_rt.dx-rt.dx)/2;
	rt.y=pCtl->m_rt.y+(pCtl->m_rt.dy-rt.dy)/2;	
	IMINEPLAY_Draw(pCtl,&rt);
	
	sec=((0==pCtl->m_ShowPoint)?800:200);
	ISHELL_SetTimer(pCtl->m_pIShell,sec,(PFNNOTIFY) IMINEPLAY_TimerHdl, pCtl);					
}
static void IMINEPLAY_InitImage(IMinePlay* pCtl)
{
	char* pName=NULL;
	byte   data;
	AEEImageInfo  pi;

	TVedioElement* pp=pCtl->m_pNameList;
	
	if(1==pCtl->m_ListSize)
		pName=pp->m_pData;
	else if(pCtl->m_ListSize>1)
	{
		GETRAND(&data,1);
		data=pCtl->m_ListSize*data/256;
		while((data--)>0)
			pp=pp->m_pNext;
		pName=pp->m_pData;
	}
	if(pName)
		pCtl->m_pImage=ISHELL_LoadImage(pCtl->m_pIShell,pName);
	if(pCtl->m_pImage)
	{
		IIMAGE_GetInfo(pCtl->m_pImage,&pi);
		pCtl->m_Imagedx=pi.cx;
		pCtl->m_Imagedy=pi.cy;		
	}
}
static void IMINEPLAY_FreeImage(IMinePlay* pCtl)
{
	ISHELL_CancelTimer(pCtl->m_pIShell,(PFNNOTIFY)IMINEPLAY_TimerHdl, pCtl);		
	if(pCtl->m_pImage)
	{
		IIMAGE_Release(pCtl->m_pImage);
		pCtl->m_pImage=NULL;
	}	
}
static void IMINEPLAY_Draw(IMinePlay* pCtl,AEERect* rt)
{
	AEERect rect;
	int offsetx=0;
	int offsety=0;
	int x=rt->x;
	int y=rt->y;
	int dx=rt->dx;
	int dy=rt->dy;
	
	if(!pCtl->m_pImage) return;
	
	if(pCtl->m_Imagedx<rt->dx)
	{
		dx=pCtl->m_Imagedx;
		x=rt->x+(rt->dx-pCtl->m_Imagedx)/2;
	}
	else
		offsetx=(pCtl->m_Imagedx-rt->dx)/2;
	
	if(pCtl->m_Imagedy<rt->dy)
	{
		dy=pCtl->m_Imagedy;
		y=rt->y+(rt->dy-pCtl->m_Imagedy)/2;
	}
	else
		offsety=(pCtl->m_Imagedy-rt->dy)/2;
	rect.x=x;
	rect.y=y;
	rect.dx=dx;
	rect.dy=dy;
	IIMAGE_SetParm(pCtl->m_pImage, IPARM_OFFSET,offsetx,offsety);	
	IIMAGE_SetParm(pCtl->m_pImage, IPARM_SIZE,dx,dy);	
	IIMAGE_Draw(pCtl->m_pImage,x,y);	
	IDISPLAY_FrameRect(pCtl->m_pIDisplay,&rect);
	IDISPLAY_Update(pCtl->m_pIDisplay);
}

⌨️ 快捷键说明

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