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

📄 ppgameview.cpp

📁 一个点泡泡游戏
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	// 重绘选择框
	m_pBitmap[IDB_SELECT_INDEX]->Draw(m_tSelectPoint.ptNewScreenX, m_tSelectPoint.ptNewScreenY,
										14, 14, 14 * m_nCurSelectIndex, 0);

	// 画表情
	m_pBitmap[IDB_BROW_INDEX]->Draw(100, 95, 25, 24, 25 * m_nBrowIndex, 0);
	m_nBrowIndex = 2;

	// 画得分
	int nScore = m_pDoc->m_tGameScore.nScore;
	int nCount = 0;
	int nIndex = 0;
	while (true)
	{
		int nTempData = nScore % 10;
		nIndex = m_pDoc->GetDataIndex(nTempData);

		Draw(m_pScreen[3], m_pbmDbd[3], 118 - nCount * 6 , 125, 6, 12, nIndex, 0);
		
		nScore = nScore / 10;
		nCount++;
		
		if (nScore == 0)
			break;
	}

	// 画级别
	int nlevel = m_pDoc->m_tGameScore.nLevel;
	nCount = 0;
	nIndex = 0;
	while (true)
	{
		int nTempData = nlevel % 10;
		nIndex = m_pDoc->GetDataIndex(nTempData);
		
		Draw(m_pScreen[3], m_pbmDbd[3], 118 - nCount * 6 , 39, 6, 12, nIndex, 0);
		
		nlevel = nlevel / 10;
		nCount++;
		
		if (nlevel == 0)
			break;
	}

	// 画剩余行数
	int nLine = m_nLines[1];
	nCount = 0;
	nIndex = 0;
	while (true)
	{
		int nTempData = nLine % 10;
		nIndex = m_pDoc->GetDataIndex(nTempData);
		
		Draw(m_pScreen[3], m_pbmDbd[3], 115 - nCount * 6 , 72, 6, 12, nIndex, 0);
		
		nLine = nLine / 10;
		nCount++;
		
		if (nLine == 0)
			break;
	}

	// 画新增钻石
	for (nCol = 0; nCol < m_nCurCol; nCol++)
	{
		Draw(m_pScreen[1], m_pbmDbd[1], (nCol* 10) + 3, 120, 10, 10, m_nNewLine[nCol][1] * 10, 0);

		switch (m_nNewLine[nCol][1])
		{
		case 4:
		case 5:
		case 7:
		case 8:
		case 10:
		case 11:
		case 13:
		case 14:
		case 16:
		case 17:
			m_nNewLine[nCol][1]++;
			break;
		case 6:
		case 9:
		case 12:
		case 15:
		case 18:
			m_nNewLine[nCol][1] = m_nNewLine[nCol][1] - 2;
			break;
		default:
			break;
		}
	}

	SetTimeCount();
}

bool CPPGameView::SetTimer(int32 dwInterval, PFNNOTIFY pfnCallback)
{
	CPPGameApp* pApp = NULL;

	BEGIN_CHECK
	{
		// 取app指针
		CHECK_NULL(pApp, (CPPGameApp*) GETAPPINSTANCE());
		CHECK_ERROR(ISHELL_SetTimerEx(pApp->m_pIShell, dwInterval, &m_cbTimer));
	}
	CATCH_CHECK
	{
		return false;
	}
	END_CHECK

	return true;
}

//void CPPGameView::SetGameViewStatus(bool bViewStatus)
//{
//}

void CPPGameView::InitDemoData()
{
	int nPosX = 0;	// 钻石对应的屏幕横坐标
	int nPosY = 0;	// 钻石对应的屏幕纵坐标

	for (int row = 6; row < DIAMOND_ROW; row++)
	{
		for (int col = 0; col < DIAMOND_COL; col++)
		{
			m_nDiamond[row][col][0] = m_nDemoDiamondType[(row - 6) * DIAMOND_COL + col];

			switch (m_nDiamond[row][col][0])
			{
			case 1:
			case 2:
			case 3:
			case 4:
				m_nDiamond[row][col][1] = m_nDiamond[row][col][0] - 1;
				break;
			case 5:
				m_nDiamond[row][col][1] = 4;
				break;
			case 6:
				m_nDiamond[row][col][1] = 7;
				break;
			case 7:
				m_nDiamond[row][col][1] = 10;
				break;
			case 8:
				m_nDiamond[row][col][1] = 13;
				break;
			case 9:
				m_nDiamond[row][col][1] = 16;
				break;
			}

			nPosX = GetXPosFromColDiamond(col);
			nPosY = GetYPosFromRowDiamond(row);

			Draw(m_pScreen[1], m_pbmDbd[1], nPosX,
					nPosY, 10, 10, m_nDiamond[row][col][1] * 10, 0);
		}
	}
}

void CPPGameView::ExitView(int nViewID)
{
	CPPGameApp* pApp = NULL;

	pApp = (CPPGameApp*) GETAPPINSTANCE();

	// 设置定时器结束标志
	m_pDoc->SetExitTimer(true);

	// 结束定时器
	CALLBACK_Cancel(&m_cbTimer);

	// 释放声音
//	if (m_pISoundPlayer1)
//	{
//		ISOUNDPLAYER_Release(m_pISoundPlayer1);
//		m_pISoundPlayer1 = NULL;
//	}
//	if (m_pISoundPlayer2)
//	{
//		ISOUNDPLAYER_Release(m_pISoundPlayer2);
//		m_pISoundPlayer2 = NULL;
//	}
	if (m_pIMedia1)
	{
		IMEDIA_Release(m_pIMedia1);
		m_pIMedia1 = NULL;
		FREE(m_pSoundBuffer1);
	}
	if (m_pIMedia2)
	{
		IMEDIA_Release(m_pIMedia2);
		m_pIMedia2 = NULL;
		FREE(m_pSoundBuffer2);
	}

    //释放文件
    if (m_pIFileMgr)
    {
        IFILEMGR_Release(m_pIFileMgr);
        m_pIFileMgr = NULL;
    }

    if (m_pIFile)
    {
        IFILE_Release(m_pIFile);
        m_pIFile = NULL;
    }
	
	// 释放位图资源
	if (m_pBitmap[IDB_GAMEBACK_INDEX])
		CUSTOM_RELEASE(m_pBitmap[IDB_GAMEBACK_INDEX]);
	if (m_pBitmap[IDB_DIAMOND_INDEX])
		CUSTOM_RELEASE(m_pBitmap[IDB_DIAMOND_INDEX]);
	CUSTOM_RELEASE(m_pBitmap[IDB_BROW_INDEX]);
	CUSTOM_RELEASE(m_pBitmap[IDB_SELECT_INDEX]);
	if (m_pBitmap[IDB_BLAST_INDEX])
		CUSTOM_RELEASE(m_pBitmap[IDB_BLAST_INDEX]);
	if (m_pBitmap[IDB_DATA_INDEX])
		CUSTOM_RELEASE(m_pBitmap[IDB_DATA_INDEX]);

	CUSTOM_RELEASE(m_pGameMenuBitmap[IDB_GAMEMENUTEXT_INDEX]);
	CUSTOM_RELEASE(m_pGameMenuBitmap[IDB_GAMEMENUBACK_INDEX]);

	// 释放资源
	for (int i = 0; i < 4; i++)
	{
		if (m_pbmDbd[i])
		{
			IBITMAP_Release(m_pbmDbd[i]);
			m_pbmDbd[i] = NULL;
		}

		if (m_pScreen[i])
		{
			IBITMAP_Release(m_pScreen[i]);
			m_pScreen[i] = NULL;
		}
	}

//	if (nViewID != ID_VIEW_STOP)
		m_pDoc->SwitchView(nViewID);
//	else
//		ISHELL_CloseApplet(pApp->m_pIShell, false);

}

int16 CPPGameView::GetSelectXPoint()
{
	return m_tSelectPoint.ptx;
}

int16 CPPGameView::GetSelectYPoint()
{
	return m_tSelectPoint.pty;
}

void CPPGameView::SetSelectYPoint(int nY)
{
	m_tSelectPoint.pty = nY;

	switch(nY)
	{
	case 0:
		m_tSelectPoint.ptNewScreenX = 2;
		break;
	case 1:
		m_tSelectPoint.ptNewScreenX = 12;
		break;
	case 2:
		m_tSelectPoint.ptNewScreenX = 22;
		break;
	case 3:
		m_tSelectPoint.ptNewScreenX = 32;
		break;
	case 4:
		m_tSelectPoint.ptNewScreenX = 42;
		break;
	case 5:
		m_tSelectPoint.ptNewScreenX = 52;
		break;
	case 6:
		m_tSelectPoint.ptNewScreenX = 62;
		break;
	case 7:
		m_tSelectPoint.ptNewScreenX = 72;
		break;
	case 8:
		m_tSelectPoint.ptNewScreenX = 82;
		break;
	case 9:
		m_tSelectPoint.ptNewScreenX = 92;
		break;
	default:
		m_tSelectPoint.ptNewScreenX = 2;
		break;
	}
}

void CPPGameView::SetSelectXPoint(int nX)
{
	m_tSelectPoint.ptx = nX;

	switch(nX)
	{
	case 0:
		m_tSelectPoint.ptNewScreenY = 15;
		break;
	case 1:
		m_tSelectPoint.ptNewScreenY = 25;
		break;
	case 2:
		m_tSelectPoint.ptNewScreenY = 35;
		break;
	case 3:
		m_tSelectPoint.ptNewScreenY = 45;
		break;
	case 4:
		m_tSelectPoint.ptNewScreenY = 55;
		break;
	case 5:
		m_tSelectPoint.ptNewScreenY = 65;
		break;
	case 6:
		m_tSelectPoint.ptNewScreenY = 75;
		break;
	case 7:
		m_tSelectPoint.ptNewScreenY = 85;
		break;
	case 8:
		m_tSelectPoint.ptNewScreenY = 95;
		break;
	case 9:
		m_tSelectPoint.ptNewScreenY = 105;
		break;
	default:
		m_tSelectPoint.ptNewScreenY = 15;
		break;
	}
}

void CPPGameView::GetCoordFromPoint(SELECTPOINT tSelectPoint)
{
}

void CPPGameView::SetSelectMoveSta(boolean bMove)
{
	m_bMoveSelect = bMove;
}

//bool CPPGameView::GetGameViewStatus()
//{
//	return false;
//}

void CPPGameView::InitDiamondData(boolean bDraw/* = true*/)
{
	int nPosX = 0;	// 钻石对应的屏幕横坐标
	int nPosY = 0;	// 钻石对应的屏幕纵坐标

	int nLine = 0;
	if (m_nlevel < 4)
		nLine = 6 - (m_nlevel - 1);
	else
		nLine = 3;

	for (int row = nLine; row < DIAMOND_ROW; row++)
	{
		for (int col = 0; col < DIAMOND_COL; col++)
		{
			int k = GetDiamondType();
			m_nDiamond[row][col][0] = k; //将钻石类形存入数组

			switch (k)
			{
			case 1:
			case 2:
			case 3:
			case 4:
				m_nDiamond[row][col][1] = k - 1;
				break;
			case 5:
				m_nDiamond[row][col][1] = 4;
				break;
			case 6:
				m_nDiamond[row][col][1] = 7;
				break;
			case 7:
				m_nDiamond[row][col][1] = 10;
				break;
			case 8:
				m_nDiamond[row][col][1] = 13;
				break;
			case 9:
				m_nDiamond[row][col][1] = 16;
				break;
			}

			nPosX = GetXPosFromColDiamond(col);
			nPosY = GetYPosFromRowDiamond(row);

			if (bDraw)
			{
				Draw(m_pScreen[1], m_pbmDbd[1], nPosX,
					nPosY, 10, 10, m_nDiamond[row][col][1] * 10, 0);
			}
		}
	}
}

int CPPGameView::GetDiamondType()
{
	int i = 0;
	int j = 0;

	i = RandomData(1, 5);
	j = RandomData(5, 20 * m_nlevel * 12);
//	j = RandomData(5, 2 * m_nlevel * 12);

	if (j == 5 || j == 6 || j == 7 || j == 8 || j == 9)
		return j;
	else
		return i;
}

int CPPGameView::RandomData(unsigned int n1, unsigned int n2)
{
	unsigned int n;

	while (true)
	{
		GETRAND((byte* )&n, sizeof(int));
		n = n % n2;
		if (n >= n1 && n < n2)
			return n;
	}
}

int CPPGameView::GetXPosFromColDiamond(int nCol)
{
	int nPosX = 0;;

	switch(nCol)
	{
	case 0:
		nPosX = 4;
		break;
	case 1:
		nPosX = 14;
		break;
	case 2:
		nPosX = 24;
		break;
	case 3:
		nPosX = 34;
		break;
	case 4:
		nPosX = 44;
		break;
	case 5:
		nPosX = 54;
		break;
	case 6:
		nPosX = 64;
		break;
	case 7:
		nPosX = 74;
		break;
	case 8:
		nPosX = 84;
		break;
	case 9:
		nPosX = 94;
		break;
	default:
		nPosX = 4;
		break;
	}

	return nPosX;
}

int CPPGameView::GetYPosFromRowDiamond(int nRow)
{
	int nPosY = 0;;
	
	switch(nRow)
	{
	case 0:
		nPosY = 17;
		break;
	case 1:
		nPosY = 27;
		break;
	case 2:
		nPosY = 37;
		break;
	case 3:
		nPosY = 47;
		break;
	case 4:
		nPosY = 57;
		break;
	case 5:
		nPosY = 67;
		break;
	case 6:
		nPosY = 77;
		break;
	case 7:
		nPosY = 87;
		break;
	case 8:
		nPosY = 97;
		break;
	case 9:
		nPosY = 107;
		break;
	default:
		nPosY = 17;
		break;
	}
	
	return nPosY;
}

int CPPGameView::GetTimeCount()
{
	return m_nGameTimeCount;
}

void CPPGameView::SetTimeCount()
{
	if (m_nGameTimeCount == 8)
		m_nGameTimeCount = 0;
	else
		m_nGameTimeCount++;
}

void CPPGameView::SetDiamondLine()
{
	if (m_nLines[1] == 0)
	{
//		if (m_nLines[0] <= 7)
		m_nLines[0] += 2;
		m_nLines[1] += m_nLines[0];
	}
	else
		m_nLines[1]--;
}

int CPPGameView::GetCurRemainLine()
{
	return m_nLines[1];
}

void CPPGameView::AddLevel()
{
	m_pDoc->m_tGameScore.nLevel++;
	m_nlevel = m_pDoc->m_tGameScore.nLevel;
	// 设置进入下一关声音
	SetSoundStatus(NEXT_LEVEL);
	PlaySound(NEXT_LEVEL);
//	RegisterSound(true);
}

void CPPGameView::SetAllRedrawStatus(boolean bRedrawAll)
{
//	m_bAllRedraw = bRedrawAll;
}

void CPPGameView::Draw(IBitmap* pIDest, IBitmap* pISrc, int nDestX, int nDestY,
					 int nWidth, int nHeight, int nSrcX, int nSrcY)
{
	NativeColor    color;
	
	IBITMAP_GetPixel(pISrc, 0, 0, &color);
	IBITMAP_SetTransparencyColor(pISrc,color);
	IBITMAP_BltIn(pIDest, nDestX, nDestY, nWidth, nHeight, pISrc, nSrcX, nSrcY, AEE_RO_TRANSPARENT);
	IDISPLAY_Update (((CPPGameApp*)GETAPPINSTANCE())->m_pIDisplay);
}

int CPPGameView::GetSelectRowFromX(int nX)
{
	int nRow = 0;
	

⌨️ 快捷键说明

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