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

📄 blockmenuview.cpp

📁 用VC在BREW平台上开发的手机游戏Superball的源代码
💻 CPP
字号:
#include "blockmenuview.h"
#include "blockarbiter.h"
#include "blockdata.h"
#include "superball_res.h"
#include "AEEDisp.h "

static const uint16 bg[] = 
{
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};

BlockMenuView::BlockMenuView(BlockApp *app) : AppView((AEEApplet *)app)
{		
}

BlockMenuView::~BlockMenuView()
{
	if(m_pg)
		IGRAPHICS_Release(m_pg);
	delete m_mgrm;
}

AppResult BlockMenuView::Open()
{
	int i;

	cx = GetBlockData()->scrWidth/2;
	cy = GetBlockData()->scrHeight/2;
	if(GetBlockData()->scrWidth <= GetBlockData()->scrHeight - 14)
	{
		bigcircle_r = GetBlockData()->scrWidth/2;
		if(GetBlockData()->scrWidth/5 > 25)
			smallcircle_r = 25;
		else
			smallcircle_r = GetBlockData()->scrWidth/5; 
	}
	else
	{
		bigcircle_r = GetBlockData()->scrHeight/2 - 7;
		if((GetBlockData()->scrHeight-14)/5 > 25)
			smallcircle_r = 25;
		else
			smallcircle_r = (GetBlockData()->scrHeight-14)/5;
	}

	m_mgrm = new SpriteMgr((AEEApplet*)m_app);
	m_mgrm->LoadScene(SPRITE_SIZE_16X16, IDI_TILE16, SUPERBALL_RES_FILE, TILE);
	m_mgrm->RegisterTile(1);
	m_map.SetManager(m_mgrm);
	m_map.RegisterProperty((uint16*)bg, 0, 0, MAP_SIZE_16, MAP_SIZE_16, TILE_SIZE_16X16);
	m_mgrm->LoadScene(SPRITE_SIZE_16X16, IDS_MENU, SUPERBALL_RES_FILE, SPRITE);
	m_mgrm->RegisterSprite(11);
	m_smm[10].SetManager(m_mgrm);
	m_smm[10].RegisterProperty(GetBlockData()->scrWidth/2-8 , GetBlockData()->scrHeight/2-8, 0, 3, SPRITE_SIZE_16X16);
	for(i = 0; i < 10; i++)
		m_smm[i].SetManager(m_mgrm);
	for(i = 0; i <= 10; i = i+10)
	{
		m_smm[0].RegisterProperty(cx-15 , cy-8, 1+i, 2, SPRITE_SIZE_16X16);
		m_smm[1].RegisterProperty(cx+3 , cy-8, 2+i, 2, SPRITE_SIZE_16X16);
		m_smm[2].RegisterProperty(cx-18 , cy+30, 3+i, 2, SPRITE_SIZE_16X16);
		m_smm[3].RegisterProperty(cx+8 , cy+30, 4+i, 2, SPRITE_SIZE_16X16);
		m_smm[4].RegisterProperty(cx-18 , cy-43, 5+i, 2, SPRITE_SIZE_16X16);
		m_smm[5].RegisterProperty(cx+8 , cy-43, 6+i, 2, SPRITE_SIZE_16X16);
		m_smm[6].RegisterProperty(cx-40 , cy-24, 7+i, 2, SPRITE_SIZE_16X16);
		m_smm[7].RegisterProperty(cx-40 , cy+11, 8+i, 2, SPRITE_SIZE_16X16);
		m_smm[8].RegisterProperty(cx+29 , cy-24, 9+i, 2, SPRITE_SIZE_16X16);
		m_smm[9].RegisterProperty(cx+29 , cy+11, 10+i, 2, SPRITE_SIZE_16X16);
	}
	m_mgrm->RenderScene();
	

	ISHELL_CreateInstance(m_app->m_pIShell, AEECLSID_GRAPHICS, (void**)&m_pg);
	IGRAPHICS_SetFillMode(m_pg, false);

	IGRAPHICS_SetColor(m_pg, 255, 255, 255, 0);
	
	m_active = 0;
	m_RorG = true;

	return SUCCESS;
}

AppResult BlockMenuView::Close()
{
	IGRAPHICS_Release(m_pg);
	m_pg = NULL;
	if(m_mgrm)
		delete m_mgrm;
	m_mgrm = NULL;
	
	return SUCCESS;
}

AppResult BlockMenuView::Update()
{
	m_RorG = !m_RorG;
	m_smm[m_active*2].ModifyStripIndex(m_active*2+1+(m_RorG ? 10 : 0));
	m_smm[m_active*2+1].ModifyStripIndex(m_active*2+2+(m_RorG ? 10 : 0));
	m_mgrm->RenderScene();

	circle.cx = cx;
	circle.cy = cy;
	circle.r = bigcircle_r-3;
	IGRAPHICS_DrawCircle(m_pg, &circle);
	circle.r = bigcircle_r-2;
	IGRAPHICS_DrawCircle(m_pg, &circle);
	circle.r = bigcircle_r-1;
	IGRAPHICS_DrawCircle(m_pg, &circle);
	circle.r = smallcircle_r;
	IGRAPHICS_DrawCircle(m_pg, &circle);
	circle.r = smallcircle_r-1;
	IGRAPHICS_DrawCircle(m_pg, &circle);
	circle.r = smallcircle_r+1;
	IGRAPHICS_DrawCircle(m_pg, &circle);
		
	line.sx = cx - bigcircle_r*707/1000;
	line.sy = cy - bigcircle_r*707/1000;
	line.ex = cx - bigcircle_r*707/2500;
	line.ey = cy - bigcircle_r*707/2500;
    IGRAPHICS_DrawLine(m_pg, &line);
	line.sx = cx + bigcircle_r*707/1000;
	line.sy = cy - bigcircle_r*707/1000;
	line.ex = cx + bigcircle_r*707/2500;
	line.ey = cy - bigcircle_r*707/2500;
    IGRAPHICS_DrawLine(m_pg, &line);
	line.sx = cx - bigcircle_r*707/1000;
	line.sy = cy + bigcircle_r*707/1000;
	line.ex = cx - bigcircle_r*707/2500;
	line.ey = cy + bigcircle_r*707/2500;
    IGRAPHICS_DrawLine(m_pg, &line);
	line.sx = cx + bigcircle_r*707/1000;
	line.sy = cy + bigcircle_r*707/1000;
	line.ex = cx + bigcircle_r*707/2500;
	line.ey = cy + bigcircle_r*707/2500;
    IGRAPHICS_DrawLine(m_pg, &line);
   
	return SUCCESS;
}

AppResult BlockMenuView::Enable()
{
	return SUCCESS;
}

AppResult BlockMenuView::Disable()
{
	return SUCCESS;
}


ETStatus BlockMenuView::HandleKeyEvent(AEEEvent  evtCode, uint16  param16, uint32  param32)
{
	switch(evtCode)
	{
		case EVT_KEY/*_PRESS*/:
		switch(param16)
		{
		case AVK_LEFT:
			if(m_active <= 2)
			{
				m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
				m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
				m_active = 3;
				m_smm[10].MoveToPos(cx-40, cy-8);
			}
			else if(m_active == 4)
			{
				m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
				m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
				m_active = 0;
				m_smm[10].MoveToPos(cx-8, cy-8);
			}
			return ET_PROCESSED;
		case AVK_RIGHT:
			if(m_active <= 2)
			{
				m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
				m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
				m_active = 4;
				m_smm[10].MoveToPos(cx+28, cy-8);
			}
			else if(m_active == 3)
			{
				m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
				m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
				m_active = 0;
				m_smm[10].MoveToPos(cx-8, cy-8);
			}
			return ET_PROCESSED;
		case AVK_UP:
			if(m_active == 0 || m_active >= 3)
			{
				m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
				m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
				m_active = 2;
				m_smm[10].MoveToPos(cx-8, cy-40);
			}
			else if(m_active == 1)
			{
				m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
				m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
				m_active = 0;
				m_smm[10].MoveToPos(cx-8, cy-8);
			}
			return ET_PROCESSED;

		case AVK_DOWN:
			if(m_active == 0 || m_active>=3)
			{
				m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
				m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
				m_active = 1;
				m_smm[10].MoveToPos(cx-8, cy+28);

			}

			else if(m_active == 2)
			{
				m_smm[2*m_active].ModifyStripIndex(2*m_active+11);
				m_smm[2*m_active+1].ModifyStripIndex(2*m_active+12);
				m_active = 0;
				m_smm[10].MoveToPos(cx-8, cy-8);
			}
			return ET_PROCESSED;

		case AVK_SELECT:
			switch(m_active)
			{		    
			case 0:  m_arbiter->Arbit(IDW_GAME);				   return ET_PROCESSED;
			case 1:  
			    	ISHELL_CloseApplet(m_app->m_pIShell, FALSE);  
			    	return ET_PROCESSED;
			case 2:  m_arbiter->Arbit(IDW_SCORE);			       return ET_PROCESSED;
			case 3:  m_arbiter->Arbit(IDW_HELP);				   return ET_PROCESSED;
			case 4:  m_arbiter->Arbit(IDW_ABOUT);				   return ET_PROCESSED;
			default: break;
			}
		default:
			break;
		}
	default:
		break;
		
    }
	return AppView::HandleKeyEvent(evtCode,param16,param32);
}


ETStatus BlockMenuView::HandleUserEvent(AEEEvent  evtCode, uint16  param16, uint32  param32)
{
	switch(evtCode)
	{
	case EVT_USER_TIMER:
		if(param16 == 1)
		{
			Update();
			return ET_PROCESSED;
		}
	default:
		break;
    }

	return AppView::HandleUserEvent(evtCode,param16,param32);
}

⌨️ 快捷键说明

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