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

📄 hfloorcontainer.cpp

📁 这是一个基于symbian操作系统的下100层游戏
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
* ============================================================================
*  Name     : CHFloorContainer from HFloorContainer.h
*  Part of  : HFloor
*  Created  : 2003-7-5 by 土匪般的脸
*  Implementation notes:
*     Initial content was generated by Series 60 AppWizard.
*  Version  :
*  Copyright: 
* ============================================================================
*/

// INCLUDE FILES
#include <coemain.h>
#include "HFloorContainer.h"
#include "images.h"
#include "bitmapmethods.h"
#include <charconv.h>
#include <e32math.h>
#include <e32std.h>
#include <aknutils.h>
#include <f32file.h>
#include <eikappui.h>
#include <eikapp.h>

#define INTERALTIME 70000
#define DELAYTIME 70000
#define MENUSELECTSTART _L("START GAME")
#define MENUSELECTHELP _L("HELP")
#define MENUSELECTABOUT _L("ABOUT")
#define MENUSELECTQUIT _L("QUIT")
#define HPMAX 6
#define DEMOFLOORCNT 5


_LIT(KMbm, "bitmapdat.mbm");
_LIT(KSave, "save.dat");
_LIT(KHitWav, "hit.wav");
_LIT(KFallWav, "fall.wav");
_LIT(KBHitWav, "bhit.wav");
/*
_LIT(KMbm, "c:\\system\\apps\\HFloor\\bitmapdat.mbm");
_LIT(KSave, "c:\\system\\apps\\HFloor\\save.dat");
_LIT(KHitWav, "c:\\system\\apps\\HFloor\\hit.wav");
_LIT(KFallWav, "c:\\system\\apps\\HFloor\\fall.wav");
_LIT(KBHitWav, "c:\\system\\apps\\HFloor\\bhit.wav");
*/


// ================= MEMBER FUNCTIONS =======================

// ---------------------------------------------------------
// CHFloorContainer::ConstructL(const TRect& aRect)
// EPOC two phased constructor
// ---------------------------------------------------------
//
void CHFloorContainer::ConstructL(const TRect& aRect)
    {
    CreateWindowL();
	SetRect(aRect);

	// Get the application name with full path
	TFileName app = CEikonEnv::Static()->EikAppUi()->Application()->AppFullName();

	// Replace extension with mbm
	TParse parse;
#ifdef __WINS__
	parse.Set(_L("c:"), &app, NULL);
#else
	parse.Set(app, NULL, NULL);
#endif
	iMbmFileName.Copy(parse.DriveAndPath());
	iMbmFileName.Append(KMbm);
	iSaveFileName.Copy(parse.DriveAndPath());
	iSaveFileName.Append(KSave);
	iHitWavFileName.Copy(parse.DriveAndPath());
	iHitWavFileName.Append(KHitWav);
	iBHitWavFileName.Copy(parse.DriveAndPath());
	iBHitWavFileName.Append(KBHitWav);
	iFallWavFileName.Copy(parse.DriveAndPath());
	iFallWavFileName.Append(KFallWav);


	iMAPBHit = CMdaAudioPlayerUtility::NewFilePlayerL(iBHitWavFileName, *this);
	iMAPHit = CMdaAudioPlayerUtility::NewFilePlayerL(iHitWavFileName, *this);
	iMAPFall = CMdaAudioPlayerUtility::NewFilePlayerL(iFallWavFileName, *this);
    

	//创建图片
	imgBackgroud = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesMap1);
	imgWall = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesWall);
	imgBoarder = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesBoarder);
	imgFloor = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor1);
	imgFloor5 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor5);
	imgPlayer[0] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay1);
	imgPlayerMask[0] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay1mask);
	imgPlayer[1] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay2);
	imgPlayerMask[1] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay2mask);
	imgPlayer[2] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay3);
	imgPlayerMask[2] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay3mask);
	imgPlayer[3] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay4);
	imgPlayerMask[3] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay4mask);
	imgPlayer[4] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay5);
	imgPlayerMask[4] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay5mask);
	imgPlayer[5] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay6);
	imgPlayerMask[5] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay6mask);
	imgPlayer[6] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay7);
	imgPlayerMask[6] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay7mask);
	imgPlayer[7] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay8);
	imgPlayerMask[7] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay8mask);
	imgPlayer[8] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay9);
	imgPlayerMask[8] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay9mask);
	imgPlayer[9] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay10);
	imgPlayerMask[9] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay10mask);
	imgPlayer[10] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay11);
	imgPlayerMask[10] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay11mask);
	imgPlayer[11] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay12);
	imgPlayerMask[11] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay12mask);
	imgPlayer[12] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay13);
	imgPlayerMask[12] = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesPlay13mask);
	imgTop = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesTop);
	imgTopMask = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesTopmask);
	imgLogo = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesLogoimg);		
	imgFloor2 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor2);
	imgHeart = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesHeart);
	imgFloor3 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor3);
	imgFloor4 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor4);
	imgFloor6 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor6);
	imgFloor7 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor7);
	imgFloor8 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor8);
	imgFloor9 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor9);
	imgFloor10 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor10);
	imgFloor11 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor11);
	imgFloor12 = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesFloor12);
	imgTitle = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesTitle);
	imgTitleMask = NBitmapMethods::CreateBitmapL(iMbmFileName, EMbmImagesTitlemask);
	
			
	//创建定时器
	iPeriodicTimer = CPeriodic::NewL(CActive::EPriorityStandard);

	//初始化双缓冲环境
	// Create the off screen bitmap and device / gc
	iOffScreenBitmap = NBitmapMethods::CreateBitmapL(Rect().Size(),KColourDepth);
	iOffScreenBitmapDevice = NBitmapMethods::CreateBitmapDeviceL(*iOffScreenBitmap);
	iOffScreenBitmapGc = NBitmapMethods::CreateGraphicsContextL(*iOffScreenBitmapDevice);
	

	GameStatus = APPLOGO;
	MenuStatus = 0;
	logoDelay = 0;
	FlashUserState = 0;
	bJump = 0;
	HitCnt = 0;
	//初始化菜单项
	//TBuf8<16> s1, h1, a1, q1;
	menus.Copy(MENUSELECTSTART);
	menuh.Copy(MENUSELECTHELP);
	menua.Copy(MENUSELECTABOUT);
	menuq.Copy(MENUSELECTQUIT);
	//s1.Copy(MENUSELECTSTART);
	//h1.Copy(MENUSELECTHELP);
	//a1.Copy(MENUSELECTABOUT);
	//q1.Copy(MENUSELECTQUIT);
	//ConvertGB(s1, menus);
	//ConvertGB(h1, menuh);
	//ConvertGB(a1, menua);
	//ConvertGB(q1, menuq);
	bRunStatus = 1;
    ActivateL();
	LoadScore();
    }

// Destructor
CHFloorContainer::~CHFloorContainer()
    {
		SaveScore();
		if (iPeriodicTimer)
		{
		// Stop the periodic timer
		iPeriodicTimer->Cancel();
		}

		delete imgTitle;
		imgTitle = NULL;

		delete imgTitleMask;
		imgTitleMask = NULL;

		delete imgLogo;
		imgLogo = NULL;

		delete iMAPBHit;
		iMAPBHit = NULL;

		delete iMAPFall;
		iMAPFall = NULL;

		delete iMAPHit;
		iMAPHit = NULL;

		delete iPeriodicTimer;
		iPeriodicTimer = NULL;

		delete imgBackgroud;
		imgBackgroud = NULL;

		delete imgHeart;
		imgHeart = NULL;

		delete imgFloor2;
		imgFloor2 = NULL;

		delete imgFloor3;
		imgFloor3 = NULL;

		delete imgFloor4;
		imgFloor4 = NULL;

		delete imgFloor5;
		imgFloor5 = NULL;

		delete imgFloor6;
		imgFloor6 = NULL;

		delete imgFloor7;
		imgFloor7 = NULL;

		delete imgFloor8;
		imgFloor8 = NULL;

		delete imgFloor9;
		imgFloor9 = NULL;

		delete imgFloor10;
		imgFloor10 = NULL;

		delete imgFloor11;
		imgFloor11 = NULL;

		delete imgFloor12;
		imgFloor12 = NULL;

		delete imgWall;
		imgWall = NULL;

		delete imgBoarder;
		imgBoarder = NULL;

		delete imgFloor;
		imgFloor = NULL;


		delete imgTop;
		imgTop = NULL;

		delete imgTopMask;
		imgTopMask = NULL;

		for (TInt i = 0; i <= 12; i ++)
		{delete imgPlayer[i];
		imgPlayer[i] = NULL;

		delete imgPlayerMask[i];
		imgPlayerMask[i] = NULL;
		}

		delete iOffScreenBitmap;
		iOffScreenBitmap = NULL;

		delete iOffScreenBitmapDevice;
		iOffScreenBitmapDevice = NULL;

		delete iOffScreenBitmapGc;
		iOffScreenBitmapGc = NULL;
    }

// ---------------------------------------------------------
// CHFloorContainer::SizeChanged()
// Called by framework when the view size is changed
// ---------------------------------------------------------
//
void CHFloorContainer::SizeChanged()
    {
    // TODO: Add here control resize code etc.
    }

// ---------------------------------------------------------
// CHFloorContainer::CountComponentControls() const
// ---------------------------------------------------------
//
TInt CHFloorContainer::CountComponentControls() const
    {
    return 0; // return nbr of controls inside this container
    }
/*
// ---------------------------------------------------------
// CHFloorContainer::ComponentControl(TInt aIndex) const
// ---------------------------------------------------------
//
CCoeControl* CHFloorContainer::ComponentControl(TInt aIndex) const
    {
		case (aIndex)
		{
			default : 
				return NULL;
		}
    }
*/
// ---------------------------------------------------------
// CHFloorContainer::Draw(const TRect& aRect) const
// ---------------------------------------------------------
//
void CHFloorContainer::Draw(const TRect& /*aRect*/) const
    {
		//UpdateDisplay();
    }

// ---------------------------------------------------------
// CHFloorContainer::HandleControlEventL(
//     CCoeControl* aControl,TCoeEvent aEventType)
// ---------------------------------------------------------
//
void CHFloorContainer::HandleControlEventL(
    CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
    {
    // TODO: Add your control event handler code here
    }

// End of File  

void CHFloorContainer::UpdateDisplay()
{
	//
	switch (GameStatus)
	{
	case APPLOGO:
	{
		DrawLogo();
		logoDelay++;
		if (logoDelay == 30)
			GameStatus = GAMELOG;
		break;
	}
	case GAMELOG:
	{
		DrawMap();
		DrawTitle();
		DrawLog();
		break;
	}
	case GAMESTART:
	{
		if (iIsOverTime)
		{
			DrawMap();
			DrawDemo();
		}
		else
		{
			DrawMap();
			DrawFloor();
			DrawWall();
			DrawPlayer();
			DrawBoarder();
			DrawHP();
			DrawScore();
			DrawTop();
			DrawHitCnt();
		}
		break;
	}
	case GAMEOVER:
	{
		DrawMap();
		DrawFloor();
		DrawWall();
		DrawPlayer();
		DrawBoarder();
		DrawHP();
		DrawScore();
		DrawGameOver();
		DrawTop();
		if (CurScore > HighScore)
			HighScore = CurScore;
		break;
	}
	case GAMEABOUT:
		{
			DrawMap();
			DrawLogo();
			DrawAbout();
			break;
		}
	case GAMEHELP:
		{
			DrawMap();
			DrawHelp();
			break;
		}
	default: break;
	}
	CWindowGc& gc = SystemGc();
	gc.BitBlt(TPoint(0,0),iOffScreenBitmap);
}

TInt CHFloorContainer::Period(TAny *aPtr)
{
	if (((CHFloorContainer*)aPtr)->bRunStatus)
	{
		((CHFloorContainer*)aPtr)->bRunStatus = 0;
		((CHFloorContainer*)aPtr)->DoPeriodTask();
		((CHFloorContainer*)aPtr)->bRunStatus = 1;
	}
	return 1;
}

void CHFloorContainer::DoPeriodTask()
{
//	bRunStatus = 0;
		
		//if (mapposx==0) mapposx = -64;
		//计算背景图像
		if (mapposy == -64) mapposy = 0;
		mapposy --;
		if (GameStatus == GAMELOG)
		{
			if (mapposx == -64) mapposx = 0;
			mapposx --;
		}
		//计算左右两侧的强的图像	
	
	if (GameStatus == GAMESTART)
	{
		if (ChkGameOver())
		{
			GameStatus = GAMEOVER;
			iMAPFall->Play();
		}
		if (wallposy == -16) wallposy = 0;
		wallposy -= 2;
		
		//计算阶梯
		for (TInt fcnt = 0; fcnt <= FLOORCNT; fcnt ++)
		{
			if (!bfloorstatus[fcnt])
			{
				arrfloor[fcnt].iX = 8 + TInt(Math::Random() % 114);
				if (!arrfloor[fcnt].iY)	
					arrfloor[fcnt].iY = fcnt * FLOOROFFPOSY;
				else
				{
					arrfloor[fcnt].iY = FLOORCNT * FLOOROFFPOSY;
				}
				bfloorstatus[fcnt] = 1;
			}			
			else
			{
				arrfloor[fcnt].iY -= 2;
				if (arrfloor[fcnt].iY == -FLOOROFFPOSY)
				{
					TInt itype = TInt(Math::Random() % 20);
					if (itype>16)
						bfloortype[fcnt] = 0;
					else{
						if (itype > 12)
							bfloortype[fcnt] = 1;
						else if (itype >8)
							bfloortype[fcnt] = 2;
						else if (itype >4)
							bfloortype[fcnt] = 3;
						else 
						{
							bfloortype[fcnt] = 4;
							if (Math::Random() % 2)
								bfloorscroll[fcnt] = 1;
							else
								bfloorscroll[fcnt] = -1;
						}						
					}
					bfloorstatus[fcnt] = 0;
					iScoreStep ++;
					if (iScoreStep == 5)
					{
						CurScore ++;
						iScoreStep = 0;
					}					
				}
			}
		}
	}

		CWindowGc& gc = SystemGc();
		gc.Activate(*DrawableWindow());
		UpdateDisplay();
		gc.Deactivate();
}

void CHFloorContainer::StartTimer()
{
	if (!iPeriodicTimer->IsActive())
	{
		iPeriodicTimer->Start(INTERALTIME, DELAYTIME, TCallBack(CHFloorContainer::Period, this));
		bRunStatus = 1;
	}
}


void CHFloorContainer::DrawMap() 
{
	//画背景
	for (TInt mapcnti = 0; mapcnti <= TInt(BACKHEIGHT / 64) + 1; mapcnti ++)
		for (TInt mapcntj = 0; mapcntj <= TInt(BACKWIDTH /64) + 1; mapcntj++)
		{
			iOffScreenBitmapGc->BitBlt(TPoint(mapcntj * 64 + mapposx, mapcnti * 64 + mapposy), imgBackgroud);			
		}
}

void CHFloorContainer::DrawTitle()
{	
	NBitmapMethods::BitBltMaskedEntireBitmap(*iOffScreenBitmapGc, TPoint(3, 15), *imgTitle, *imgTitleMask);

}

void CHFloorContainer::DrawLog()
{
	iOffScreenBitmapGc->UseFont(LatinBold13());
	iOffScreenBitmapGc->SetPenColor(TRgb(100, 100, 100));
	iOffScreenBitmapGc->DrawText(menus, TPoint(51, 141));
	iOffScreenBitmapGc->DrawText(menuh, TPoint(51, 156));
	iOffScreenBitmapGc->DrawText(menua, TPoint(51, 171));
	iOffScreenBitmapGc->DrawText(menuq, TPoint(51, 186));
	iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 255));
	switch (MenuStatus)
	{
	case 0:
		{
			iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 0));
			iOffScreenBitmapGc->DrawText(menus, TPoint(50, 140));
			iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 255));
			iOffScreenBitmapGc->DrawText(menuh, TPoint(50, 155));
			iOffScreenBitmapGc->DrawText(menua, TPoint(50, 170));
			iOffScreenBitmapGc->DrawText(menuq, TPoint(50, 185));
			break;
		}
	case 1:
		{
			
			iOffScreenBitmapGc->DrawText(menus, TPoint(50, 140));
			iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 0));
			iOffScreenBitmapGc->DrawText(menuh, TPoint(50, 155));
			iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 255));
			iOffScreenBitmapGc->DrawText(menua, TPoint(50, 170));
			iOffScreenBitmapGc->DrawText(menuq, TPoint(50, 185));
			break;
		}
	case 2:
		{
			iOffScreenBitmapGc->DrawText(menus, TPoint(50, 140));
			iOffScreenBitmapGc->DrawText(menuh, TPoint(50, 155));
			iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 0));			
			iOffScreenBitmapGc->DrawText(menua, TPoint(50, 170));
			iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 255));
			iOffScreenBitmapGc->DrawText(menuq, TPoint(50, 185));
			break;
		}
	case 3:
		{
			iOffScreenBitmapGc->DrawText(menus, TPoint(50, 140));
			iOffScreenBitmapGc->DrawText(menuh, TPoint(50, 155));
			iOffScreenBitmapGc->DrawText(menua, TPoint(50, 170));
			iOffScreenBitmapGc->SetPenColor(TRgb(255, 255, 0));
			iOffScreenBitmapGc->DrawText(menuq, TPoint(50, 185));
			break;
		}
	}
	
}

void CHFloorContainer::DrawWall()
{
	for (TInt wallcnti = 0; wallcnti <= TInt(BACKHEIGHT / 16); wallcnti++)
	{

⌨️ 快捷键说明

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