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

📄 hfloorcontainer.cpp

📁 这是一个基于symbian操作系统的下100层游戏
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		iOffScreenBitmapGc->BitBlt(TPoint(0, wallcnti * 16 + wallposy), imgWall);
		iOffScreenBitmapGc->BitBlt(TPoint(BACKWIDTH - 8, wallcnti * 16 + wallposy), imgWall);
	}
}

void CHFloorContainer::DrawFps()
{
	iOffScreenBitmapGc->UseFont(iCoeEnv->NormalFont());
	iOffScreenBitmapGc->SetPenColor(TRgb(0, 0, 0));
	iOffScreenBitmapGc->DrawText( _L("FPS:"), TPoint(1, 11));
	iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 0));
	iOffScreenBitmapGc->DrawText( _L("FPS:"), TPoint(2, 12));
}

void CHFloorContainer::DrawBoarder()
{
	iOffScreenBitmapGc->BitBlt(TPoint(0, BACKHEIGHT - 32), imgBoarder);
}

TInt CHFloorContainer::ConvertGB(TDes8 &sString, TDes16 &sRet) const
{
	

	CCnvCharacterSetConverter* converter = CCnvCharacterSetConverter::NewLC();
	if (converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
		iCoeEnv->FsSession()) != CCnvCharacterSetConverter::EAvailable)
	{
		User::Leave(KErrNotSupported);
		return 0;
	}

	TInt state = CCnvCharacterSetConverter::KStateDefault;

	if (CCnvCharacterSetConverter::EErrorIllFormedInput == converter->ConvertToUnicode(sRet, sString, state))
	{
		User::Leave(KErrArgument);
		return 0;
	}
	
	CleanupStack::PopAndDestroy();
	return 1;
}

void CHFloorContainer::DrawFloor()
{
	for (TInt i = 0; i <= FLOORCNT; i++)
	{
		switch (bfloortype[i])
		{
		case 1:	
			{
				iOffScreenBitmapGc->BitBlt(TPoint(arrfloor[i].iX, arrfloor[i].iY - 7), imgFloor2);
				iOffScreenBitmapGc->BitBlt(arrfloor[i], imgFloor5);
				break;
			}
		case 2:
			{
				if ((bJump==0)||(bJump>2))
					iOffScreenBitmapGc->BitBlt(TPoint(arrfloor[i].iX, arrfloor[i].iY), imgFloor3);
				else if (iCurFloorID==i)
					iOffScreenBitmapGc->BitBlt(TPoint(arrfloor[i].iX, arrfloor[i].iY - 4), imgFloor4);
				else
					iOffScreenBitmapGc->BitBlt(TPoint(arrfloor[i].iX, arrfloor[i].iY), imgFloor3);
				break;
			}
		case 3:
			{
				iOffScreenBitmapGc->BitBlt(arrfloor[i], imgFloor6);
				if (i == iCurFloorID)
				{
					switch (bfloordown)
					{
					case 1:
					case 2:
						{
							iOffScreenBitmapGc->BitBlt(arrfloor[iCurFloorID], imgFloor7);
							bfloordown ++;
							break;
						}
					case 3:
					case 4:
						{
							playerPosY += 3;
							iOffScreenBitmapGc->BitBlt(arrfloor[iCurFloorID], imgFloor8);
							bfloordown ++;
							break;
						}
					case 5:
					case 6:
						{
							iOffScreenBitmapGc->BitBlt(arrfloor[iCurFloorID], imgFloor9);
							bfloordown ++;
							break;
						}
					case 7:
					case 8:
						{
							iOffScreenBitmapGc->BitBlt(arrfloor[iCurFloorID], imgFloor8);
							bfloordown ++;
							break;
						}
					case 9:
					case 10:
						{
							iOffScreenBitmapGc->BitBlt(arrfloor[iCurFloorID], imgFloor7);
							bfloordown ++;
							break;
						}
					default:{
						iOffScreenBitmapGc->BitBlt(arrfloor[iCurFloorID], imgFloor6);
						bfloordown = 0;
						break;
							}
					}
				}
				break;
			}
		case 4:
			{
				iOffScreenBitmapGc->BitBlt(arrfloor[i], imgFloor10);
				if (bfloorscroll[i] > 0)
				{   
					if (iCurFloorID == i)
						playerPosX += 2;
					bfloorscroll[i] ++;
					if (bfloorscroll[i] == 4)
						bfloorscroll[i] = 1;
					switch (bfloorscroll[i])
					{
					case 1: {
						iOffScreenBitmapGc->BitBlt(arrfloor[i], imgFloor10);
						break;
					}
					case 2: {
						iOffScreenBitmapGc->BitBlt(arrfloor[i], imgFloor11);
						break;
					}
					case 3: {
						iOffScreenBitmapGc->BitBlt(arrfloor[i], imgFloor12);
						break;
					}
					}
				}else{
					if (iCurFloorID ==i)
						playerPosX -= 2;
					bfloorscroll[i] --;
					if (bfloorscroll[i] == -4)
						bfloorscroll[i] = -1;
					switch (bfloorscroll[i])
					{
					case -1: {
						iOffScreenBitmapGc->BitBlt(arrfloor[i], imgFloor12);
						break;
					}
					case -2: {
						iOffScreenBitmapGc->BitBlt(arrfloor[i], imgFloor11);
						break;
					}
					case -3: {
						iOffScreenBitmapGc->BitBlt(arrfloor[i], imgFloor10);
						break;
					}
					}
				}
				break;
			}
		default : 
			{
			iOffScreenBitmapGc->BitBlt(arrfloor[i], imgFloor);
			break;
			}
		}	
	}
}

void CHFloorContainer::DrawPlayer()
{
	if (GameStatus == GAMESTART)
	{
		
	if (playercanmove)
		PlayerMove(playerdir);
	else
		playerStatus = 3;
	if (playerPosX<9)
		playerPosX = 8;
	if (playerPosX > 152)
		playerPosX = 152;
	if (playerPosY<8)
	{
		playerPosY = 9;
		HP -= 2;
		FlashUserState = 1;
		bJump = 0;
		HitCnt = 0;
	}	

	if (!bJump)
	{
		TInt iPos = ChkHit();
		
		if (iPos!=-1)
		{
			iCurFloorID = iPos;
			playerPosY = arrfloor[iPos].iY - 16 - 1;
			if ((bfloortype[iPos]==1)&&NextFloor)
			{
				NextFloor = 0;
				HP -= 2;
				FlashUserState = 1;
				HitCnt = 0;
				iMAPBHit->Play();
			}else{
				if (NextFloor)
					{
					iMAPHit->Play();
					HitCnt ++;
					if (bfloortype[iPos]==2)
					{
						bJump = 1;
					}
					if (bfloortype[iPos] == 3)
					{
						bfloordown = 1;
					}
					NextFloor = 0;
					if (HP < HPMAX)
						HP ++;
				}
			}
		}
		else
		{
			iCurFloorID = -1;
			NextFloor = 1;			
			playerPosY += 4;
			if (!playercanmove)
			{
				if (bJumpStatus)
				{
					playerStatus = 7;
					bJumpStatus = 0;
				}			
				else
				{
					playerStatus = 8;
					bJumpStatus = 1;
				}
			}else
			{
				if (playerdir==1)
				{ 
					if (bJumpStatus)
					{
						playerStatus = 9;
						bJumpStatus = 0;
					}			
					else
					{
						playerStatus = 10;
						bJumpStatus = 1;
					}
				}else if (playerdir ==2)
				{
					if (bJumpStatus)
					{
						playerStatus = 12;
						bJumpStatus = 0;
					}			
					else
					{
						playerStatus = 11;
						bJumpStatus = 1;
					}
				} else 
				{
					playerStatus = 3;
				}
			}	
		}
	}
	else
	{
		bJump ++;
		if (bJump > 10)
			bJump = 0;
		if (bJump != 10)
			playerPosY -= 4;

		if (!playercanmove)
		{
			if (bJumpStatus)
			{
				playerStatus = 8;
				bJumpStatus = 0;
			}			
			else
			{
				playerStatus = 7;
				bJumpStatus = 1;
			}
		}else
		{
			if (playerdir==1)
				{ 
					if (bJumpStatus)
					{
						playerStatus = 9;
						bJumpStatus = 0;
					}			
					else
					{
						playerStatus = 10;
						bJumpStatus = 1;
					}
				}else if (playerdir ==2)
				{
					if (bJumpStatus)
					{
						playerStatus = 12;
						bJumpStatus = 0;
					}			
					else
					{
						playerStatus = 11;
						bJumpStatus = 1;
					}
				} else 
				{
					playerStatus = 3;
				}
		}
	}
	if (FlashUserState!=0)
	{
		FlashUserState ++;
		if (FlashUserState > 26) 
			FlashUserState = 0;
		if ((FlashUserState%2)!=0)
			NBitmapMethods::BitBltMaskedEntireBitmap(*iOffScreenBitmapGc, TPoint(playerPosX, playerPosY), *imgPlayer[playerStatus], *imgPlayerMask[playerStatus]);	
	}
	else
	{
		NBitmapMethods::BitBltMaskedEntireBitmap(*iOffScreenBitmapGc, TPoint(playerPosX, playerPosY), *imgPlayer[playerStatus], *imgPlayerMask[playerStatus]);
	}
	}
}

void CHFloorContainer::PlayerMove(TInt playerdir)
{
	switch (playerdir)
	{
	case 1:
		playerStatus ++;
		if (playerStatus>=3)
			playerStatus = 0;
		playerPosX +=4 ;
		break;
	case 2:
		playerStatus --;
		if ((playerStatus<=3)||(playerStatus>6))
			playerStatus = 6;
		playerPosX -= 4;
		break;
	default : playerStatus = 3;
		break;
	}
}

TInt CHFloorContainer::ChkHit()
{
	for (TInt i = 0; i <= FLOORCNT; i ++)
	{
		if ((((arrfloor[i].iY - playerPosY - 16)>-4)&&((arrfloor[i].iY - playerPosY - 16)<4))&&((((playerPosX + 16 - 5)>arrfloor[i].iX)&&((playerPosX + 16 - 5)<(arrfloor[i].iX + 44)))||(((playerPosX + 5) < (arrfloor[i].iX + 44))&&((playerPosX + 5) >arrfloor[i].iX))))
			return i;
	}
	return -1;
}

void CHFloorContainer::DrawHP()
{
	//
	for (TInt i = 0; i < HP; i++)
	{
		iOffScreenBitmapGc->BitBlt(TPoint(i * 10 + 26, 193), imgHeart);
	}
	
}

void CHFloorContainer::GameStart()
{
//初始化变量
	mapposx = -64;
	mapposy = -64;
	wallposy = -16;
	playerPosX = 10;
	playerPosY = 10;
	playerStatus = 3;
	playercanmove = 0;
	playerdir = 0;
	HitCnt = 0;
	iIsOverTime = 0;
	HP = HPMAX;
	CurScore = 0;
	GameStatus = GAMESTART;
	FlashUserState = 0;
	iScoreStep = 0;
	for (TInt i = 0; i <= FLOORCNT; i++)
	{
		bfloortype[i] = 0;
	}
}

void CHFloorContainer::DrawScore()
{

	if (CurScore==100)
	{
		iMAPFall->Play();
		iIsOverTime = 1;
	}
	TBuf<4> buf;
	buf.Num(HighScore);
	iOffScreenBitmapGc->UseFont(LatinBold12());
	iOffScreenBitmapGc->SetPenColor(TRgb(0, 0, 0));
	iOffScreenBitmapGc->DrawText(buf, TPoint(145, 200));
	iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 255));
	iOffScreenBitmapGc->DrawText(buf, TPoint(144, 200));
	buf.Num(CurScore);
	iOffScreenBitmapGc->UseFont(LatinBold13());
	iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 0));
	iOffScreenBitmapGc->DrawText(buf, TPoint(79, 190));

}

TInt CHFloorContainer::ChkGameOver()
{
	if ((HP<1)||(playerPosY > 200))
		return 1;
	return 0;
}

void CHFloorContainer::DrawGameOver()
{
	iOffScreenBitmapGc->UseFont(LatinBold17());
	iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 255));
	iOffScreenBitmapGc->DrawText(_L("GAME OVER !!!"), TPoint(40, 80));
}

void CHFloorContainer::DrawTop()
{
	NBitmapMethods::BitBltMaskedEntireBitmap(*iOffScreenBitmapGc, TPoint(9, 0), *imgTop, *imgTopMask);
	//iOffScreenBitmapGc->BitBlt(TPoint(0,0), imgTop);
}

void CHFloorContainer::SaveScore()
{
//
	RFs rfs;
	RFile f;
	rfs.Connect();
	rfs.MkDirAll(iSaveFileName);
	if (f.Create(rfs, iSaveFileName, EFileWrite) != KErrNone)
	{
		if (f.Open(rfs, iSaveFileName, EFileWrite) != KErrNone)
		{
			rfs.Close();
			User::Leave(KErrNotSupported);
		}
	}
	TBuf8<4> buf;
	buf.Num(HighScore);
	f.Write(buf, buf.Length());
	f.Close();
	rfs.Close();
}

void CHFloorContainer::LoadScore()
{
//
	RFs rfs;
	RFile f;
	rfs.Connect();
	rfs.MkDirAll(iSaveFileName);
	if (f.Open(rfs, iSaveFileName, EFileRead) != KErrNone)
	{
		rfs.Close();
		HighScore=0;
	}else{
		TBuf8<4> buf;
		f.Read(buf, 3);
		TLex8 lex(buf);
		lex.Val(HighScore);
		f.Close();
		rfs.Close();
	}	
}

void CHFloorContainer::DrawHitCnt()
{
	if (HitCnt > 1)
	{	
		TBuf<16> buffer;
		buffer.Num(HitCnt);
		buffer.Append(_L(" Hit"));
		iOffScreenBitmapGc->UseFont(LatinBold12());
		iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 0));
		iOffScreenBitmapGc->DrawText(buffer, TPoint(120, 30));
	}
}

void CHFloorContainer::DrawLogo()
{
	
	iOffScreenBitmapGc->BitBlt(TPoint(19, 93), imgLogo);
}

void CHFloorContainer::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds &)
{
//
}

void CHFloorContainer::MapcPlayComplete(TInt aError)
{
//
}

void CHFloorContainer::DrawAbout()
{

	TBuf<128> iAbout;
	iAbout.Copy(_L("X-Vertical"));
	iOffScreenBitmapGc->UseFont(LatinPlain12());
	iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 255));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 20));
	iAbout.Copy(_L("Version 1.20"));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 35));
	iAbout.Copy(_L("By Mobile Power Digital Co., Ltd."));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 50));
	iAbout.Copy(_L("http://www.mobilepow.com"));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 65));
}

void CHFloorContainer::DrawHelp()
{
	TBuf<128> iAbout;
	iAbout.Copy(_L("Help"));
	iOffScreenBitmapGc->UseFont(LatinPlain12());
	iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 255));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 20));
	iAbout.Copy(_L("Start the Game: Select 'Start"));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 50));
	iAbout.Copy(_L("Game'from the menu and press"));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 65));
	iAbout.Copy(_L("OK."));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 80));
	iAbout.Copy(_L("Move around: Press the Left"));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 95));	
	iAbout.Copy(_L("and Right keys to control the"));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 110));
	iAbout.Copy(_L("moving of the characters."));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 125));
	iAbout.Copy(_L("Quit the Game: Right Click to "));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 140));
	iAbout.Copy(_L("quit the game"));
	iOffScreenBitmapGc->DrawText(iAbout, TPoint(10, 155));
}

void CHFloorContainer::DrawDemo()
{
	TBuf<256> buf;
	buf.Copy(_L("Thanks for your interested in"));
	iOffScreenBitmapGc->DrawText(buf, TPoint(10, 40));
	buf.Copy(_L("X-Vertical."));
	iOffScreenBitmapGc->DrawText(buf, TPoint(10, 55));
	buf.Copy(_L("This is only the demo version."));
	iOffScreenBitmapGc->DrawText(buf, TPoint(10, 70));
	buf.Copy(_L("Please download the full version"));
	iOffScreenBitmapGc->DrawText(buf, TPoint(10, 85));
	buf.Copy(_L("for the full enjoyment!"));
	iOffScreenBitmapGc->DrawText(buf, TPoint(10, 100));
}

⌨️ 快捷键说明

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