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

📄 cchrplayer.cpp

📁 symbian 下的mario游戏源代码
💻 CPP
字号:
   /*
============================================================================
    * Name : CChrPlayer.cpp
    * Part of : 2DMario
    * Description : Implementation of CChrPlayer
    * Copyright (c) 2007 Nokia Corporation
============================================================================
    */

// INCLUDE FILES
#include "CChrPlayer.h"
#include "CSprite.h"
#include "MSystem.h"
#include "CTileMap.h"

const TInt KMaxSpeed = 16500;



CChrPlayer* CChrPlayer::NewL( CSprite* aSprite, MSystem* aSystem, CTileMap* aMap )
	{
	CChrPlayer* self = new( ELeave )CChrPlayer( aSprite, aSystem, aMap );
	CleanupStack::PushL( self );
	self->ConstructL();
	CleanupStack::Pop( self );
	return self;
	};



CChrPlayer::~CChrPlayer()
	{

	}



CChrPlayer::CChrPlayer( CSprite* aSprite, MSystem* aSystem, CTileMap* aMap )
	: iSprite( aSprite )
	, iSystem( aSystem )
	, iTileMap( aMap )
	{

	}



void CChrPlayer::ConstructL()
	{

	}



void CChrPlayer::ActivateL()
	{

	}



void CChrPlayer::Deactivate()
	{

	}



void CChrPlayer::Draw( CBitmap& aTarget, const TPoint& aCamera )
	{
	if( iSpeed.iX > 0 ) iXDir = 1;
	if( iSpeed.iX < 0 ) iXDir = 0;

	TInt spr = ( iPosition.iX >> 19 ) & 3;
	spr += iXDir * 4;
	
	iSprite->Draw( aTarget, spr, aCamera );
	}



void CChrPlayer::Move()
	{
	TBool move = EFalse;

	if( !iPlayerDead )
		{
		if( iSystem->KeyState( EStdKeyLeftArrow ) || iSystem->KeyState( EStdKeyDevice6 ) )
			{
			if( ( iPosition.iX >> 16 ) <= 0 ) // Beginning of tilemap
				{
				iSpeed.iX -= iSpeed.iX;
				}
			else
				{
				iSpeed.iX -= 256;
				move = ETrue;
				}
			}
		if( iSystem->KeyState( EStdKeyRightArrow )  || iSystem->KeyState( EStdKeyDevice7 ) )
			{
			if( ( iPosition.iX >> 16 ) > 253*8 ) // End of Tilemap
				{
				iSpeed.iX -= iSpeed.iX;
				}
			else
				{
				iSpeed.iX += 256;
				move = ETrue;
				}
			}

		if( ! move )
			{
			if( iSpeed.iX > 0 ) 
				{
				iSpeed.iX -= 32;
				if( iSpeed.iX < 0 )
					{
					iSpeed.iX = 0;
					}
				}

			if( iSpeed.iX < 0 ) 
				{
				iSpeed.iX += 32;
				if( iSpeed.iX > 0 )
					{
					iSpeed.iX = 0;
					}
				}
			}
		
		if( iSpeed.iX > KMaxSpeed ) iSpeed.iX = KMaxSpeed;
		if( iSpeed.iX < -KMaxSpeed ) iSpeed.iX = -KMaxSpeed;
		if( iSpeed.iY > KMaxSpeed ) iSpeed.iY = KMaxSpeed;
		
		TInt x = iPosition.iX >> 16;
		TInt y = iPosition.iY >> 16;

		TInt tile1 = iTileMap->Tile( TPoint( x+5, y+23 ), 0 );
		TInt tile2 = iTileMap->Tile( TPoint( x+20, y+23 ), 0 );

		if( tile1 == 1 && tile2 == 1 )
			{
			iSpeed.iY += 450;
			}
		else
			{
			iSpeed.iY = 0;
			if( iSystem->KeyState( EStdKeyUpArrow )  || iSystem->KeyState( EStdKeyDevice8 ) )
				{
				iSpeed.iY = -KMaxSpeed * 4;
				}
			}
		
		tile1 = iTileMap->Tile( TPoint( x+4, y ), 0 );
		tile2 = iTileMap->Tile( TPoint( x+19, y ), 0 );
		if( tile1 != 1 || tile2 != 1 )
			{
			if( iSpeed.iY < 0 )
				{
				iSpeed.iY = 0;
				}
			}

		tile1 = iTileMap->Tile( TPoint( x+3, y+20 ), 0 );
		tile2 = iTileMap->Tile( TPoint( x+21, y+20 ), 0 );

		if( tile1 != 1 )
			{
			if( iSpeed.iX < 0 )
				{
				iSpeed.iX = 0;
				}
			}

		if( tile2 != 1 )
			{
			if( iSpeed.iX > 0 )
				{
				iSpeed.iX = 0;
				}
			}

		iPosition += iSpeed;
		}
	else
		{ // Player is dead, make last jump
		iSpeed.iY += 256;
		iPosition += iSpeed;
		}

	iSprite->SetPosition( TPoint( iPosition.iX >> 16, iPosition.iY >> 16 ) );
	}



TPoint CChrPlayer::Position()
	{
	return TPoint( iPosition.iX >> 16, iPosition.iY >> 16 );
	}



void CChrPlayer::SetPosition( const TPoint& aPosition )
	{
	iPosition.iX = aPosition.iX << 16;
	iPosition.iY = aPosition.iY << 16;
	}



void CChrPlayer::Die()
	{
	iPlayerDead = ETrue;

	iSpeed.iX = 0;
	iSpeed.iY = -KMaxSpeed * 3; // Make Player Jump
	}



void CChrPlayer::SetType( const TChType& aChType )
	{
	iChType = aChType;
	}



CSprite* CChrPlayer::Sprite()
	{
	return iSprite;
	}



TChType CChrPlayer::Type()
	{
	return iChType;
	}
	
// End of file

⌨️ 快捷键说明

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